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 | Devices | Type Port | Type Port decimal | Type Port Hex |
---|---|---|---|---|
| USB 2.0 | Set là 2.0 | 0 | 0X00 |
| Bluetooth và Camera | Set là internal | 255 | 0xFF |
| USB 3.0 | Set là 3.0 | 03 | 0x03 |
| Type C 3.0 |
|
|
|
| Type C 2.0 |
|
|
|
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
HSxx
vàSSxx
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
HSxx
vàSSxx
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
B10: Nhấn K
B11: Ở màn hình Enter Model Identifier
nhập model SMBIOS của bạn vào
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.kext
và Usbtoolbox.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.kext
và UTBDefault.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ạnginternal
--> đúngPort 2
là cam và bluetooth nhận dạng làinternal
--> đúngPort 3
là usb2.0
nhận dạng type A tức2.0
--> đúngPort 4
là usb3.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ả XHCI
và XHC
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
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
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èmusb 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
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ể ghi 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
“ ”
B4: Restart
Remap USB 3.0 và Type C
B1: Các bạn cắm 1 thiết bị USB 3.0
và USB 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èmusb 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àoEFI --> 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
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.0
và 2.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èmusb 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àoEFI --> 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_exclude
vàinclude
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
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