# Sửa lỗi bộ điều khiển nhúng không tương tích: Cách làm thủ công
- Sửa lỗi bộ điều khiển nhúng không tương tích: Cách làm thủ công
- Tìm đường dẫn ACPI
- Chỉnh sửa tệp SSDT mẫu
- Biên dịch SSDT
Việc cần làm (TO-DO):
- Chỉnh sửa cho xong nếu ACPI của bạn nằm trong trường hợp đặc biệt bên dưới và hoàn tất chỉnh sửa SSDT mẫu.
# Tìm đường dẫn ACPI
Để tìm được đường dẫn ACPI (ACPI pathing), bạn có 2 phương pháp:
# Tìm trong DSDT
Việc tìm đường dẫn ACPI (ACPI pathing) thiệt ra khá dễ dàng. Đầu tiên, hãy mở tệp DSDT mà bạn có được từ bước Trích lục bản sao DSDT và đã được biên dịch ngược bằng MaciASL (nếu bạn sử dụng macOS) hoặc bất kỳ trình soạn thảo văn bản nào nếu bạn đang có Windows hoặc Linux (VSCode có cái phần mở rộng hỗ trợ ACPI (opens new window) khá là xịn đó).
Tiếp theo, hãy tìm kiếm từ khóa PNP0C09. Bạn sẽ thấy kết quả tương tự như sau:

Từ ví dụ trên, chúng ta cần để ý 2 thứ quan trọng:
- Tên của bộ điều khiển nhúng (Embedded controller)
- Trong trường hợp này là
EC0
- Trong trường hợp này là
- Đường dẫn (Pathing) của bộ điều khiển nhúng
PC00.LPC0
Nhưng đời không như là mơ, đôi khi chúng ta sẽ rơi vào các trường hợp ngoài lệ ở dưới, thiệt là thú dzị!
Những hạn mục bạn cần kiểm tra bao gồm:
- Xuất hiện nhiều thiết bị PNP0C09
- Kiếm đỏ con mắt nhưng không thấy thiết bị PNP0C09
- PNP0C09 đã được đặt tên là
EC - PNP0C09 đã có sẵn phương thức
_STA(Trạng thái thiết bị)
Nếu bạn không gặp phải các trường hợp đặc biệt bên dưới, hãy chuyển ngay sang phần tiếp theo.
# Tìm trong Device Manager (Trình quản lý thiết bị)
Nếu máy bạn đang chạy Windows, chuyện tìm đường dẫn của thiết bị EC cực kỳ đơn giản:
Ta bắt đầu bằng cách mở Device Manager trong Windows và tìm thiết bị có tên Embedded Controller. Một khi đã tìm thấy, bạn Chuột phải, chọn Properties (Thuộc tính) -> Details (Chi tiết) -> BIOS device Name. Bạn sẽ nhận được thông tin giống như cái trong hình này:

