# SSDT: Cách tạo dễ dàng

Ở phần này, chúng ta sẽ sử dụng một công cụ siêu đơn giản được tạo ra bởi "phù thủy" CorpNewt: SSDTTime (opens new window)

Cơ chế hoạt động của công cụ này rất thông minh: nó trích xuất (dump) bảng DSDT trực tiếp từ firmware (vi chương trình hệ thống) của bạn, sau đó dựa trên "bản gốc" đó để tạo ra các file SSDT (Bảng mô tả hệ thống phụ) chuẩn chỉnh nhất. Lưu ý quan trọng: Bước này phải được thực hiện trên chính chiếc máy mà bạn định cài Hackintosh, chạy trên hệ điều hành Windows hoặc Linux.

# Vậy SSDTTime KHÔNG THỂ làm được gì?

Dù rất bá đạo và giúp bạn tiết kiệm được rất nhiều thời gian tuy nhiên công cụ này hiện tại vẫn có những giới hạn:

  • SSDT-GPI0:
    • Cái này bạn cần phải cấu hình thủ công riêng cho máy của mình.
  • IMEI SSDT:
    • Nếu bạn đang xài CPU Sandy Bridge ghép với bo mạch chủ đời 7 (7-series) hoặc Ivy Bridge với bo mạch chủ đời 6 (6-series), bạn buộc phải dùng hàng đã biên dịch sẵn (prebuilt) hoặc tự tay tạo thủ công.

Đối với những ai không tìm thấy tùy chọn mình cần trong SSDTTime, bạn có thể chuyển sang phần "SSDT: Cách tạo nâng cao". Tuy nhiên, bạn vẫn nên dùng SSDTTime cho những loại SSDT mà nó có hỗ trợ kết xuất nhé.

# Sử dụng SSDTTime

Đầu tiên, bạn mở tệp SSDTTime.bat với quyền Admin (quyền Quản trị viên) trên cái máy mục tiêu và bạn sẽ thấy một giao diện "huyền thoại" như thế này

Vậy mấy cái tùy chọn này có ý nghĩa gì:

  • 1. FixHPET - Patch out IRQ Conflicts
    • Đây là tùy chọn tạo bản vá xung đột IRQ, bạn sẽ cần sử dụng cái này cho các dòng mainboard X79, X99 và đa số laptop (sau khi chọn tùy chọn này, bấm C để loại bỏ các IRQ đời cũ gây xung đột). Lưu ý rằng bạn cũng phải áp bản vá nóng đi kèm vào trong file config.plist thì SSDT này mới có tác dụng.
  • 2. FakeEC - OS-aware Fake EC
    • Đây chính là SSDT-EC, "bùa hộ mệnh" bắt buộc cho những ai cài macOS Catalina trở lên.
  • 3. FakeEC Laptop - OS-aware Fake EC - Leaves Existing Untouched
    • Cái này cũng tạo SSDT-EC nhưng dành riêng cho laptop. Nó chỉ bổ sung EC giả và giữ nguyên các thiết bị EC hiện có để không làm Windows bị lỗi. Vẫn là thứ bắt buộc cho Catalina trở lên.
  • 4. USBX - Power properties for USB on SKL and newer SMBIOS
    • Đây là tùy chọn để tạo SSDT-USBX. Bạn có thể dùng hàng "may sẵn" nếu thích, nhưng SSDTTime có thể tạo ra một bản tùy chỉnh (customizable) xịn hơn cho riêng máy bạn.
  • 5. PluginType - Sets plugin-type = 1 on First ProcessorObj
    • Đây là tùy chọn để tạo SSDT-PLUG, sử dụng cho đời Haswell trở lên. Nó cũng sẽ kiểm tra và định nghĩa lại các đối tượng vi xử lý (processor objects) cho các máy tính Intel đời 12 trở lên và AMD.
  • 6. PMC - Sets Power Management controller status
    • Đây là tùy chọn để tạo SSDT-PMC, chỉ dành cho các dòng mainboard Intel series 300 "xịn". Code khai báo NVRAM thường bị thiếu trong ACPI của các bo mạch đời mới, bổ sung cái này giúp khôi phục khả năng lưu trữ cài đặt hệ thống của macOS vào NVRAM. Lưu ý rằng một số laptop Whiskey Lake cũng cần cái này để việc cài đặt macOS không bị treo.
  • 7. RTCAWAC - Context-Aware AWAC Disable and RTC Enable/Fake/Range Fix
    • Đây là tùy chọn để tạo SSDT-AWAC/RTC0, nhiệm vụ của nó là sửa lỗi xung nhịp hệ thống trên phần cứng đời mới, đồng thời kích hoạt, làm giả hoặc sửa dải xung nhịp RTC cho phù hợp với macOS.
  • 8. USB Reset - Reset USB controllers to allow hardware mapping
    • Chính là tùy chọn để tạo SSDT-RHUB, dùng để "reset" (đặt lại) các cổng USB trong macOS cho các bo mạch chủ Z490 của Asus.
  • 9. PCI Bridge - Create missing PCI bridges for passed device path
    • Tùy chọn này sẽ tạo ra các cầu nối PCI (PCI bridges) bị thiếu, cần thiết để xác định đúng đường dẫn thiết bị (device path).
  • 0. PNLF - Sets up a PNLF device for laptop backlight control.
    • Tùy chọn này sẽ giúp bạn tạo bản SSDT-PNLF được "đo ni đóng giày" cho máy của bạn để điều khiển đèn nền laptop/AIO. Nó không tự động hoàn toàn đâu nhé, bạn phải khai báo cho nó số liệu đời iGPU (Card đồ họa tích hợp) của mình vào.
  • A. XOSI - _OSI rename and patch to return true for a range of Windows versions - also checks for OSID
    • Tùy chọn này sẽ tạo SSDT-XOSI, xài để đổi tên (rename) và tạo bản vá cho lệnh _OSI. Nó giúp phần cứng tin rằng bạn đang chạy Windows để mở khóa các tính năng ẩn.
  • B. Fix DMAR - Remove Reserved Memory Regions from the DMAR Table
    • Chủ yếu cần cho các thiết bị đòi hỏi tính năng ảo hóa VT-d như: card mạng Ethernet I225, card mạng Aquantia và một số card mạng Wi-Fi.
  • P. Dump DSDT - Automatically dump the system DSDT
    • Bước "nhập môn" quan trọng nhất: Trích xuất bảng DSDT trực tiếp từ firmware của bạn để tạo SSDT.

