Nội dung bài viết
Người ta nói, “Hackintosh là nghệ thuật, hackintosher là nghệ sĩ”. Bạn biết tại sao không? Apple họ đặt mainboard làm máy tính. Họ yêu cầu nhà sản xuất phải thay đổi acpi theo đúng yêu cầu của họ để tối ưu cho macos. Các mainboard non-apple sẽ có acpi hoàn toàn khác (hay nói chính xác là các bảng dsdt, ssdt không tương thích với macos). Chính vì thế các hackintosher đã tìm ra cách chỉnh sửa các bản dsdt, ssdt cho phù hợp với macos hơn. Các phương pháp patch dsdt ra đời. Lúc này, bạn có thể hiệu chỉnh USB, chỉnh độ sáng màn hình, hiển thị phần trăm pin, tắt card màn hình rời, và tỉ ti các thứ khác. Đưa hackintosh của bạn gần với realmac hơn.
Nếu bạn search google, vô tình đọc được bài này, cảm giác trí não mình đi lạc thì hãy bắt đầu lại với cài hackintosh, bằng bài viết:
Đọc thêm
12 bài viết đáng đọc giúp ích việc cài hackintosh- Hackintosh Vietnam
Các phương pháp pach dsdt
Patch APCI hay còn gọi là patch DSDT/SSDT luôn là 1 vấn đề quan trọng bậc nhất để “kích hoạt” hầu như tất cả chức năng phần cứng khi cài macOS lên các thiết bị không phải của Apple. Như mình đã nói, có 2 phương pháp patch DSDT là Static patch và Hotpatch.
Static patch
Static là phương pháp patch cũ, với phương pháp này, bạn cần phải xuất file dsdt, ssdt gốc của mainboard và chỉnh sửa chúng, load trở lại bằng clover bootloader.
Guide Static patch được Rehabman viết đầy đủ ở đây. Các bạn quan tâm có thể truy cập bài viết ở link trên để tìm hiểu, ở đây chúng ta chỉ nói sơ lược về phương pháp hotpatch nên mình không giải thích thêm nữa.
Patch dsdt bằng clover bootloader (hot patch)
Đây là phương pháp dùng trực tiếp clover configurator, thay các đoạn mã cần sửa đổi trong dsdt gốc trên mainboard, mà không cần chỉnh sửa trực tiếp.
Guide hotpatch APCI gốc bằng tiếng Anh của Rehabman: hot patch dsdt
Một vài điểm cần lưu ý khi sử dụng hotpatch
Hotpatch là kiểu patch mà thực ra là mình không cần đụng chạm gì tới chỉnh sửa DSDT/SSDT như kiểu Static patch cũ mà ta chỉ cần dựa trên các file SSDT của Rehabman cho sẵn và kết hợp các phương pháp cơ bản là Find and Replace và Inject trong Clover để sử dụng chúng.
Find and Replace là các patch tìm kiếm và thay thế hoàn toàn một cụm string bằng một cụm string khác.
Inject là các patch thêm thông tin cho Device, hoặc thêm nguyên 1 Device vào DSDT/SSDT. Các patch có chứa method _DSM là điển hình, patch IMEI, LPC v.v… cũng liệt vào danh sách này.
Có nhiều rename thông dụng và rất may mắn là Rehabman đã tổng hợp và làm sẵn cho chúng ta rồi ở github.
Trong link mình dẫn ở trên là list các file SSDT cơ bản dùng để cho tụi mình “patch nóng”, việc chúng ta cần làm là biên dịch các file .dsl cần dùng sang .aml (tất nhiên phải fix hết lỗi), kết hợp với việc rename Device/Method trong config.
Các rename thông dụng:
GFX0 -> IGPU
SAT0 -> SATA
EHC1 -> EH01
EHC2 -> EH02
XHCI -> XHC
HECI -> IMEI
MEI -> IMEI
LPC -> LPCB
HDAS -> HDEF
AZAL -> HDEF
Mình sẽ nêu chức năng của 1 vài file SSDT thường dùng mà Rehabman cung cấp:
SSDT-RMCF.dsl Cung cấp cấu hình dữ liệu cho các SSDT khác.
SSDT-RMDT.dsl đợc dùng chung với ACPIDebug.kext thay vì patch DSDT để thêm RMDT device.
SSDT-XOSI.dsl được dùng trong quá trình rename Device và Method _DSM để patch cổng USB, mình sẽ nói ở phần dưới.
SSDT-IGPU.dsl injects các thuộc tính của GPU Intel. Yêu cầu rename GFX0->IGPU trong config.
SSDT-IMEI.dsl injects fake device-id được yêu cầu cho IMEI khi dùng chung HD3000/7-series hoặc HD4000/6-series.
SSDT-PNLF.dsl dùng chung với IntelBacklight.kext hoặc AppleBacklight.kext để fix backlight cho laptop. Đọc guide của Rehabman để hiểu sâu hơn: fix backlight
SSDT-LPC.dsl injects các thuộc tính buộc AppleLPC phải load các LPC device-ids không hỗ trợ.
SSDT-SATA.dsl injects các thuộc tính (fake device-id, compatible) để kích hoạt SATA controller kể cả những cái không hỗ trợ, dùng với rename SAT0->SATA.
SSDT-DDGPU.dsl cung cấp method _INI that will call _OFF for a couple of common paths for a discrete GPU in a switched/dual GPU scenario. This SSDT can work to disable the Nvidia or AMD graphics device, if the path matches (or is modified to math) and your _OFF method code path has no EC related code. Refer to the hotpatch guide for a complete example. Tóm lại là để disable card rời nVidia/AMD cho laptop =))))
SSDT-SMBUS.dsl injects DVL0 device bị thiếu. Thường được sử dụng với hệ thống chip Sandy Bridge và Ivy Bridge.
SSDT-GPRW.dsl và SSDT-UPRW.dsl được sử dụng kết hợp với patch GPRW->XPRW hoặc UPRW->XPRW để fix “instant-wake” bằng cách disable “wake on USB”. Bạn có thể lấy các patch này trong hotpatch/config.plist của Rehabman.
SSDT-LANCPRW.dsl cùng dùng để fix “instant wake” được gây ra bởi cổng LAN hoặc USB. Bạn có thể lấy các patch này trong hotpatch/config.plist của Rehabman.
SSDT-PTSWAK.dsl provides overrides for both _PTS and _WAK. Kết hợp với các patch có trong hotpatch/config.plist, cung cấp nhiều bản sửa lỗi khác nhau. Dùng để fix sleep!!
SSDT-DEHCI.dsl có thể disable cả 2 EHCI controllers. EHC1/EHC2 được đổi tên thành EH01/EH02 (tên gốc là EHC1/EHC2). Dùng với patch change EHC1 to EH01 và change EHC2 to EH02.
SSDT-DEH01.dsl, SSDT-DEH02.dsl được tách riêng ra từ SSDT-DEHCI.dsl để disable mỗi EH01 hoặc EH02. Dùng tùy thuộc vào thằng EHCI controllers nào đang hoạt động trong bộ ACPI.
SSDT-XWAK.dsl, SSDT-XSEL.dsl, SSDT-ESEL.dsl theo thứ tự cung cấp phương thức XWAK, XSEL, và ESEL rỗng. Dùng chung với các patch tương ứng thích hợp có trong hotpatch/config.plist. Thường thì các phương thức này bị vô hiệu hóa (do không có mã trong đó), để vô hiệu hóa một số hành động nhất định mà ACPI có thể đang thực hiện ngay cả khi đang sleep hoặc trong khi khởi động gây ra sự cố với cấu hình xHCI / EHCI.
SSDT-XCPM.dsl injects “plugin-type”=1 trong CPU0. DÙng để kích hoạt native CPU power management trên Haswell và các CPUs mới hơn. Đọc guide để biết thêm thông tin chi tiết, tại đây:
SSDT-HDEF.dsl và SSDT-HDAU.dsl Injects layout-id, hda-gfx, và các thuộc tính PinConfiguration ở trong HDEF và HDAU để enable audio cùng với AppleHDA.kext được cấu hình bởi: RMCF.AUDL
SSDT-EH01.dsl, SSDT-EH02.dsl, SSDT-XHC.dsl inject nguồn điện cho cổng USB và kiểm soát FakePCIID_XHCIMux (dựa vào SSDT-DEH*.dsl).
SSDT-ALS0.dsl Injects a fake ALS device (cảm biến ánh sáng). Dùng để fix các vấn đề về độ sáng sau khi khởi động lại.
==================
Patch DSDT cho cổng USB
“Still waiting for root device” sinh ra khi phân vùng được coi là System tự nhiên bị ngắt khỏi hệ thống. Ví dụ boot bộ cài mà cổng usb bị ngắt, boot ổ cứng mà cổng sata bị ngắt.
Bản thân không có một ngắt vật lý nào hết, mà là do kext của Mac không sử dụng được cổng đó nên nó chờ System quay lại, nó sẽ lắng nghe tất cả các port.
Lý do sinh ra guide này vì lỗi huyền thoại trên khá là bất tiện và rất hay gặp phải bởi newbie, mặc dù có thể khắc phục tạm thời bằng Limited patch port USB on-the-fly như nó không ổn định và không sử dụng được lâu dài.
Các công cụ, công đoạn cần làm bao gồm :
- Kext USBInjectAll của rehabman
- Hackintool là công cụ tìm và check inject đúng loại cổng USB
- Clover configurator để chỉnh sửa file config.plist
- Repo của RehabMan chưa các hotpatch và config cần thiết : here
- MaciASL
- IO Registry Explorer
- Các công đoạn bao gồm :
Inject toàn bộ cổng usb với kext USBInjectAll của Rehabman .
- Đặt kext vào Clover/Kext/Other
- Để kext hoạt động cần chọn đúng SMBIOS sát với cấu hình nhất có thể (đối với laptops) và Patch rename ACPI trong config
- Mở config.plist với Clover configurator và add các patch rename như bên dưới :