Như hình trên, chúng ta thấy đường dẫn là SB.PC00.LPC0.EC0
Sau khi có đường dẫn, hãy chuyển tới phần Chỉnh sửa tệp SSDT mẫu
# Chỉnh sửa tệp SSDT mẫu
Giờ khi đã có đường dẫn ACPI, hãy tải tệp SSDT tương ứng về:
- SSDT-EC-USBX (opens new window)
- Dành cho máy tính đời Skylake trở lên và tất cả thế hệ máy tính AMD được hướng dẫn cài đặt OpenCore hỗ trợ
- SSDT-EC (opens new window)
- Dành cho máy tính đời Broadwell trở về trước
Khi mở tệp SSDT này, bạn cần lưu ý:
- Cẩn thận với những đoạn mã bị niêm phong (Commented out)
- Đây là mã dùng để tắt EC (Bộ điều khiển nhúng) gốc. Chỉ sử dụng trên máy tính bàn và các phần cứng tương tự (Máy trạm, Máy chủ)!
- Bạn đọc đang sử dụng Laptop và các phần cứng tương tự (NUC, AIO) TUYỆT ĐỐI KHÔNG ĐƯỢC kích hoạt đoạn mã này (không được xóa dấu xuyệt
//được sử dụng để niêm phong)
- Có thiết bị mới tên là
Device (EC)- KHÔNG ĐƯỢC ĐỔI TÊN chỗ này, có thể bạn sẽ thấy cái này khác với cái của máy mình rồi tiện tay đổi luôn nhưng xin đừng làm vậy, bởi vì đây là tên EC mà chúng ta sẽ "tặng" cho macOS
Trước khi sửa:
External (_SB_.PCI0.LPCB, DeviceObj) <- Đổi tên chỗ này
Scope (_SB.PCI0.LPCB) <- Đổi tên chỗ này

Bạn vui lòng chỉnh sửa sao cho giống như hình ảnh hướng dẫn tùy thuộc vào loại máy tính đang sử dụng.
Sau khi thay đổi theo đường dẫn ví dụ mà chúng ta tìm được, tệp SSDT của bạn sẽ trông như thế này:
Sau khi sửa:
External (_SB_.PC00.LPC0, DeviceObj) <- Đã đổi tên
Scope (_SB.PC00.LPC0) <- Đã đổi tên

# Những trường hợp đặc biệt
# Xuất hiện nhiều thiết bị PNP0C09
Khi thấy nhiều thiết bị PNP0C09 xuất hiện, bạn cần kiểm tra các thuộc tính (properties) sau:
_HID(Hardware ID - Mã định danh phần cứng)_CRS(Current Resource Settings - Thiết lập tài nguyên hiện tại)_GPE(General Purpose Events - Sự kiện mục đích chung)
Ý nghĩa của những thuộc tính này như sau:
_HID: Hãy coi đây là Số căn cước công dân của thiết bị. Nó cho hệ điều hành biết chính xác tên và loại linh kiện này là gì (ví dụ: PNP0C09 chính là mã định danh của Bộ điều khiển nhúng). Nếu không có mã này, hệ điều hành sẽ không biết phải cấp trình điều khiển (Driver) nào cho phù hợp._CRS: Đây là bản danh sách "Chỗ ngồi và tài nguyên" mà thiết bị chiếm giữ. Nó khai báo cho hệ thống biết thiết bị này đang sử dụng những đường truyền nào (như ngắt quãng IRQ, dải bộ nhớ hay cổng I/O) để hoạt động. Nếu không có _CRS, thiết bị giống như một nhân viên có tên nhưng không có địa điểm để làm việc vậy._GPE: Có thể hiểu đây là "Đường dây nóng" của thiết bị. Nó cho phép phần cứng gửi tín hiệu thông báo cho hệ thống ngay lập tức khi có sự kiện xảy ra (ví dụ: bạn nhấn phím tắt tăng độ sáng màn hình, hoặc khi pin đầy). Đây là cách mà Embedded Controller (Bộ điều khiển nhúng) giao tiếp trực tiếp với hệ điều hành để xử lý các tác vụ theo thời gian thực.
Trong khi đó những dấu hiệu này được sử dụng để dùng để xác định xem thiết bị PNP0C09 này có phải là "hàng thiệt" (real) hay không, dựa theo tiêu chuẩn ACPI (opens new window). Nói một cách dễ hiểu, chúng giúp bạn phân biệt đâu là thiết bị phần cứng thực sự, còn đâu chỉ là những "diễn viên đóng thế" được nhà sản xuất thêm vào cho các mục đích phụ. Những thiết bị nào khớp hoàn toàn với các tiêu chuẩn (criteria) nêu trên chính là những mục mà chúng ta cần phải vô hiệu hóa (disable) khi chạy macOS trên máy tính bàn.
- Lưu ý: Nếu bạn thấy phương thức _STA (Status - Trạng thái) cũng xuất hiện trong thiết bị đó, bạn sẽ cần phải tạm dừng và đọc tiếp hướng dẫn tại mục này: PNP0C09 đã có sẵn phương thức
_STA(Trạng thái thiết bị)
# Kiếm đỏ con mắt nhưng không thấy thiết bị PNP0C09
Lúc này, bạn chỉ cần tạo một EC "giả" (Dummy EC) để cho macOS vui lòng.
Hãy thử tìm các thiết bị có tên như: "LPCB", "LPC0", "LPC", "SBRG", "PX40". Nếu tìm thấy, hãy sử dụng đường dẫn LPC (LPC pathing) của tụi nó để thay thế cho đường dẫn của Embedded Controller (Bộ điều khiển nhúng).
Bạn ghi nhớ rằng KHÔNG ĐƯỢC xóa lớp niêm phong đoạn mã để vô hiệu hóa EC vì máy bạn làm gì có EC mà tắt 😃
# PNP0C09 đã được đặt tên là EC
Chúc mừng bạn! Bạn không cần tạo SSDT-EC nữa. Tuy nhiên, nếu bạn xài máy đời Skylake trở lên, bạn vẫn cần SSDT-USBX.
Bạn có thể lấy hàng đã được biên dịch sẵn tại đây: SSDT-USBX.aml (opens new window)
# PNP0C09 đã có sẵn phương thức _STA (Trạng thái thiết bị)
Trường hợp này coi như là không có EC vì chúng ta không thể điều khiển nó bằng SSDT-EC thông thường. Thay vào đó, bạn phải tạo một EC "giả" (Dummy EC) cho macOS. Bạn sẽ cần tìm đường dẫn PCI và LPC cho máy sau đó chỉnh sửa tệp mẫu. Hãy làm theo hướng dẫn chỉnh sửa SSDT mẫu ở trên như thể bạn đang tạo SSDT cho laptop.
Ví dụ EC mà có phương thức _STA sẽ như vầy:

Quay lại 2 chỗ này để tiếp tục nhé:
# Biên dịch SSDT
Sau khi chỉnh sửa xong mã nguồn, bạn đã sẵn sàng để biên dịch SSDT!
# Gần về tới đích rồi
Khi bạn đã tạo xong SSDT của mình, bạn có thể chuyển sang trang tiếp theo để tạo nốt mấy cái SSDT còn lại hoặc truy cập vào đây nếu bạn đã hoàn tất công việc: