📘
Advanced Guide
HomeInstall GuideBasic GuideGPU BuyerWIFI BuyeriOS
  • Install
  • Basic Guide
  • General
    • EFI Opencore No ACPI
    • OpenCore Debug
    • Convert Bootloader
    • Cách mod bios
    • Fake CPU ID
    • Fix RTC write issues
    • HotPlug Thunderbolt 3
    • Inject USB Manual
    • Sử kext S/L/E trên bigsur
    • Disable unsupport PCIe
  • Audio
    • Patch audio với VoodooHDA
    • Patch Apple HDA
  • ACPI advance
    • Chi tiết về ACPI
    • Tìm hiểu về ASL
    • Patch DSDT Phần 1
    • Patch DSDT Phần 2
    • Patch DSDT Phần 3
    • Patch DSDT phần 4
    • Use method _STA
    • Disable Unsupported Nvme
    • Map usb via SSDT
    • Fix Shut down
  • Laptop Specifics
    • Fix trackpad
    • Patch pin
    • Disable CFG-Clock
    • Fix Hotkeys
  • Connector
    • Fix Connector
    • Fix HDMI Audio
    • Patch GMA GPU
    • Patch Card đồ họa NVIDIA
    • Patch Card đồ họa AMD
    • Fixes for slow AMD GPU
    • Patch Connect Type/ Force RGB/ Inject EDID
Powered by GitBook
On this page
  • Chuẩn bị
  • Tạo Kext
  • Trường hợp ngoại lệ thứ 1: DSDT bị thiếu Port
  • 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
  • Trường hợp ngoại lệ thứ 3: Có 2 Method XHC0
  • Cách 1: dùng Kext với phương thức IOPathMatch (khuyến khích)
  • Cách 2: Dùng SSDT
  1. General

Inject USB Manual

PreviousHotPlug Thunderbolt 3NextSử kext S/L/E trên bigsur

Last updated 11 months ago

Ở bài hướng dẫn này mình sẽ chỉ các bạn cách tạo ra 1 Kext Map USB cho riêng mình nghe có vẻ thú vị đúng ko nào

mình đã có 1 bài hướng dẫn Map USB bằng cách dùng Tool rồi nhé các bạn có thể xem

Và giờ bắt đầu thôi.

Chuẩn bị

  • Tải IORegistryClone .

  • 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ông

Tạ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).

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

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

Ở đây các bạn chú ý các mục sau:

  1. Các bạn sẽ sửa lại theo SMBios và bộ điều khiển USB.

  2. Mục IONameMatch là tên bộ điều khiển USB.

    • Đối với 1 số bộ điều khiển USB

      • thường là PXSX sẽ dùng IOPathMatch thay cho IONameMatch

        • xem chi tiết ở mục dưới

  3. Port-Count là giá trị của Port cao nhất

    • VD như khi nãy ta có Port P022 có giá trị 0x16 cao nhất thì khi đưa vào Port Count nó sẽ là 16 00 00 00 00

  4. 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.

  5. 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.0 sẽ trùng nhau và 2.0 cũ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 P018 ta có giá trị Port là 0x12=1200000000 ta sẽ được

Do ở trên IOReg ta có port P010 có usbconnector là 0x3 tức là 3.0 nên cũng trương tự với P018

Nhớ rằng USB 3.0 sẽ có 2 Port được xuất ra

Lưu ý : 1 số DSDT mục

Name (_ADR

Sẽ 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

Đối với DSDT bị thiếu Port ta sẽ cần Remove tất cả các bộ điều khiển USB và để cho macOS tự khởi tạo dữ liệu bằng cách cho DSDT đã xóa device vào EFI -> OC -> ACPI

Ở đâ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

Đối với trường hợp này các bạn chỉ việc dựa vào DSDT và đổi tên hoặc đặt tên trong Kext của các bạn ở trên là được.

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@61000000

dự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

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)

B2: Dump DSDT theo hướng dẫn .

Hoặc Map USB theo hướng dẫn

Đầu tiên các bạn sẽ Download Kext mẫu

đối với Intel thì các bạn sửa trên .

Cách sử dụng ProperTree các bạn có thể xem hướng dẫn .

Các bạn sẽ cần Convert định dạng DSDT sang .dsl

Before
Kext
After

B1: các bạn tải SSDT .

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 .

Source tham khảo:

tại đây
tại đây
USB-Inject-All
tại đây
tại đây
USB Mapping | OpenCore Post-Install (dortania.github.io)
tại đây
tại đây
tại đây
tại đây
tại đây