Hầu hết các trường hợp không cần patch rename XHC1 to XHCI, đối với 1 số laptops quản lý bởi cổng XHCI cần rename, còn lại hầu hết đều sử dụng XHC, nên không cần rename
- SMBIOS của laptop đều sử dụng config trong repo của RehabMan nên có thể bỏ qua bước này
- Override Method _DSM và _OSI : sử dụng SSDT-XHC và SSDT-XOSI.aml trong gói hotpatch của RehabMan kèm patch rename sau trong config :

- List patch rename :
Item 1:
Comment: change EHC1 to EH01
Find: <45484331>
Replace: <45483031>
Item 2:
Comment: change EHC2 to EH02
Find: <45484332>
Replace: <45483032>
Item 3:
Comment: change XHC1 to XHC_
Find: <58484331>
Replace: <5848435f>
Item 4:
Comment: change _DSM to XDSM
Find: <5f44534d>
Replace: <5844534d>
Item 5:
Comment: change _OSI to XOSI
Find: <5f4f5349>
Replace: <584f5349>
- Reboot lại hackintosh để kext và hotpatch có tác dụng
- Check tình trạng inject các cổng USB với IO Registry Explorer

Tìm và xác định các port USB hoạt động, loại bỏ các port thừa với Hackintool

- Mở hackintool qua tab USB
- Tiến hành thử các cổng USB với các thiết bị 2.0, 3.0 và TypeC kết hợp với check tình trạng hoạt động trong IO Registry Explorer
- Cổng vào hoạt động sẽ hiển thị màu xanh lá như hình
- Riêng Webcam là một dạng cổng kêt nối 2.0 với conector là internal nên chắc chắn phải để là internal
- Đối với cổng TypeC : tiến hành cắm test và đổi đầu cắm lại, nếu hiện ở 2 port SSxx khác nhau thì để conector là TypeC còn nếu đổi đầu mà vẫn là SSxx thì conector là TypeC+ Sw
Loại cổng | Dạng kết nối |
---|---|
usb 2.0 | USB2 or internal |
usb 3.0 | USB3 or internal |
usb 3.1 | TypeC or TypeC+Sw |
Sau khi config đúng cổng, tiến hành xoá bỏ các cổng USB không hoạt động (không sáng màu xanh) sau đó tiến hành export SSDT-UIAC.aml config các cổng đã làm vừa nãy cho vào Clover/ACPI/Patched
Môt số trường hợp cần thêm :
- VendorID : DeviceID :
- fakePCIID + FakePCIID XHCIMux kext để root các cổng USB High Speed cho device XHCI quản lý đối với các mã sau : 8086:1E31, 8086:8C31, 8086:8CB1, 8086:8D31, 8086:9C31, 8086:9CB1
- XHCI-9-series kext cho mã : 8086:8CB1
- 8086:8D31, 8086:A2AF, 8086:A36D, 8086:9DED sử dụng thêm XHCI-unsupport kext
USB power property injection for Sierra & Later MacOS version
Chú ý : bước này chỉ cần làm với các bản macOS từ Sierra trở về sau, do từ 10.12 Apple sử dụng cách quản lý năng lượng cho các cổng USB khác với AppleBusPowerControllerUSB thay vì AppleBusPowerController như trước
Có hai trường hợp xảy ra :
- PC có ECDT.aml OEM ACPI với Device EC trong bảng DSDT hiệu quả ta làm như sau :
- Nhấn F4 từ màn hình clover để dump toàn bộ các bảng ACPI, tiến hành kiểm tra trong Clover/APCI/Origin/ thấy một bảng ACPi có tên ECDT.aml mở lên là kiểm tra đường dẫn tơi device EC

