Khi hackintosh, việc sử dụng SSDT (Secondary System Description Table) là vô cùng quan trọng để đảm bảo các thành phần phần cứng hoạt động đúng cách trong macOS. SSDT giúp cấu hình và tinh chỉnh các thiết bị và chức năng trên bo mạch chủ. Dưới đây là các SSDT cơ bản mà một PC hay laptop thường dùng để hackintosh và các giải thích cùng đoạn mã ví dụ cho từng SSDT.
1. SSDT-EC-USBX 🌐
SSDT này tạo một Embedded Controller (EC) giả lập và bổ sung USB Power Properties cần thiết cho các phiên bản macOS mới hơn.
Ví dụ đoạn mã SSDT-EC-USBX:
Copy DefinitionBlock ("", "SSDT", 2, "ACDT", "SSDT-EC-USBX", 0x00001000)
{
External (_SB_.PCI0.LPCB.EC0_, DeviceObj)
External (_SB_.PCI0.LPCB.H_EC, DeviceObj)
Scope (\_SB.PCI0.LPCB)
{
If (_OSI ("Darwin"))
{
If (\_SB.PCI0.LPCB.EC0._STA)
{
Device (EC)
{
Name (_HID, "ACID0001")
Name (_CID, "PNP0C09")
Name (_UID, Zero)
Method (_STA, 0, NotSerialized) { Return (0x0F) }
}
}
Else
{
Device (EC)
{
Name (_HID, "ACID0001")
Name (_CID, "PNP0C09")
Name (_UID, Zero)
Method (_STA, 0, NotSerialized) { Return (0x0F) }
}
}
}
}
Scope (\_SB.PCI0.LPCB.EC)
{
Name (_UPC, Package () { 0x0A, 0x0A, 0x0A, 0x0A })
Name (_PLD, Buffer (0x18) { 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
}
}
2. SSDT-PLUG 🔌
SSDT này kích hoạt Plugin Type trên CPU, cần thiết cho việc quản lý năng lượng CPU đúng cách.
Ví dụ đoạn mã SSDT-PLUG:
Copy DefinitionBlock ("", "SSDT", 2, "ACDT", "SSDT-PLUG", 0x00001000)
{
External (_SB_.PCI0.LPCB.CPU0, DeviceObj)
Scope (\_SB.PCI0.LPCB.CPU0)
{
Method (_DSM, 4, NotSerialized)
{
If (!Arg2) { Return (Buffer (One) { 0x00 }) }
Return (Package ()
{
"plugin-type", One,
})
}
}
}
3. SSDT-PMC 🕹️
SSDT này tạo hỗ trợ cho Power Management Controller (PMC) , cần thiết cho các hệ thống sử dụng bộ điều khiển quản lý năng lượng của Intel.
Ví dụ đoạn mã SSDT-PMC:
Copy DefinitionBlock ("", "SSDT", 2, "ACDT", "SSDT-PMC", 0x00001000)
{
External (_SB_.PCI0.LPCB, DeviceObj)
Scope (\_SB.PCI0.LPCB)
{
Device (PMC)
{
Name (_HID, "INT33A1")
Method (_STA, 0, NotSerialized) { Return (0x0F) }
}
}
}
4. SSDT-AWAC ⏰
SSDT này vô hiệu hóa Awake Timers (AWAC) không tương thích và tạo RTC giả lập.
Ví dụ đoạn mã SSDT-AWAC:
Copy DefinitionBlock ("", "SSDT", 2, "ACDT", "SSDT-AWAC", 0x00001000)
{
External (_SB_.PCI0.LPCB.AWAC, DeviceObj)
External (_SB_.PCI0.LPCB.RTC0, DeviceObj)
Scope (\_SB.PCI0.LPCB)
{
If (_OSI ("Darwin"))
{
If (\_SB.PCI0.LPCB.AWAC._STA)
{
Method (_STA, 0, NotSerialized) { Return (0x0) }
}
Device (RTC0)
{
Name (_HID, "PNP0B00")
Method (_STA, 0, NotSerialized) { Return (0x0F) }
}
}
}
}
5. SSDT-XOSI 📊
SSDT này kích hoạt Operating System Interfaces (OSI) tùy chỉnh cho macOS.
Ví dụ đoạn mã SSDT-XOSI:
Copy DefinitionBlock ("", "SSDT", 2, "ACDT", "SSDT-XOSI", 0x00001000)
{
External (_SB_.PCI0, DeviceObj)
Scope (\_SB.PCI0)
{
Method (_OSI, 1, NotSerialized)
{
If (Arg0 == "Darwin")
{
Return (0xFFFFFFFF)
}
Return (Zero)
}
}
}
6. SSDT-GPRW 🌟
SSDT này xử lý các sự kiện GPRW (General Purpose Event) để tránh các vấn đề liên quan đến chế độ Sleep trên một số hệ thống.
Ví dụ đoạn mã SSDT-GPRW:
Copy DefinitionBlock ("", "SSDT", 2, "ACDT", "SSDT-GPRW", 0x00001000)
{
External (_SB_.PCI0.LPCB, DeviceObj)
Scope (\_SB.PCI0.LPCB)
{
Method (_GPRW, 2, NotSerialized)
{
Return (0x0D)
}
}
}
Kết Luận
Các SSDT này đóng vai trò quan trọng trong việc cấu hình hệ thống để hackintosh thành công. Mỗi SSDT đảm nhiệm một chức năng cụ thể và cần thiết cho việc đảm bảo tính ổn định và hiệu năng của hệ thống trong macOS.
Việc hiểu và áp dụng đúng các SSDT giúp bạn tạo một môi trường macOS mượt mà trên phần cứng không phải của Apple. Chúc bạn thành công trong quá trình hackintosh! 🚀
Last updated 9 months ago