Inject USB Manual
Chuẩn bị
Tải
IORegistryClonetại đây.1 số tên
Device USB Control.
XHC
XHC0
XHC1
XHC2
XHCI
XHCX
AS43
PTXH // thường gặp ở các main amd
PTCP // thường gặp ở AsRock X399
PXSX // đây là 1 tên thường gặp hãy kiểm tra kỹ xem nó có phải là bộ điều khiển usb khôngTạo Kext
Ở đây mình sẽ hướng dẫn cho AMD, Intel làm tương tự vì cùng 1 nguyên tắc hoạt động
Với Intel các bạn sử dụng trên Kext USB-Inject-All.
B1: các bạn Search XHC trên IOReg và nhìn 1 danh sách sổ xuống tìm gốc của các thành phần ta được tên bộ điều khiển USB.

Ở đây ta có bộ điều khiển USB là PTXH
Nếu các bạn có các bộ điều khiển trùng với nhau thì các bạn sẽ lấy hết tên của nó là
PTXH@000000, phần này mình sẽ nói rõ hơn ở mục sau).
B2: Dump DSDT theo hướng dẫn tại đây.
B3: Các bạn mở DSDT lên và Search tên bộ điều khiển USB vừa xác định ở IOReg.


Ở đây ta có thể thấy số Port trong IOReg đang bị thiếu tức macOS đang nhận thiếu Port trong DSDT là do Kext AppleUSBHostPlatformProperties nó chỉ tạo USB Map theo SMBios của Apple vì vây nên ta sẽ bị thiếu các Port USB để khắc phục các bạn sẽ tạo 1 Kext cho riêng mình
Hoặc Map USB theo hướng dẫn tại đây
Đầu tiên các bạn sẽ Download Kext mẫu tại đây
đối với Intel thì các bạn sửa trên USB-Inject-All.
B4: Các bạn Click chuột phải chọn Show Package Contents.

B5: Các bạn mở file Info.plist bằng ProperTree
Cách sử dụng ProperTree các bạn có thể xem hướng dẫn tại đây.


Ở đây các bạn chú ý các mục sau:
Các bạn sẽ sửa lại theo
SMBiosvà bộ điều khiển USB.Mục
IONameMatchlà tên bộ điều khiển USB.Đối với 1 số bộ điều khiển USB
thường là
PXSXsẽ dùngIOPathMatchthay choIONameMatchxem chi tiết ở mục dưới
Port-Countlà giá trị của Port cao nhấtVD như khi nãy ta có Port
P022có giá trị0x16cao nhất thì khi đưa vàoPort Countnó sẽ là16 00 00 00 00
Portđây là mục các bạn sẽ làm việc chủ yếu để Add thêm các Port bị thiếu.Modeở mục này các bạn sẽ chỉnh về SMBios hiện tại đang sử dụng.
B6: Các bạn sẽ tiến hành nhìn vào DSDT kết hợp IOReg để xác định Type dựa vào tên
Thông thước 3 ký tự đầu của USB
3.0sẽ trùng nhau và2.0cũng vậy
B7: Tiến hành xác định giá trị Port các bạn sẽ dựa vào mục
Name (_ADRđể xác định giá trị Port.
VD như ở đây mình có
Device (PO18)
{
Name (_ADR, 0x12) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
Zero,
0xFF,
Zero,
Zero
})
}Thì port
P018ta có giá trịPortlà0x12=1200000000ta sẽ đượcDo ở trên IOReg ta có port
P010cóusbconnectorlà0x3tức là3.0nên cũng trương tự vớiP018Nhớ rằng USB
3.0sẽ có 2Portđược xuất ra

Lưu ý : 1 số DSDT mục
Name (_ADRSẽ bị ẩn đi do đó ta sẽ phải tự đọc DSDT
VD như ở đây mình có

Ta sẽ có PR3 là 0xFFFFFFF0.
Trường hợp ngoại lệ thứ 1: DSDT bị thiếu Port

Ở đây ta thấy dsdt này thiếu các port usb như
HS02, HS03, HS04, HS05,…
Trường hợp ngoại lệ thứ 2: Tên của các Port bị nhầm hoặc chưa đặt tên


Do ở đây có 2 bộ điều khiển USB nên mình dùng IOPathMatch.

Trường hợp ngoại lệ thứ 3: Có 2 Method XHC0
Trường hợp này thường xảy ra trên bộ điều khiển USB PXSX.
Cách 1: dùng Kext với phương thức IOPathMatch (khuyến khích)

Ở đây ta có thể thấy có 2 Device XHC0 ta có thể thấy mục XHC0@61000000 ở dưới mục XHC0 và là gốc của tất cả các mục trên nên ta sẽ lấy path của mục này là:
IOService:/AppleACPIPlatformExpert/S0D1@0/AppleACPIPCI/D1C0@7,1/IOPP/XHC0@0,3/XHC0@61000000dựa vào vault củaport trên usb và ioreg để xme mục nào là bộ điều khiển usb ta sài thực sự
Tiếp theo ta chỉ cần Add Path trên vào mục IOPathMatch.

Cách 2: Dùng SSDT
B1: các bạn tải SSDT tại đây.
B2: Các bạn nhìn vào mục ACPI-Path trong bộ điều khiển USB đã xác định ở trên.

Ta có thể thấy IOACPIPlane:/_SB/PC00@0/RP05@1c0004/PXSX@0 có nghĩa là SB.PC00.RP05.PXSX
B3: Ta sẽ chuyển các mục sau tương ứng sau bằng số liệu bạn lấy được trong IOReg tương tự như sau
External (_SB_.PCI0.GP13, DeviceObj) -> External (_SB_.PC00.RP05, DeviceObj)
External (_SB_.PCI0.GP13.XHC0, DeviceObj) -> External (_SB_.PC00.RP05.PXSX, DeviceObj)
Scope (\_SB.PCI0.GP13) -> Scope (\_SB.PC00.RP05)
Scope (XHC0) -> Scope (PXSX)Lưu ý: các này chỉ là Injects USB chủ yếu dành cho AMD và Gen 10 Intel sau khi làm theo các bạn phải Map lại USB bằng Hackintool theo hướng dẫn tại đây.
Source tham khảo: USB Mapping | OpenCore Post-Install (dortania.github.io)
Last updated