Map USB

Tìm hiểu chung

Các conector type của usb được thể hiện dưới dạng decimal nhưng khi các bạn viết ssdt-uiac (hay ssdt-usb,..) thì cần chuyển nó về dạng hex

cách chuyển decimal to hex mình đã hướng dẫn rất nhiều ở các post trước các bạn có thể xem cách chuyển ở trong bài patch i2c

Usb type A

  • USB type A 2.0 connector type: 0

  • usb type A 3.0 connector: 3

Usb type Mini

  • Usb type mini-ab connector type: 1

Usb type B

  • Usb 3 type B connector type: 4

Usb Type Micro

  • USB 3 Type Micro-B có connector type: 5

  • USB 3 Type Micro-AB có connector type: 6

USB Type Power-B

  • USB 3 Type Power-B có connector type: 7

USB Type C

Bảng Type Port

Port Name DevicesType PortType Port decimalType Port Hex

HSxx

USB 2.0

Set là 2.0

0

0X00

HSxx

Bluetooth và Camera

Set là internal

255

0xFF

SSxx

USB 3.0

Set là 3.0

03

0x03

SSxx

Type C 3.0

  • Set là type C with switch

  • Set là type C w/o switch

  • 09

  • 10

  • 0x09

  • 0x0A

HSxx

Type C 2.0

  • Set là type C with usb 2.0

  • Set là type C with switch

  • Set là type C w/o switch

  • 08

  • 09

  • 10

  • 0x08

  • 0x09

  • 0x0A

Nhưng làm sao biết thế nào là type 2.0 hay có switch hay không?

  • Type C 2.0: Tức là khi bạn cắm cáp 2.0 và 3.0 thì nó cũng chỉ nhận 1 port 2.0 HSxx

  • Type C with switch: Tức là khi cắm cáp 2.0 và 3.0 thì nhận 2 port HSxxSSxx

    • Khi cắm vào cáp type C vào thì khi xoay đầu cáp type C thì cũng chỉ nhận chung 1 port

  • Type C w/o switch: Tức là khi cắm cáp 2.0 và 3.0 thì nhận 4 port HSxxSSxx

    • Khi cắm vào cáp type C vào thì khi xoay đầu cáp type C thì cũng chỉ nhận riêng 2 port

Usbtoolbox

Windows

B1: Các bạn tải usbtoolbox tại đây

B2: Các bạn cài python tại đây

B3: Các bạn chạy tool lên và nhấn D

B4: Các bạn cắm lần lượt usb vào hết các cổng

Cổng nào nhận sẽ hiện màu xanh và không nhận sẽ hiện màu trắng

B5: Nhấn B

B6: Nhấn C để tiến hành thay đổi setting

B7: Ấn N để enable Use Native Classes

Nếu không làm bước này bạn sẽ phải dùng kext kèm với kext usbtoolbox.kext

B8: Ấn B

B9: Nhấn S

Ta sẽ dùng cú pháp T:port:type

Đọc ở phần tìm hiểu chung để biết type port ở decimal là gì

Tuy nhiên với windows bạn có thể bỏ qua câu lệnh này

Phân tích
  • Ta thấy port 2 là 2.0 nhưng nhận dạng lại là 3.0 ta sẽ cần set nó lại thành 2.0 T:2:0

  • Tiếp đó là port 3 ta thấy usb 2.0 nhận dạng là type A tức 2.0 --> đúng không cần sửa

  • port 4 là 2.0 nhận dạng là 2.0 --> đúng

  • port 5 là card mạng nhận dạng internal --> đúng

  • Port 7 là bluetooth nhận dạng internal --> đúng

  • Port 8 là web cam nhận dạng internal --> đúng

  • Port 14 usb 3.0 nhận dạng là 3.0 --> đúng

B10: Nhấn K

B11: Ở màn hình Enter Model Identifier nhập model SMBIOS của bạn vào

Các xem SMBIOS của bạn

Dành cho các bạn dùng tool build EFI

B1: Mở config.plist có thể mở bằng Propertree hoặc bất cứ trình edit văn bản nào bạn có

B2: Tìm SystemProductName trong config.plist

Đối với các bạn dùng tool build EFI thì sau khi thêm kext usbmap không cần snapshot

B12: Thêm kext USBMap.kext vào EFI --> OC --> Kext và snapshot lại theo hướng dẫn tại đây

Hoặc EFI --> clover --> kext --> other

Đối với nhưng bạn không làm bước 8

Các bạn sẽ copy kext UTBmap.kextUsbtoolbox.kext vào EFI --> OC --> kext sau đó snapshot theo hướng dẫn tại đây

B13: Save lại và reboot

Macos

B1: Tải usbtoolbox tại đây