Lời khuyên: Việc đầu tiên bạn cần làm luôn là chọn tùy chọn P. Dump DSDT , sau đó mới chọn các tùy chọn phù hợp với máy tính của mình như đã được hướng dẫn ở trang trước.

Vậy cái USBX thì tính sao?

Với đời Skylake trở lên và AMD, bạn có thể tự build SSDT-USBX bằng SSDTTime hoặc lấy file đã được làm sẵn tại đây: SSDT-USBX.aml (opens new window). File này là dạng "cắm là chạy" (plug and play) và không cần cấu hình gì thêm, tuyệt đối không được sử dụng cho đời Broadwell trở về trước.

Mẹo xử lý lỗi: Đọc phần Khắc phục sự cố chung (opens new window) nếu bạn gặp trục trặc khi mở SSDTTime.

# Bổ sung SSDT vào OpenCore

# Phương pháp thủ công

Đừng quên rằng các SSDTs cần phải được khai báo trong OpenCore. Nhắc nhẹ: tệp có đuôi .aml là tệp đã được biên dịch (compiled), còn đuôi .dsl chỉ là mã nguồn (code) thôi. Bạn chỉ được thêm tệp .aml vào máy thôi nhé:

  • EFI/OC/ACPI
  • config.plist -> ACPI -> Add

Nhớ rằng tổ hợp phím thần thánh Cmd/Ctrl+R trong ProperTree khi trỏ vào thư mục OC sẽ tự động "hốt" hết SSDT, kext và driver .efi vào file config cho bạn. Tuyệt đối không thêm file DSDT vào OpenCore, vì nó đã nằm sẵn trong firmware của bạn rồi. Nếu bạn vẫn thấy mơ hồ đoạn này, hãy quay lại hướng dẫn OpenCore và chọn cấu hình tương ứng với kiến trúc CPU của mình.

Nếu bạn chưa có tệp config.plist, hãy quay lại hướng dẫn OpenCore tương ứng để tạo tệp và khai báo:

Những ai sử dụng FixHPET, XOSIRTCAWAC sẽ cần phải gộp (merge) bản vá nóng có trong tệp oc_patches.plist vào trong config.plist của bạn

Các bước thực hiện như sau:

  • Mở cả hai tệp lên,
  • Xóa phần ACPI -> Patch cũ trong config.plist của bạn
  • Copy (sao chép) phần ACPI -> Patch từ tệp patches.plist
  • Paste (dán) vào đúng vị trí đó trong config.plist

# Phương pháp sử dụng công cụ PatchMerge

LƯU Ý: Cách này yêu cầu bạn phải có sẵn tệp config.plist đã được tạo và cấu hình từ trước. Nếu chưa có, hãy qua bên Hướng dẫn cài đặt OpenCore (opens new window) để làm một bản trước khi dùng công cụ này.

SSDTTime giờ đây đã đi kèm một đoạn script (kịch bản) riêng biệt mang tên PatchMerge. Script này sẽ tự động "nhồi" các bản vá bạn đã chọn trước đó vào thẳng tệp config.plist.

Chạy PatchMerge.bat lên bạn sẽ nhìn thấy màn hình này:

Chọn tùy chọn số 1. Select config.plist để bắt đầu. Xong xuôi, các bản vá của bạn sẽ nằm trong tệp config.plist bên trong thư mục Results. Bạn cần kiểm tra lại file config.plist mới này so với file cũ để đảm bảo mọi thứ vẫn nguyên vẹn, bảo đảm rằng các bản vá đã được đưa vào đúng chỗ. Sau đó, hãy copy cả tệp config.plist và các SSDT từ thư mục Results vào đúng vị trí EFI/OCEFI/OC/ACPI tương ứng.