- Nếu trùng với đường dẫn của device EC trong DSDT chứng tỏ device EC có hiệu quả chỉ cần patch rename EC0 to EC trong config.plist là được, một số trường hợp là H_EC hoặc ECDT
Trường hợp không có Device EC0, H_EC..vv trong DSDT hoặc giá trị của Method_STA trả về return (zero) trong device EC0 ta tiến hành Inject Fake EC device
- Tạo SSDT-EC.dsl với nội dung như sau :
// Inject Fake EC device
DefinitionBlock("", "SSDT", 2, "hack", "EC", 0)
{
Device(_SB.EC)
{
Name(_HID, "EC000000")
}
}
//EOF
- Tạo SSDT quản lý USBX device
SSDT-USBX sẽ tự động tạo ra cùng với SSDT-UIAC trên hackintool đối với trường hợp không có Method quản lý device USBX trong IOUSBHostFamily.kext/Contents/Info.plist
// USB power properties via USBX device
DefinitionBlock("", "SSDT", 2, "hack", "USBX", 0)
{
Device(_SB.USBX)
{
Name(_ADR, 0)
Method (_DSM, 4)
{
If (!Arg2)
{
Return (Buffer() { 0x03 } )
}
Return (Package() {
// these values from iMac17,1
"kUSBSleepPortCurrentLimit", 2100, "kUSBSleepPowerSupply", 5100, "kUSBWakePortCurrentLimit", 2100, "kUSBWakePowerSupply",
5100, })
}
}
} //EOF
Sau khi hoàn thành các bước trên các bạ có thể bỏ Patch on the fly limited port USB trong config.plist
- Kiểm tra power properties inject trong system infomation :
- Mở IO Reg kiểm tra AppleBusPowerController
- Tiến hành cắm cable thiết bị iphone hoặc ipad vào hackintosh kiểm tra system information/USB các thông số sau, nếu hiện thì đã thành công
Current Available (mA): Current Required (mA): Extra Operating Current (mA): Sleep current (mA):
==================
Chỉnh độ sáng màn hình cho laptop
Kích hoạt được chức năng điều chỉnh độ sáng màn hình trên laptop cũng rất quan trọng không kém so với việc patch cổng USB. Nó giúp ta chủ động được việc tăng-giảm độ sáng màn hình phù hợp với nhu cầu và khắc phục tình trạng màn hình bị tối rất khó chịu sau khi cài xong macOS với 1 số máy chưa được patch brightness.
Mình sẽ tổng hợp 1 vài phương pháp khá đơn giản cho anh em thay vì patch DSDT như cách truyền thống, để kích hoạt chức năng chỉnh độ sáng màn hình.
Cách 1: Sử dụng kext kết hợp SSDT-PNLF chỉnh độ sáng màn hình

