시스템 사양 선택 | 1번 |
---|
어 빅 업데이트: 해킨툴 2.9.5 버전으로 EHCI USB 내보내기 부분 해결 및 SSDT-EC.aml 생성 조건이 보완되어 필수시에만 생성됩니다. 따라서 USBInjectAll.kext 설치, EHCx to EH0x을 진행하고 USB 탭에서 연결포트 확인 후 내보내기를 누르면 알맞는 항목만(카탈리나 기준 USBPorts.kext, SSDT-UIAC.aml, 그리고 필요시 SSDT-USBX.aml) 생성됩니다. USBInjectAll.kext 설치를 삭제하고 USBPorts.kext를 설치해주거나, USBInjectAll.kext를 유지하고 SSDT-UIAC.aml과 SSDT-USBX.aml을 설치해주시면 됩니다.
기존 본문은 추가정보(USB 포트 잡는 배경 원리, 포트 이름 변경, EHC와 XHC 중복사용, XHC 단일사용)가 있으므로 삽질라이프인 분들을 위해, 그리고 글 작성했고 이 글을 토대로 해킨툴 2.9.5 업데이트에 참여했던 이기적인 자기만족을 위해 남겨둡니다.
안녕하세요. 해킨툴 업데이트 되면 해결되리라 생각하고 있었지만 여러 사정이 있어서 훨씬 나중에 해킨툴에 포함될 예정인 EHCI USB 설정에 관하여 글을 써봅니다.
클로버 컨피규레이터의 ACPI/DSDT/Patches와 IORegistryExplorer를 보실 수 있다는 가정 하에 진행됩니다. PlistEdit Pro 등 나머지는 크게 어렵지 않을 것 같습니다.
서론
EHCI: Enhanced Host Controller Interface: up to USB2를 지원하는 USB 컨트롤러입니다.
XHCI: eXtensible Host Controller Interface: up to USB3를 지원하는 USB 컨트롤러입니다.
둘 다 있는 보드도 있고, 각각 하나만 있는 보드도 있지만, 커맥에서 이 둘을 잘 설정해야 USB 사용과 잠자기 등의 부분에 문제가 발생하지 않습니다.
XHCI의 경우 해킨툴로 USB 맵 설정 후 내보내기를 누르면 USBPorts.kext와 SSDT-UIAC.aml, 그리고 경우에 따라서 SSDT-EC.aml(모하비 이전 전력관리 또는 카탈리나 이후 부팅필수), SSDT-USBX.aml(/S*/L*/E*/IOUSBHostFamily.kext/C*/Info.plist에 없는 모델 전력관리)가 추가로 생성됩니다. USBInjectAll.kext를 지우고 USBPorts.kext과(SSDT-USBX.aml 전력정보 켁스트에 포함됨) SSDT-EC.aml만(카탈리나 이후로는 이미 사용중) 사용하시거나 USBInjectAll.kext, SSDT-UIAC.aml, SSDT-EC.aml(카탈리나 이후로는 이미 사용중) 그리고 SSDT-USBX.aml를 알맞게 사용하시면 XHCI 포트와 추가전력을 정상적으로 사용하실 수 있습니다.
하지만 EHCI의 경우 동일한 이름의 켁스트와 SSDT가 생성되지만 잘못된 형식으로 생성됩니다. 가령 다음과 같은 형식으로:
이것이 왜 잘못되었는지 제 나름대로 설명드리겠습니다.
EHCI는 두 부분으로 구성됩니다. 저는 이를 "허브포트"와 "하위포트"라고 구분하겠습니다.
허브포트: EHCx의 하위항목으로, EHCI와 개별 USB 포트를 연결시켜주는 연결고리입니다.
하위포트: 허브에 연결되는 USB 포트입니다. USB 드라이브, 마우스 등이 연결됩니다.
이 둘은 아래 IOReg와 같이 구분됩니다:
허브포트 아래 하위포트가 달려 있습니다. 이런 단계로 USB가 설정되어야 (+EC와 USBX SSDT 등 추가사항) 추가전력이 제대로 작동합니다:
그런데 해킨툴은 EHCI에 대한 USBPorts.kext와 SSDT-UIAC.aml을 잘못 생성하기 때문에 사용해봤자 USB 작동 안하거나 추가전력 공급이 이루어지지 않는 경우가 대부분입니다. 맨 위에 업로드한 켁스트 캡쳐가 어떻게 잘못되었는지를 일부 표기하자면 다음과 같습니다:
위 켁스트를 사용한 결과는 다음과 같이 엉망입니다.
EHC1-허브포트가 하나이고 그 아래 하위포트가 달려 있는 것이 대부분 논맥 메인보드의 EHCI 형식인데, 위 켁스트에는 세 개의 허브포트가 생겼습니다. 첫 번째 허브포트만 실제 허브포트로 인식되고, 나머지는 dummy입니다. 추가전력이 또한 제대로 이루어지기 위해서는 IOClass가 AppleUSB20InternalHub나 AppleUSB20InternalIntelHub가 되어야 하는데, AppleUSB20Hub로 인식되었기 때문에 추가전력 공급이 이루어지지 않는 것도 있습니다:
EHC2-마찬가지로 dummy 포트가 있고, 켁스트에 추가전력 값이 EHC1에만 할당되었으므로 EHC2에 장치를 연결할 경우 추가전력이 공급될 수 없습니다. 애초에 AppleUSB20Hub이기 때문에 추가전력 값이 있다 하더라도 실제로 공급되지 않는 문제는 여전합니다:
해킨툴 설명서에 있는 ACPI의 EHCx to EH0x rename을 진행/진행하지 않고 켁스트를 생성해도 동일하게 잘못 생성됩니다. 덤으로 이 켁스트를 그대로 사용시 잠자기나 종료가 제대로 이루어지지 않을 가능성도 있습니다.
추가적으로 언급할 수 있는 것은 많으나 문제점을 강조하면서 시작하기 보다는 솔루션만 있으면 될 것 같고...어떻게 하면 제대로 된 켁스트를 작성할 수 있는지 알려드리겠습니다. 그리고 나서 추가적인 것, 해킨툴의 문제점, 또는 실질적인 사용에 불필요한 정보는 Extra로 설명하겠습니다.
본론
준비물: PlistEdit Pro, USB2 장치, EHCIPackage.zip . Xcode는 버전에 따라서 잘 표기되지 않는 부분이 있더군요...PlistEdit Pro를 사용해주세요.
1. USBInjectAll.kext를 각자 설치형태에 맞게 Clover/kexts/other이나 /Library/Extensions에 설치하고 config.plist에 EHCx to EH0x 패치를 사용합니다. 또한 H_EC to EC, EC0 to EC, ECDV to EC 같은 EC 패치를 전부 삭제하거나 Disable합니다:
만약 DSDT나 SSDT의 EC 부분을 MaciASL 등으로 직접 수정하셨다면 원래 이름으로 되돌려 놓으시면 됩니다. cmd(alt)+f find로 들어가 replace 체크로 진행하시면 됩니다.
2. 현재 사용중인 CLOVER/ACPI/patched의 SSDT-USBX.aml, SSDT-UIAC.aml, SSDT-EC.aml를, 그리고 CLOVER/kexts/other의 USBPorts.kext를 바탕화면으로 백업하고 첨부파일의 SSDT-fakeEC.aml을 설치합니다:
만약 XHC 설정을 USBPorts.kext를 통해 진행하셨다면 E-7-B를 먼저 참고해주세요.
3. 재부팅하면 EH01에 PR11-PR18의 허브포트가 붙고, EH02에 PR21-PR16가 붙습니다:
4. 대부분의 컴퓨터는 EHC 하나에 허브포트가 하나입니다. IOReg를 보고 하위포트가 연결된 EH01의 허브포트 1D100000와 EH02의 1A100000를 제외하고 나머지 허브포트는 아무것도 달려 있지 않은 dummy 포트임을 알 수 있습니다:
5. 첨부파일의 USBHubPorts.kext에서 dummy 허브포트가 없는 것을 확인합니다:
6. USB2 장치를 모든 포트에 연결해서 IOReg에서 USB2 장치가 하위포트에 인식되는 것을 확인합니다. 인식되어 있는 하위포트를 제외한 나머지 dummy 하위포트를 USBDevicePorts.kext에서 제거하고, 또한 켁스트의 model을 본인 사용중인 SMBIOS의 모델로 변경합니다. 저는 MacBookPro8,1이라서 MacBookPro8,1로 표기했고, 첨부한 파일도 그렇습니다:
7. USBInjectAll.kext를 제거하고 USBHubPorts.kext와 USBDevicePorts.kext를 설치 후 재부팅합니다. 각자 시스템에 맞게 /C/K/O 또는 /L/E 입니다.
8. 첨부파일의 SSDT-kUSBX.aml을 본인 시스템 사양에 맞게 수정하고 Clover/ACPI/patched에 설치합니다. 기존 사용하시던 SSDT-USBX.aml에서 값을 가져오거나, 잘 모르겠으면 제공된 SSDT-kUSBX.aml을 그대로 사용합니다.
9. 정확히 진행했다면 USB가 전부 제대로 인식되고 추가전력이 정상이어야 합니다:
부가설명(Extra) 본문 각 번호에 해당하는 부가설명입니다.
E-1. 이를 진행하는 이유는 애플 순정의 /S*/L*/E*/IOUSBHostFamily.kext/C*/P*/AppleUSBHostMergeProperties.kext/C*/Info.plist(카탈리나기준입니다. 하이시에라/모하비 기준으로는 /S*/L*/E*/IOUSBHostFamily.kext/C*/P*/AppleUSBEHCIPCI.kext/C*/Info.plist입니다. 많은 분들이 넘어오셨을 카탈리나를 기준으로 AppleUSBHostMergeProperties.kext/C*/Info.plist라고 부르겠습니다.)와 충돌하지 않기 위해서 RehabMan이 USBInjectAll.kext/C*/Info.plist에 EHCI 이름을 전부 EH0x로 설정해서 EH0x의 이름이 매칭되면 허브포트를 인젝트하기 때문입니다. 애플 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist에서 EHCI의 ACPI 이름 EHC1 또는 EHC2라는 이름이 ACPI에서 매치되면 허브포트를 인젝트하는 형식입니다. 따라서 ACPI에서 EHCx를 EH0x로 이름을 바꾸어준다면 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist와 상관이 없게 되고 충돌 없이 EH0x에 허브포트가 인젝트됩니다.
물론 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist에 없는 모델이라면 매핑을 완료하였을 때 EHCx to EH0x rename이 없어도 되는 경우도 있습니다. EHCx to EH0x rename을 적용하고 매핑을 진행한 후에 다시 EHCx to EH0x rename을 삭제해주면 됩니다. 또는 USBHubPorts와 USBDevicePorts 인젝션 켁스트 적용 후 불필요한 포트들을 삭제해줄 수도 있습니다.
제가 지금 글을 작성하고 있는 2세대 노트북에 MacBookPro8,1로 모하비를 설치했는데, 모하비는 이 모델을 지원하지 않고, 애플은 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist에서 MBP8,1 모델을 드롭했습니다. 따라서 저는 EHC1/EHC2를 EH01/EH02로 바꾸어줄 필요가 없습니다. 현재 모하비에서 EHCx to EH0x rename을 사용하고 있지 않습니다.
여기서 한 가지 더. 위에 AppleUSBHostMergeProperties.kext/C*/Info.plist가 EHC1/EHC2를 보고 허브포트를 인젝트한다고 했는데, 만약 본인 컴퓨터에 이미 알맞게 허브포트가 인젝트되어 있다면 EHCx to EH0x로 이름을 바꾸고 USBInjectAll.kext를 사용할 필요가 없습니다. 물론 이름을 바꾸어주고 진행해도 전혀 상관 없지만요. 예를 들어서:
이 스크린샷은 하이시에라에서의 AppleUSBHostMergeProperties.kext/C*/Info.plist(AppleUSBEHCIPCI.kext/C*/Info.plist)입니다. MacBookPro8,1에 대해 허브포트가 인젝트되는데요, EHC1은 알맞게 하나의 포트만 인젝트됩니다. 따라서 EHC1 to EH01로 이름을 바꿀 필요가 없습니다. 그러나 EHC2를 보시면 허브포트가 두 개가 들어가므로, 가장 안정적이게는 EHC2 to EH02를 설정해주면 됩니다. 그렇게 되면 EHC1은 AppleUSBHostMergeProperties.kext/C*/Info.plist에 의해 허브포트 PRT1이 인젝트되고 이름을 바꾼 EH02는 USBInjectAll.kext/C*/Info.plist에 의해 PR21에서 PR26까지의 허브포트가 인젝트됩니다. 이 글을 토대로 끝까지 진행한다면 다음과 같이 됩니다:
또한 리얼맥 EC의 ACPI 경로는 \_SB.PCI0.LPCB.EC이기 때문에 해킨툴이 생성하는 \_SB.EC의 SSDT-EC.aml을 삭제하고 \_SB.PCI0.LPCB.EC의 SSDT-fakeEC.aml의 사용을 권장합니다.
E-2. 기존 사용중이던 EHCI에 대한 USBInjectAll.kext 설정과 기타 USB 설정을 삭제하고 새로 넣어주기 위해서입니다. 만약 XHCI에 대한 USB 포트매핑이 SSDT-UIAC.aml으로 되어있다면 이참에 이 글을 참고하여 XHC에 대한 USBPorts.kext를 먼저 생성한 후 이 글로 돌아오세요. 또는 E-7번을 참고해보세요: https://x86.co.kr/tip/3132829
E-3. USBInjectAll.kext에 RehabMan이 넣어둔 설정입니다:
E-4. 만약 허브포트가 여러 개이고, 따라서 IOReg에서 1D100000나 1A100000와 더불어 다른 허브포트에 하위항목이 있다면 이 허브포트도 하위포트가 연결될 수 있습니다. 이 유효한 허브포트들의 locationID 1Dx00000나 1Ax00000를 메모해두고 이 유효 허브포트를 제외하고 dummy 허브포트 제거를 진행합니다. 예를 들어 IOReg에 1D200000에 하위포트가 달려있다면 USBDevicePorts.kext의 EHC1의 허브포트 위치를 1D200000로 고쳐줍니다:
계산기 앱을 이용하면 편합니다(cmd+3):
USBHubPorts.kext의 locationID는 Hex로 입력해서 1D000000가 될 수가 있고요, IONameMatch에 String EHC1/EH01이 될 수도 있습니다. (또는 1A000000 아니면 EHC2 또는 EH02)
USBDevicePorts.kext는 locationID를 10진수로 입력해야 합니다. AppleUSBHub.kext(E-6번)의 형식이 제한되는 것 같습니다. i불d명k...
E-5. E-1번에서 언급했던 AppleUSBHostMergeProperties.kext/C*/Info.plist를 베이스로 만들었습니다. E-1을 다시 설명하자면: 본문 1번은 EHCI 매핑을 본인이 의도하는대로 설정하기 위해서 아예 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist의 EHC1과 EHC2 기준을 무시하고 USBHubPorts.kext로 AppleUSBHostMergeProperties.kext/C*/Info.plist에 해당하는 설정을 EHC1과 EHC2의 locationID를 기준으로 추가해주기 위한 사전작업입니다. 하지만 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist에 본인 장치에 해당하는 허브포트가 제대로 구성되어 있다면 EHCx to EH0x rename과 USBHubPorts.kext가 전혀 필요 없습니다. E-1 끝부분에 보여드렸던 IOReg에 를 다시 보시면 EHC 1번 장치와 EHC 2번 장치에 허브포트가 각각 하나씩 달려야 정상입니다. 이 IOReg을 구성하기 위한 USBHubPorts.kext는 다음과 같습니다:
순정 AppleUSBHostMergeProperties.kext/C*/Info.plist에 의해 EHC1에 허브포트가 하나가 달려 있어서 EHC1은 그대로 사용하지만, 순정 AppleUSBHostMergeProperties.kext/C*/Info.plist에 의해 EHC2에 허브포트가 두개가 인젝트되므로 EHC2 to EH02 rename을 적용하고 EHC2/EH02의 locationID를 기준으로 허브포트를 하나만 인젝트해줍니다.
E-6. 이 켁스트는 /S*/L*/E*/IOUSBHostFamily.kext/C*/P*/AppleUSBHub.kext/C*/Info.plist를 기반으로 만들었습니다. E-1번에서도 보셨을텐데, EH02의 허브포트 이름을 저는 HUB2로 설정했습니다. IORegistry 단계의 다른 곳에서 이 허브포트의 이름에 관여하지 않는다면 허브포트 이름은 4글자 아무렇게나 설정할 수 있습니다. 저는 하위포트를 제가 알아볼 수 있는 이름으로 사용합니다. H11L은 EHC 1번 장치 1번 하위포트 왼쪽, H12R은 2번 하위포트 오른쪽, H16B는 6번 하위포트 블루투스이고, H21S는 EHC 2번 장치 1번 하위포트 SD카드, H23W는 3번 하위포트 웹캠입니다.
위에 초록색으로 표기한 포트위치에 주목하시고, USBDevicePorts.kext에 port의 위치가 1번이면 01000000, 6번이면 06000000 등인 것을 확인해보세요.
E-7-A. USBInjectAll.kext도 XHC에 대한 IOReg 인젝션 정보가 USBInjectAll.kext/C*/Info.plist에 들어있습니다. 만약 XHC에 대해 해킨툴의 USBPorts.kext를 사용하지 않고 USBInjectAll.kext를 사용하시겠다면 USBInjectAll.kext/C*/Info.plist에서 본인 모델의 EHC 부분을 삭제해주면 USBInjectAll.kext는 더이상 EHC에 관여하지 않고 XHC만 설정해주기 때문에 기존 XHC USB 설정을 유지하고 EHC에 대한 설정을 진행할 수 있습니다. 하지만 USBInjectAll.kext로 포트가 인젝트되지 않아 테스트할 수 없으므로, USBHubPorts.kext와 USBDevicePorts.kext를 설치해서 진행하면 됩니다. 물론 이것보다는 E-2의 USB3에 대한 USBPorts.kext 생성 가이드를 참고하는 것을 추천합니다.
E-7-B. XHCI와 EHCI가 둘 다 있는 보드에서 USBPorts.kext를 생성시켰다면 USBPorts.kext/C*/Info.plist에서 XHC는 맞게 설정되었겠지만 EHCx는 잘못 되었을 겁니다. 이 때 EHCx/EH0x에 대한 IOKitPersonalities 항목을 삭제하고 USBInjectAll.kext와 같이 작동하는 부트플래그 -uia_exclude_xhc를 입력합니다. XHC는 USBPorts.kext로만 설정된 상태고, EHC는 USBInjectAll.kext로 모든 포트(PR11-PR18, PR21-PR26)가 인젝트된 상태에서 EHCI 패치를 진행하게 됩니다. 1번부터 시작하고, 다 끝나면 -uia_exclude_xhc를 삭제합니다.
E-8. 각 보드/USB포트가 지원하는 값은 각각 다르고, System Report에 표기되는 값으로 제한되기 때문에 여러 번 테스트해서 적절한 값을 선정하시면 됩니다. 전력값은 SSDT-USBX.aml로 설정하는 것이 가장 쉽습니다. 어차피 높은 값을 넣는다고 하더라도 USB3 USB2 최대상한선까지만 공급이 지원되기 때문에 한 값을 통일해서 SSDT-USBX.aml을 사용하는 것이 편합니다. 하지만 모종의 이유로 XHC와 EHC 추가전력값을 구분하고, 심지어 EHC1과 EHC2를 구분하고 싶다면 각각 해당하는 켁스트 즉 USBPorts.kext나 USBHubPorts.kext에서 값을 구분해서 넣어줄 수 있습니다:
또한 /S*/L*/E*/IOUSBHostFamily.kext/C*/Info.plist의 AppleBusPowerController로 인해 추가전력이 이루어지는 경우에는 이 값을 직접 수정하지 않는 한 변경할 수 없습니다. 따라서 매칭이 이루어지지 않게 하기 위해 USBInjectAll.kext를 이용한 별도의 전력설정 방법이 필요합니다. 참고: https://www.tonymacx86.com/threads/guide-usb-power-property-injection-for-sierra-and-later.222266/
E-9. 잘 안 되면 다시 읽어보시거나 도움 요청하세요^^
EHCI 설정 외 다른 방법: 만약 본인 메인보드가 XHCI+EHCI로 구성되어 있고, 바이오스에 XHCI만 사용할 수 있는 옵션이 있다면 해당 옵션을 사용하는 것으로, 또는 ACPI 수정을 통해 EHC를 비활성화 시키는 것으로 XHCI로만 모든 포트를 구성할 수 있는 방법도 있습니다. Acidanthera도 이 방법을 선호합니다. https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/SSDT-EHCx_OFF.dsl
하지만 하나의 컨트롤러에 15개라는 포트 개수 제한이 있으므로, 모든 포트가 15개 이하라면 괜찮지만 아니라면 포트확장 패치 없이 XHCI 하나로만 모든 USB 포트를 사용할 수 없을 수도 있습니다. 또한 어떤 메인보드의 경우 XHCI와 EHCI가 아예 구분되어서 일부포트는 EHCI로만 관리하고 어떤 포트는 XHCI로만 관리하기 때문에 EHCI를 비활성화 시키면 EHCI에 연결된 USB 포트를 전혀 사용할 수 없을 수도 있습니다. 예: https://github.com/headkaze/Hackintool/issues/39#issuecomment-548291494
추가 고려해볼만한 사항 1: RehabMan의 FakePCIID.kext와 플러그인 FakePCIID_XHCIMUX.kext를 이용하면 XHC 포트가 15개를 넘는 경우 USB2 포트를 전부 EHCx로 연결해서 XHC도 15개수 이하, EHCx도 15개 이하로 유지할 수 있습니다. 적어도 XHC-EHC default보다는 더 많은 USB 포트를 사용할 수 있으므로 고려해볼 만한 사항이죠. 하지만 리얼맥 기준으로 SKL+ 모델은 EHCI가 없으므로 Acidanthera는 FakePCIID_XHCIMUX.kext를 추천하지 않습니다. 리얼맥에서 멀어진다는 이유에서죠. 하지만 작동하는 점에서 전혀 문제가 없다면 (아직까지는 이론상 전혀 문제가 없습니다.) FakePCIID_XHCIMUX.kext를 사용하셔서 모든 포트 살리시는 것이 좋겠습니다.
추가 고려해볼만한 사항 2: 인젝션 켁스트는 IOKitPersonalities에 몇 개의 항목이 있던 각각 해당하는 Class, Provider 등을 정확하게 입력한다면 켁스트를 나누거나 병합할 수 있습니다. 큰 의미는 없지만 예전에 많이들 하셨던 USBPorts.kext/C*/Info.plist를 FakeSMC.kext/C*/Info.plist에 붙여넣기 등...진짜 의미 없고, 켁스트 업데이트 하면 다시 해야 하는 불편함이 따릅니다. 하지만 USB 인젝션 켁스트는 맥에서 USB 시스템이 바뀌지 않는 한 그대로일 것이고, USB라는 항목 하나에 모든 인젝션 정보를 병합한다면 관리하기 편할 수도 있습니다:
제가 삼성 아티브북에서 실제로 사용하는 EHCI용 USBPorts.kext (USBHubPorts+USBDevicePorts): USBPorts.kext.zip
이 글에서는 허브포트와 하위포트를 헷갈릴 것을 방지하기 위해 USBHubPorts.kext와 USBDevicePorts.kext로 구분했습니다.
허브포트는 하나씩 인식되었지만 하위포트 설정이 적용되지 않는다면 1: USBDevicePorts.kext의 IOProviderClass를 AppleUSB20InternalHub과 AppleUSB20InternalIntelHub을 번갈아가면서 테스트해보세요. USBInjectAll.kext는 모든 EH0x에 대해 전부 AppleUSB20InternalHub을 사용하지만, 제가 테스트해본 결과 몇몇의 모델은 AppleUSB20InternalHub을 넣어도 AppleUSB20InternalIntelHub을 넣어도 AppleUSB20InternalIntelHub으로 설정됩니다. 예를 들어 제가 사용한 MBP8,1. 어떤 모델은 AppleUSB20InternalHub만 인식하고, AppleUSB20InternalIntelHub은 USB 설정을 파괴합니다. 예를 들어 MBA6,2. 실험적인 결과지만, 가장 안전한건 AppleUSB20InternalHub입니다.
허브포트는 하나씩 인식되었지만 하위포트 설정이 적용되지 않는다면 2: 어떤 보드의 경우에는 USB2 허브 아래 내장 포트가 있고, 그 아래에 실제 사람이 연결하는 하위포트가 있을 수도 있습니다. 그렇다면 기존의 허브포트-하위포트 방식이 아니라 허브포트-"중간포트"-하위포트가 되겠죠. 맥에서도 이러한 시스템이 있는데, /S*/L*/E*/IOUSBHostFamily.kext/C*/P*/AppleUSBHub.kext/C*/Info.plist에서 찾을 수 있는 iMac13,1-13,3입니다. 구조를 살펴본 결과 이 "중간포트"는 하위포트와 같습니다. 따라서 허브포트-하위포트-하위포트가 되겠습니다. 기존 허브포트-하위포트와 구분지어 부르자면 허브포트-중간포트-말미포트라고 부를 수 있겠고요. 그렇다면 허브포트는 기존의 5번을 따라가고, 중간포트는 6번을 그대로 따라가고, 말미포트는 E-4를 참고하여 중간포트의 locationID를 입력하면 맥 USB 트리구조를 따르는 USB 설정 완료가 되겠습니다. 커맥에서 이 설정이 제대로 작동하는지 테스트하는 문제는 별도로 남아있지만요.
결론
EHCI 제대로 잡으셨으니 삽질 성공...ㅠ
EHCI 작업은 매우 귀찮습니다. 해킨툴이 나오기 이전 USB 작업이 이러한 것이었고, 매우 피곤했었겠지요.
XHCI는 컨트롤러-하위포트로 구성되서 비교적 간단하지만 EHCI는 컨트롤러-허브포트-하위포트로 구성되기 때문에 XHCI에 비해 훨씬 더 피곤...
빨리 해킨툴 제작자가 해킨툴 고쳤으면 좋겠습니다. 해킨툴 업데이트 됬으므로 해킨툴 사용하시면 맘 편합니다ㅎㅎ
https://x86.co.kr/kext/4168134
Credits
Andrey1970 https://applelife.ru/threads/nastrojka-usb-v-10-11-10-15.627190/page-3#post-537459
Acidanthera
RehabMan
구글번역기
추가로 읽어볼만한 자료
XHC, EHC의 ACPI, IOACPIPlane 관련 애플 USB 작동원리: https://www.tonymacx86.com/threads/guide-10-11-usb-changes-and-solutions.173616/
Intel 7/8x대의 보드에서 주로 보던 문제네요
7x시리즈경우 거의 100% EHC1/2 + XHC의 3개의 컨트롤러가 잡혀옵니다 (이름은 조금 다를 수 있습니다)
8x시리즈경우 본문대로 허브의 하위 포트로 물려있는 경우가 많아서 Hackintool로 시도하면 거의 100% 엉뚱한 값이 생성되어서 kext나 ssdt를 수동으로 만져줘야합니다
제경우는 귀찮아서 자동 생성으로 만든다음 만들어진 dsl을 수동으로 편집해서 허브를 집어넣어서 컨트롤러-허브-포트 이렇게 되게 만든다음 집어넣었습니다
기본 작업전에는 15포트 제한 해제 패치를 먹인다음 시작하므로 쉽게 모든 포트의 번호를 확인 가능해서 이걸 참조로 작업합니다 (단 구형 보드는 1번만에 패치하면 이상해져서 2~3번은 손되어야하는 경우도 있었습니다)
요즘 새로 맞추어서 6세대 이상으로 맞추시는경우는 아마 저 문제에 시달릴일이 거의 없을껍니다 (365를 제외하고 내장 허브가 잡히는경우도 거의 없고, 그것도 Hackintool이 자동 처리해주는 범위내입니다)
다만 추가 전력 부분은 문제가 있는경우 이것저것 해보거나, 15포트 제한이 문제가 되는 경우도 참조하시면 될듯합니다
근데 FakePCIID_XHCIMUX.kext 어차피 EHC가 있는 보드에서만 작동하던걸로 기억하므로 6세대 이상에선 안 먹히고, 3~5세대는 어차피 최상급 Z정도의 칩셋을 안 쓰는한 컨트롤러당 15포트 넘는일 잘 없습니다 (심지어는 XHC로 올인원해버린 6~9세대조차 최하급인 x10칩셋은 15포트 잘 안 넘깁니다) (결론은 100이상의 요즘 보드는 개수 넘긴다=학살한다에서 벗어날 수 없습니다)
추신 : 그런데 USBDevicePorts.kext + USBHubPorts.kext로 안 나누고 저것 1개로 묶어도 될껀데요? (SSDT로 생성하게 되면 같이 묶어서 쓰고, Hackintool기본 생성이나, 대부분의 유포되는 EFI가 단일 파일로 만들어놨음)
저 kext의 역활이란건 결국 XHC포트의 USB2핀을 강제로 EHC인것처럼 만들어버리는거니까요 (근데 저시대의 보드는 대부분 USB3가 몇개 없어서 오히려 XHC보단 EHC쪽이 더 15포트 쉽게 차버린다는게 함정) (이외에 BIOS옵션경우 Smart Auto해야하는경우도 있고, Enable해야하는 경우도 있었습니다)
이 글 보니 생각나서 간만에 또 삽질중인데, 제 기억에는 분명히 PCI0.LPCB의 EC0, ECDV등을 Rename해서 EC로 해서 전력값 덮어쓰면 끝이었던걸로 기억하는데, 지금 ECDV를 EC로 바꾸니 전력값 수정이 안 먹는건 왜 일까요; (먼산) (다만 ECDV인 상태에서도 맥이 알아먹는지 전력이나 컨트롤러에서 장치명 뜨긴합니다)
이외에 Fan 잡아볼까했는데, 삽질하다가 너무 안 되서 혹시나해서 Windows 가서 봐도 안 잡히는걸 보고 좌절중입니다
추신 : 제경우 SSDT로 몇개 나누어서 잡았습니다
이런식으로 각각의 장치의 전력값을 덮어쓴후
기본대로 포트 잡았습니다
옛날에 하던식으로 해보긴했는데, 일단 전력이 잡히길래 내버려뒀습니다 (아이폰등이 아니라도 1000ma등 뜨는걸 확인) (아마 저것들 없어도 잡힐지도 모르겠지만, 확인 귀찮아서 방치) (몇년동안 안 만지다가 복귀후 옛날 기억 살려서 작업)
거의 스팩이 같은 맥북 에어(5세대) SMBIOS를 입력했더니 비슷한 스팩이라 그런지 거의 모든게 원활하게 잡혀서 쉽게 깔았습니다 (카드 리더랑 트랙패드만 삽질하고, 액정 문젠 아직 못 고침)
물른 애 말고 다른 기종들은 USB-X등을 쓰고 있습니다 (랄까 이넘이랑 아이비 데탑 1대를 제외하면 죄다 6세대 이상) (저 게시물도 이전 이글루스껄 복사한거라 날짜가 저렇지 꽤 예전에 작성한거라 고쳐야할 부분 보이는데 귀찮아서 방치중)
귀찮아서 아무도 안 하겠지만, 저런게 있었다는건 아마 SMC kext등을 수정해서 SMBIOS기준으로 값을 강제로 덮는식으로도 작업이 가능할듯합니다
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
macOS Sequoia 15.0.1 24A348 정식버젼 고스트 이미지 OC 1.0.2 ft: 전체공개 +29 | 937 | 24.10.1121:10 | 좌절금지 |
오픈코어 1.0.2 +23 | 575 | 24.10.0900:22 | 줌바이퍼 |
[중급편] 노트북 해킨 +16 | 1403 | 24.07.1219:19 | Stultus |
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +17 | 575 | 24.09.1917:09 | 좌절금지 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +31 | 909 | 24.09.1723:58 | 좌절금지 |
[초급편] 문제 스스로 해결하기 +20 | 4002 | 24.03.2920:07 | Stultus |
[입문편] 첫 해킨 길라잡이 +40 | 5086 | 24.01.1218:54 | Stultus |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +67 | 5.1만 | 23.01.0913:39 | shl628 |
Hot AMD Sequoia용 AppleALC 1.9.2 +3 | 106 | 24.10.2319:04 | 사노라맨 |
Hot [Sequoia 15.0.1, OC r1.0.2] ASUS TUF B550-PLUS / RYZEN 5 5600X / RX470 +2 | 103 | 24.10.2322:26 | 뿌엥 |
Hot OCLP로 지원되지 않는 기기/dGPU를 사용하는 해킨토시의 사이드카 품질 문제 해결방법 +1 | 119 | 24.10.2321:29 | 해킨도전자 |
103 | 24.10.2322:26 | 뿌엥 | |
119 | 24.10.2321:29 | 해킨도전자 | |
106 | 24.10.2319:04 | 사노라맨 | |
784 | 24.10.1412:27 | shl628 | |
666 | 24.10.1316:00 | 수박 | |
344 | 24.10.1222:56 | Stultus | |
937 | 24.10.1121:10 | 좌절금지 | |
732 | 24.10.1115:53 | 수박 | |
575 | 24.10.0900:22 | 줌바이퍼 | |
1403 | 24.07.1219:19 | Stultus | |
1210 | 24.10.0500:31 | 줌바이퍼 | |
569 | 24.10.0410:49 | Tamy | |
749 | 24.09.2923:48 | 머트 | |
628 | 24.09.2822:28 | 머트 | |
463 | 24.09.2808:22 | Tamy | |
894 | 24.09.2321:32 | Stultus | |
994 | 24.09.2210:59 | 좌절금지 | |
644 | 24.09.2203:23 | 누림어멈 | |
1191 | 24.09.1919:17 | 좌절금지 | |
575 | 24.09.1917:09 | 좌절금지 | |
498 | 24.09.1813:37 | Stultus | |
909 | 24.09.1723:58 | 좌절금지 | |
601 | 24.09.1722:40 | 좌절금지 | |
453 | 24.09.1717:13 | 맥가즈아 | |
562 | 24.09.1708:13 | 김경석 | |
234 | 24.09.1617:47 | Panictosh | |
768 | 24.09.1504:35 | Tamy | |
584 | 24.09.1319:18 | Stultus | |
706 | 24.09.1019:44 | 치토 | |
484 | 24.09.0118:13 | 머핀X | |
462 | 24.09.0112:54 | 해킨도전자 | |
546 | 24.08.3115:34 | 머핀X | |
306 | 24.08.2601:42 | 화정큐삼 | |
305 | 24.08.2422:59 | 하나브 | |
318 | 24.08.2316:25 | 화정큐삼 | |
415 | 24.08.1810:56 | CanBe | |
363 | 24.08.1800:04 | 화정큐삼 | |
300 | 24.08.1722:03 | 화정큐삼 | |
201 | 24.08.1710:14 | jbhlyk | |
312 | 24.08.1622:06 | Stultus | |
218 | 24.08.1511:16 | hackillious | |
169 | 24.08.1421:30 | 세유니 | |
419 | 24.08.1419:58 | Stultus | |
377 | 24.08.1311:26 | 오디세이 | |
270 | 24.08.1115:46 | 좌절금지 | |
186 | 24.08.1111:21 | 티타보르 | |
233 | 24.08.1022:46 | Stultus | |
538 | 24.08.1022:10 | 오디세이 | |
168 | 24.08.1019:05 | jbhlyk | |
200 | 24.08.0923:20 | RogerT |
EHCI 에 대해서 많은 정보를 알게 되었습니다.
그리고, FakePCIID_XHCIMUX.kext 가 저런 용도로 사용되는 것이었군요.
좋은 Tip 글 감사합니다. :)