B2: Tải và cài đặt USBToolBox.kextUTBDefault.kext tại đây

B3: Chạy tool vừa tại về và nhấn D

B4: Các bạn cắm lần lược usb vào các cổng

Các cổng nhận sẽ hiện màu xanh

B5: Nhấn B

B6: Nhấn S

sử dụng cú pháp T:port:type để chọn type cho port

Xem ở phần tìm hiểu chung để biết type phù hợp

Do mình không kiếm được 1 máy chưa map usb nên các bạn xem cú pháp và áp dụng vào máy các bạn

  • Port 1 là 1 hub device nhận dạng internal --> đúng

  • Port 2 là cam và bluetooth nhận dạng là internal --> đúng

  • Port 3 là usb 2.0 nhận dạng type A tức 2.0 --> đúng

  • Port 4 là usb 3.0 nhận dạng là 3.0 --> đúng

B7: Nhấn K

B8: Bỏ kext UTBmap.kext và xóa kext UTBDefault.kext sau đó snaps theo hướng dẫn tại đây

B9: Save và reboot

Lưu ý

  • Đối với usbtoolbox ở mac thì sẽ không có khả năng tiên đoán port các bạn phải tự set bằng tay.

  • Còn đối với windows có khả năng tiên đoán port các bạn có thể bỏ qua bước set port bằng tay và trực tiếp build kext.

  • Khi map usb bằng usbtoolbox 1 số controller có thể sẽ không nhận. Biện pháp khắc phục là bạn sẽ cần load kext xhci-unsupported chung với kext usb vừa map

Hackintool

Chuẩn bị

B1: Tải kext usbinjectall tại đây

B2: Tải XHCI-unsupported.kext tại đây

B3: Các bạn tiến hành nhìn vào mục type của controller trong tab usb của hackintool

Nếu controller của bạn có type khác với

  • EH01

  • EH02

  • XHCI

  • XHC

Thì bạn sẽ cần rename chúng thành các tên tương ứng. Một số rename thường gặp là

  • EHC1 to EH01

  • EHC2 to EH02

  • XHC1 to XHCI

Trường hợp trong DSDT tên XHCI đã được sử dụng thì các bạn có thể rename là XHC1 to XHC_

Xem chi tiết hướng dẫn add patch rename tại đây mẫu patch rename xem tại đây

Có trường hợp DSDT dã sử dụng cả XHCIXHC khi này các bạn sẽ tiến hành rename XHCI thành XHC2 và rename controller thành XHCI

B3: Reboot

Method uia_include

B1: Các bạn cắm usb vào port usb 2.0

B2: Add boot-arg -uia_exclude_ss uia_include=XX

Thay XX bằng các port usb 2.0

-uia_exclude_ss uia_include=PR11,PR21,HP21,HP23,HS01,HS02

B3: Reboot

B4: Cắm tiếp usb 2.0 vào các port 2.0 sau đó xóa hết những port không xanh

Các usb khi đã nhận có màu xanh

B5: Add boot-arg -uia_exclude_hs và xóa boot-arg -uia_exclude_ss

B6: Reboot

B7: Cắm các port usb 3.0 và type C vào sau đó tiếp tục xóa các port không xanh

B8: Điều chỉnh type các port theo bảng ở phần tìm hiểu chung

B9: Ấn export

  • Có thể sử dụng ssdt-uiac kèm usb injectall.kext

  • Hoặc usbport.kext

B10: copy ssdt-uiac vào EFI --> OC --> ACPI và snapshot

Hoặc EFI --> Clover --> ACPI --> Patched

Hoặc usbport.kext vào EFI --> OC --> kext

Hoặc EFI --> Clover --> kext --> other

B11: Save lại và reboot

Method uia_exclude

Remap USB 2.0

B1: Cắm 1 thiết bị USB 2.0 vào tất cả cổng trong hệ thống

Mở Hackintool, chọn tab USB

B2: Ở đây các cổng thực sẽ hiện màu xanh các bạn hãy ghi nhớ phần name của các cổng ko hiện xanh

Có thể gh‌i tên các cổng đấy ra

B3: Các bạ‌n thêm đoạn code sau vào boot-arg

uia_exclude=“tên các cổng không hiện xanh”

Khi viết code không có dấu “ ”

// Ví dụ

uia_exclude=HP11;PR12;HP12;PR13;HP13;PR14;HP14;PR15;HP15;PR16;HP16;PR17;HP17;PR18;HP18;PR22;HP22;PR23;PR24;HP24;PR25;HP25;PR26;HP26;HP27;HP28;HS03

// khi viết ra các bạn nhớ thêm vào boot-arg nhé

B4: Restart

Remap USB 3.0 và Type C