Nguyên liệu chính bao gồm:
- SSDT-PNLF.aml
- AppleBacklightFixup.kext
Các bạn có thể download những file trên tại đây.
Thư mục sau khi tải về sẽ trông như thế này:

Okayy, giờ chúng ta chỉ cần quan tâm đên 2 file AppleBacklightFixup.kext và SSDT-PNLF.aml.
Thứ tự thực hiện như sau:
- Mount phân vùng EFI

Dùng Colver Configurator để mount phân vùng EFI trên ổ cứng ra.
2. Copy các file cần thiết vào EFI
- Copy SSDT-PNLF.aml vào EFI/CLOVER/APCI/patched

- Copy AppleBacklightFixup.kext vào EFI/CLOVER/kexts/Other

3. Khởi động lại máy để áp dụng các thay đổi
Custom các phím chức năng cho bàn phím
Một vài laptop sẽ không sử dụng được các phím chức năng để tăng giảm độ sáng, âm lượng các thứ. Cho nên chúng ta sẽ cần cài phần mềm để có thể custom các phím chức năng này.
Tải về và cài đặt Karabiner-Elements, phần mềm hiện đã hỗ trợ phiên bản macOS mới nhất.
Mở phần mềm lên, bạn có thể tuỳ ý cài đặt chức năng riêng cho cho từng phím…

