Danh mục
Cách tạo Patch Rename
B1: Xác định Method cần Rename.
Các Patch Rename thông dụng:
GFX0 -> IGPU : Dùng để Enable GPU khi các bạn dùng với SSDT-iGPU.
SAT0 -> SATA : Kích hoạt Sata Controller với những cái không hỗ trợ dùng kèm với SSDT SATA.
EHC1 -> EH01 : Để Hotpatch các cổng USB.
EHC2 -> EH02 : Để Patch các cổng USB.
XHCI -> XHC : Để Enable các cổng USB 3.0
HECI -> IMEI : Để Fake IMEI.
MEI -> IMEI : Để Fake IMEI.
B2: Các bạn Dump DSDT như hướng dẫn ở
B3: Vào terminal gõ lệnh:
cd [kéo thư mục chứa file DSDT vào][kéo file iasl62 vào] -l -dl DSDT.aml
B4: Mở file DSDT vừa biên dịch và nhấn tổ hợp phím Command +F sau đó gõ tên Method vào. Ví dụ FBST và cần Replace thành XBST các bạn sẽ được đoạn code như sau:
Method (FBST, 4, NotSerialized)
{
And (Arg1, 0xFFFF, Local1)
Store (Zero, Local0)
FF74: 14 43 12 46 42 53 54 04 7B 69 0B FF FF 61 70 00 // .C.FBST.{i…ap.
FF84: 60
B5: Chuyển FBST thành dạng thập lục phân :
- Mở Hackintool lên và gõ FBST vào ô ASCII.
- Sau đó gõ cụm FBST vào và quan sát ô Hex.
(ta có FBST= 46 42 53 54)
B6: Vào lại đoạn code vừa lấy ở bước 4 và lấy cụm số vừa nhận được ở bước 5 lấy thêm 2 chữ số sau 2 chữ số cuối của bước 5 các bạn sẽ được 46 42 53 54 04 (tại sao lại có 04 là vì để không injects toàn bộ method mà chỉ injects phần cần thiết | nếu các bạn cần injects toàn bộ thì chỉ cần chuyển tên cần Rename về thập lục phân là được không cần tìm trong DSDT).
B7: Kiểm tra lại bằng cách nhập vào ô Hex dãy số vừa nhận được ở bước 6 và quan sát ô ASCII (sau đó chuyển tương tự với phần replace ta được 58 42 53 54 04 | X=58).
B8: Add Patch vào config ⇒ ACPI ⇒ Patch
comment | string | chang FBST to XBSST
Enable | bootclean | true
Count | number | 0
Limit | number | 0
Find | data | 46425354 04
Replace | data | 58425354 04
Lưu ý : Các nguồn tham khảo [Guide] Using Clover to “hotpatch” ACPI | tonymacx86.com | Hot patch Clover, chỉnh độ sáng màn hình, tinh chỉnh hệ thống hackintosh
XXVII.6 : Cách tạo SSDT
- SSDT-RMCF.dsl: Dùng để cung cấp thông tin cho SSDT khác bổ trợ là chính.
- SSDT-RMDT.dsl: Được dùng với acpidebug.kext để hiện thị các log thông qua console (không khả dụng ở Big Sur).
- SSDT-XOSI.dsl: Được dùng để fix Trackpad I2C và giả lập Boot OC như Boot Windows (thường được dùng kèm patch rename _OSI ==> XOSI).
- SSDT-IGPU.dsl: Dùng để injects thông tin iGPU thông qua SSDT thường dùng kèm với SSDT-RMCF.dsl và SSDT-SKLSPF.dsl (nó mặc định iGPU được đặt là iGPU trong 1 vài trường hợp bạn cần rename gfx0 ==> igpu).
- SSDT-SKLSPF.dsl: Được dùng kèm với SSDT-IGPU.dsl để injects thông tin id iGPU.
- SSDT-IMEI.dsl: Được dùng để Fake IMEI trên iGPU HD4000 7 Series.
- SSDT-PNLF.dsl: Được dùng để Fix Backlight thường được dùng kèm với Kext SMCLightSensor.
- SSDT-LPC: Dùng để buộc apple LPC tải các id cho LPC (nó mặc định LPC được đặt thành LPCB).
- SSDT-SATA.dsl: Để Enable bộ điểu khiển Sata.
- SSDT-DDGPU.dsl: Dùng để disable dGPU không hỗ trợ.
- SSDT-SMBUS.dsl: Dùng để injects DVL0 trong các CPU Gen 2 và Gen 3 (Sandy Birdge, Ivy Birdge).
- SSDT-GPRW.dsl và SSDT-UPRW.dsl: Dùng để Fix Sleep (bị wake ngày sau khi vừa sleep | thường kèm theo các patch rename grw==> xprw, uprw ==> xprw).
- SSDT-LANC.dsl: Dùng để fix lỗi về Sleep (bị Wake ngay sau khi vừa Sleep do Ethernet).
- SSDT-PTSWAK.dsl: Dùng để fix lỗi Sleep (không thể Wake).
- SSDT-DEHCI.dsl: Dùng để vô hiệu hóa bộ điều khiển EHCI (khi đã đổi tên thành EH01 và EH02).
- SSDT-XCPM.dsl: Để set plugin type =1 giúp patch powermanagenment.
- SSDT-EH01.dsl: Dùng để injects USB 2.0
- SSDT-EH02.dsl: Dùng để injects USB 2.0
- SSDT-XHC.dsl: Dùng để injects USB 3.0
- SSDT-ALS0.dsl: Dùng để Fake ALS0 (cảm biến ánh sáng) để khắc phục sự cố ánh sáng không khôi phục sau khi khởi động.
- Xác định các phần thay đổi
B1: Các bạn Dump DSDT ra (không cần fix error)
B2: Apply các Patch vào (VD mình sẽ Apply Patch IMEI | nhớ chuyển về .dsl)
B3: Tải DiffMerge.app
B4: Mở app lên và chọn nút
B5:
Chọn mục 1: File gốc (DSDT gốc).
Chọn mục 2: File đã sửa đổi (DSDT đã Apply Patch).
B6: Sau khi chọn xong ta sẽ có như sau:
Mục 1: Các dòng thay đổi.
Mục 2: Nội dung thay đổi ở file gốc.
Mục 3: Nội dung thay đổi ở file đã sửa đổi.
- Tiến hành viết SSDT :
Chức năng 1 số SSDT
B1: Mở Maciasl và bấn tổ hợp phím Command + N.
B2: Tạo phần tiêu đề cho SSDT.
DefinitionBlock(“”, “SSDT”, 2, “hack”, “nhận tên ssdt (giới hạn 9 chữ số)”, 0)
{
}
B2: Copy các Method và Device của những phần thay đổi vào SSDT vừa tạo (nên Copy Scope).
Ở bước này các bạn nhìn vào tree của DSDT để Copy
B3: Check lỗi các bạn bấm vào dấu
Nếu như thế này thì đã có thể sử dụng.
Còn nếu sau khi check như hình dưới thì ta cần phải fix Error.
B4: Khai báo các giá trị nếu gặp lỗi ở bước 3
- Nhập cấu trúc như sau:
External (nhập đường dẫn giá trị cần khai báo, nhập các đối tượng khai báo).
- Bấm lại nút
để check lỗi.
- Ta có các giá trị Objects:
- DeviceObj (thường để khai báo mục device và scope).
- MethodObj (thường để khai báo method và các mục nằm trong method đó).
- PkgObj (thường để khai báo các package).
- FieldUnitObj (dùng để khai báo các biến lưu ram | thường trong method sẽ có Argx).
- IntObj (thường được dùng để khai báo các biến mà trước đó đc khai báo bằng name hoặc là khi check báo lỗi như hình).
⇒
- Đôi khi các bạn sẽ gặp dấu “^” này trong Method tên nó là Uper chức năng của nó là sẽ thay thế các giá trị ở trong scope vào method khi khi báo các giá trị này ta sẽ bỏ dấu “^” và thay bằng các mục Scope 1 dấu “^” là sẽ thay bằng 1 mục ở Scope VD.
Có Scope là Thì khi khai báo ta sẽ có cấu trúc như sau
“^^” = “_SB.PCI0”
⇒ “^^LPCB.EC0.BATP” = “_SB.PCI0.EC0.BATP”
Đối với ví dụ này ta sẽ External vào như sau:
External (_SB.PCI0.EC0.BATP, MethodObj)
Quy tắc import object
Ta có các object được import bằng external theo quy tắc kế thừa có nghĩa là:
DeviceObj --> MethodObj/MutexObj --> PkgObj --> FieldObj/OpRegionObj --> FieldUnitObj/IntObj
Ngoài ra IntObj còn có thể trực thuộc ở root scope
Để tìm được kế thừa của 1 biến thì ta sẽ tiền hành search khai báo của biến đó:
- DeviceObj có khai báo là
Device (variable)
- vd:
Device (EC)
- vd:
- MethodObj sẽ có khai báo là
Method (variable,
- vd:
Method (AR02, 0, NotSerialized)
- vd:
- MutexObj sẽ có khai báo là
Mutex (variable,
- vd:
Mutex (MUTX, 0x00)
- vd:
- PkgObj sẽ có khai báo là
Name (variable, Package
- vd:
Name (BIXT, Package (0x14)
- vd:
- FieldObj có khai báo là
Field (variable,
- vd:
Field (SMB2, ByteAcc, NoLock, Preserve)
- vd:
- OpRegionObj sẽ có khai báo
OperationRegion (variable,
- vd:
OperationRegion (SMB2, EmbeddedControl, 0x40, 0x28)
- vd:
- FieldUnitObj sẽ có khai báo là
Field () {variable, }
- vd:
Field (SMB2, ByteAcc, NoLock, Preserve) {PRT2, 8,}
- PRT2 là biến thuộc FieldUnitObj
- Có thể nói các biến “kế thừa” (thuộc) FieldObj sẽ được khai báo là FieldUnitObj
- vd:
- IntObj sẽ có khai báo là
Name (variable, )
- vd:
Name (RCBT, 0x05)
- Ngoài ra các biến “kế thừa” (thuộc) FieldObj cũng có thể được khai báo là IntObj
- vd:
Ở trên là 1 số loại object phổ biến còn có những loại object khác hiếm gặp nên mình không liệt kê vào
Lưu ý: đối với IntObj và FieldUnitObj các bạn có thể sử dụng thay được cho nhau như biến STAS của method AWAC. Tuy nó nằm dưới Field nhưng SSDT-AWAC vẫn import nó vô là IntObj. Tuy nhiên bạn nên dùng FieldUnitObj cho biến nằm dưới Field thì sẽ hay hơn.
Lưu ý 2: Khi sử dụng SSDT thì các method của nó sẽ không thể ghi đè lên DSDT. Do đó ta cần add patch rename để đổi tên method trong DSDT. Khi này thì các method trong SSDT mới có thể hoạt động
Source tham khảo [Guide] Using Clover to “hotpatch” ACPI | tonymacx86.com
Pingback: Hotplug thunderbolt 3 - Heavietnam February 2022
Pingback: IV. Patch pin – Heavietnam
Pingback: X. Fix Hotkeys – Heavietnam