B1: Các bạn cắm 1 thiết bị USB 3.0USB Type-C vào tất cả cá‌c cổng trên hệ thống

B2: Các bạn sửa lại đoạn code trên theo đúng với hiện tại

Loại bỏ 1 số cổng vừa hiện xanh trong code

B3: Tiếp các bạn xóa đoạn code ở phần 1 đi và dán đoạn code mới vào boot-arg

B4: Restart

Set Type Port

Port rỗng

B2: Sau khi các bạn đã làm xong cả 2 phần trên thì hãy điều chỉnh lại loại cổng trong hackintool cho đúng nhé

Đọc bảng ở phần tìm hiểu chung

B3: Ấn export

  • Có thể sử dụng ssdt-uiac kèm usb injectall.kext

  • Hoặc usbport.kext

B4: Copy ssdt-uiac vào EFI --> OC --> ACPI và snapshot

Hoặc EFI --> Clover --> ACPI --> Patched

Hoặc usbport.kext vào EFI --> OC --> kext

Hoặc EFI --> Clover --> kext --> other

B5: Snaps theo hướng dẫn tại đây nếu là OC và reboot

Method XhciPortLimit

Lưu ý

Trước hết chúng ta phải tìm hiểu đây là cách làm rất phổ biến trước đây

Từ Catalina trở lại trước

Tuy nhiên từ sau phiên bản Macos 11.3 trở về sau thì các bạn sẽ không dùng được Quirk XhciPortLimit

Bật lên có thể không boot được hoặc không có tác dụng

Nhưng đối với phiên bản OpenCore 0.9.3 trở về sau acidanthera đã fix lỗi ở quirk XhciPortLimit nên các bạn hoàn toàn có thể sử dụng quirk này để map usb một cách dễ dàng hơn

B1: Mở config.plist và bật quirk XhciPortLimit

Path: Root --> Kernel --> Quirk --> XhciPortLimit

B2: Save lại và reboot

B3: Tải app Hackintool

B4: Mở Hackintool và đến tab USB

B5: Chuẩn bị 2 chiếc usb 3.02.0

B6: Tiếp tục cắm các usb vào hết tất cả cổng

Mỗi cổng đợi 5s rồi rút ra cắm cổng tiếp theo

Sao cho mỗi usb đều cắm vào tất cả các cổng

B8: Tiến hành set port type các port màu xanh theo phần tìm hiểu chung

Vậy làm sao để biết cái nào là 3.0 cái nào là type C. Các bạn hãy quan sát trong quá trình cắm usb để có thể xác định một cách chính xác

B9: Ấn export

  • Có thể sử dụng ssdt-uiac kèm usb injectall.kext

  • Hoặc usbport.kext

B10: Copy ssdt-uiac vào EFI --> OC --> ACPI và snapshot

Hoặc EFI --> Clover --> ACPI --> Patched

Hoặc usbport.kext vào EFI --> OC --> kext

Hoặc EFI --> Clover --> kext --> other

B11: Tiến hành tắt xhciportlimit

B12: OC_Snapshot theo hướng dẫn tại đây nếu là OC và reboot

Lưu ý

  • USB 3.0 type A và USB type C xuất ra 2 port là 2.0 và 3.0. Lưu ý cắm usb 2.0 và usb 3.0 lần lược vào USB 3.0 type A và USB type C

  • Sau khia add file đã xuất từ hackitool các bạn có thể xóa code ở boot-arg

    • Chỉ dành cho uia_excludeinclude

  • Các bạn hoàn toàn có thể dựa vào cấu trúc của ssdt-uiac để tự map usb bằng ssdt manual xem chi tiết tại đây

Chú ý:

Nếu như máy các bạn có hơn 15 port usb dù làm theo cách nào đi chăng nữa thì các bạn cũng phải bật xhciportlimit trong config.plist để có thể sử dụng được tất cả 15 port

Check xem bạn có cần XHCI-unsupported.kext hay không

B1: mở hackintool vào tab usb chú ý và vendor iddevice id

B2: nếu bạn có vendor id8086 và device id là 1 trong những id sau:

  • 8D31

  • A2AF

  • A36D

  • 9DED

Thì bạn sẽ cần thêm kext trên. Đối với những bạn chưa boot được vào macos thì có thể xác định vendor-iddevice-id theo hướng dẫn tại đây

Source tham khảo: USBToolBox/tool: the USBToolBox tool (github.com) | tool/TYPES.md at master · USBToolBox/tool (github.com) | Hackintosh USB Port Mapping Guide 2021 / 2022 – Mojave – Catalina – BigSur – Monterey – Guides and Tutorials – Olarila | headkaze/Hackintool: The Swiss army knife of vanilla Hackintoshing (github.com)

Last updated