Cách 2: Sử dụng WhateverGreen và Lilu chỉnh độ sáng màn hình
Khi sử dụng phương pháp này, các bạn cần đặt WhateverGreen.kext và Lilu.kext phiên bản mới nhất vào kexts/Other, đồng thời enable Clover DSDT fix AddPNLF
trong tab APCI, Enable SetIntelBacklight
và SetIntelMaxBacklight
trong tab Devices.


Lưu ý: Chỉ sử dụng 1 phương pháp, không dùng đồng thời cả 2.
================
Disable card rời cho laptop
Hầu như mọi laptop được trang bị card đồ hoạ rời sẽ không thể sử dụng được trên macOS ngoại trừ một vài máy tắt được card onboard trong BIOS. Vì vậy chúng ta nên tắt card rời để tránh tình trạng nóng máy và hao pin không cần thiết.
Method: Rất đơn giản, chúng ta chỉ cần dùng WhateverGreen.kext đặt vào kexts/Other và thêm bootflag -wegnoegpu vào config.plist là xong.

================
Updating…
Chỉnh độ sáng màn hình cho laptop
Có thể thay AppleBacklightFixup.kext bằng Lilu.kext và Whatevergreen.kext
Có thể bỏ nó đi chứ không phải là thay bằng 2 kext trên, khi bỏ đi thì vẫn cần ssdt-pnlf thì mới chỉnh độ sáng đc
Đó cũng là 1 cách mới. Mình sẽ tiện thể tổng hợp thêm 1 vài cách cho mọi người tham khảo thêm. Cảm ơn bạn! 😀
-wegnoegpu cứ thêm dòng này là mỗi khi khởi động máy là bị đơ 30s ad ơi
patch thủ công vẫn tốt hơn nhé
Dùng ssdt-igpu có lưu ý gì không ạ, trong file có nhiều comment mình không hiểu mấy. Máy mình full ci/qe nhưng dùng hay bị glitch, tính dùng ssdt-igpu xem có được không mà bỏ vào như không bỏ ý, rename gfx0 to igpu rồi