오랜만에(?) 글을 끄적여 봅니다.
역시 글은 아침에 쓰는게 제맛이죠 -_-++...
무슨 내용으로 글을 쓰면 좋을지 고민을 많이 했습니다.
USB는 이슈가 매우 많습니다.
충전 이슈, 아이폰 연결 이슈, 잠자기 이슈
파워 이슈, 심지어 포트 이슈나 인식 이슈 등등...
종류가 다양한 만큼 어디를 어떻게 손대야 할지 모르는 경우가 많습니다.
실제로는 저도 같습니다;
해당 강좌를 쓰는데 어디서 어떻게 손을 대면 좋을지 감잡기가 어렵더군요.
대체로 패치를 위주로 적기에는 단순히 다른 사이트들의 패치법을 번역해 놓은 수준에 지나지를 않으니
순수하게 DSDT만 보고자 합니다.
그리고 원리에 대해서도 조금은 더 살펴보려고 합니다.
위는 인텔 8시리즈에 대한 칩셋 데이터 시트입니다.
인텔사 홈페이지에 들어가 찾은 기술문서에 명시된 내용이지요.
저렇게 칩셋들은 자신만의 고유 디바이스 아이디를 가지게 됩니다.
8186 혹은 8086 등의 벤더아이디와 함께 말이지요.
해당 디바이스 아이디가 은근히 중요합니다.
이걸 기준으로 EHCI, XHCI 켁스트 드라이버들이 인식해서 동작할지 안 할지를 판단하기 때문입니다.
대체로 usb는 인식에 특성을 잘 안타는데
그 첫째 이유는 usb자체가 애플이 사용할 때 인텔 유에스비 칩셋 드라이버를 사용한다는 점입니다.
이로 인해 인텔이면 대부분 네이티브 켁스트가 바로 동작합니다.
두번째로는 유에스비는 디바이스 아이디에 대한 특성을 안 탑니다.
칩셋군으로 동작하기 때문인데요,
얘를들면 i3 4xxx, i5 4xxx, i7 4xxx대의 cpu. 그리고
메인보드 B85(M), H81, H87(M), Z87 시리즈들의 경우에 모두 하나같이 하스웰 기종 인텔 8시리즈 C220 칩셋을 택하고 있습니다.
이로 인해서 메인보드가 달라도 씨피유가 달라도 칩셋이 동일하기 때문에
유에스비는 모두 똑같은 하나의 기종으로 인식되며
애플은 이미 작품상 4세대 하스웰기종을 내놓은 이력이 있기에
자연스레 지원이 되는 것입니다.
요번 엘케피탄 유에스비 3.0 이슈도 비슷한 맥락이라고 볼 수 있겠습니다.
NEC usb인식 이슈가 있는데, 아마도 엘캐피탄 쪽 제품군 중에
해당 칩셋을 지원해주면 모를까, 외로는 아직 뚫기가 힘들다 생각됩니다.
몇가지 견해를 적자면 켁스트의 동작 방식 자체가 굉장히 정교하게 설계되있다는 것입니다.
자세한 사진은 아래를 보시면 되겠습니다.
...테이블이 엄청 기네요;; (당황)
여기서 유심히 보아야 할 것은 USB2가 무려 14개나되고 usb3은 6개나 된다는 것입니다.
그렇다는건 칩셋이 지원하는 메인보드의 usb2.0이 14개나 있고 usb3이 6개나 있는건가라고 물어보신다면 아니라는겁니다.
USB2.0은 3.0의 하위호환버전입니다.
이로인해 14개 중에 6개는 유에스비 3.0의 하위 호환 동작버전이 되겠습니다.
즉 usb2.0 (8포트), usb3.0(6포트), usb3.0의 2.0호환 (6포트)로 동작하는 것이며
토탈 usb2.0은 최대 8포트까지 지원하며 3.0은 6포트까지 지원하는 것이 됩니다.
뒤에 Rn6 등이 있는게 이것은
해당 유에스비 포트의 고유 번호입니다.
이 숫자가 Location ID번호로써 사용되어지며, 이 값이
네이티브 켁스트에 의하여 얼마나 잘 맞느냐가 인식의 관건이 됩니다.
다시 말씀드리면, 이 값이 네이티브 켁스트가 지원하는
즉- 실제 자신이 사용하는 smbios상의 모델이 지원하는 유에스비 포트의 경로가
자신이 지금 사용중인 메인보드의 포트 경로와 같아야 하는 것입니다.
다르면(?), 인식이 안되거나 짤리거나 씹힙니다.
심지어는 3.0 동작이 안됩니다;
이걸 잘 표현해주는 그림이 바로 아래 그림입니다.
그리고 기술문서를 잠시 언급하자면 XHCI에 대해 다음과 같이 명시되어있습니다;
xHCI Controller (D20:F0)
The PCH contains an eXtensible Host Controller Interface (xHCI) host controller which supports up to 14 USB 2.0 ports of which up to 6 can be used as USB 3.0 ports with board routing, ACPI table and BIOS considerations. This controller allows data transfers of up to 5 Gb/s. The controller supports SuperSpeed (SS), high-speed (HS), full-speed (FS) and low speed (LS) traffic on the bus.
The xHCI controller does not have a USB Debug port. If USB debug port functionality is desired then the system SW must use the EHCI-based debug port discussed in
해당 구문을 잘 읽어보시면 xhci콘트롤러는 지원되는 14개 2.0포트중 6개를 3.0이 돌려쓴다고 되어있습니다.
그 6개가 바로 우측의 EHCI#2 컨트롤러가 되는 것입니다.
그래서 칩셋드라이버가 ehci는 2개이고 xhci는 1개가 되는 것이지요.
이것은 다시말하자면 원래 동작하는 것의 주된, 오리지날 방식은
3.0포트에 2.0기기를 꽂으면 시스템정보의 USB탭에 동작이
EHCI#2에 해당기기가 물려있으며 EHCI켁스트 드라이버가 동작해야하는 것이고
2.0포트에 2.0이 물리면 EHCI#1이 동작하여 EHCI켁스트에 의해 동작되어야합니다.
그리고 3.0에 3.0기기가 물리면 XHCI가 동작하여 켁스트에 의해 동작되어야 하는 것이지요.
이렇게 동작하지 않는다면?, 제대로 유에스비 인식이 되지 않은 것입니다.
제 보드도 루트문제가 존재해서 3.0 4포트 중 2포트는 2.0으로밖에 못쓰며 2개만 3.0으로 살려서 쓰고 있는 중입니다.
방법을 백방으로 찾아보았지만 어쩔 도리가 없어 그냥 포기하고 쓰고 있네요 ㅎㅎ..... (푸념입니다)
위는 EHCI에 대한 PCI 레지스터 주소 맵을 보여주는 부분입니다.
-_-... 솔직히 이부분을 dsdt랑 매칭시켜서 보려고 하는데, 모르겠더군요. (죄송합니다... 일치되는게 없어요 ㅠㅠ)
몇가지 살펴본 바로는 해당 부분은 아무래도 PCI부분에 대해 명시된만큼
수정할 수 있는 방법이 따로 있을 것으로 추정되고 있습니다.
실제로도 AppleUSBXHCIPCI.kext의 Info.plist파일을 살펴보면 아래처럼 PCI Class Match가 명시되어있는데,
앞서 이미지로 살펴본 값과 일치함을 알 수 있습니다. (리틀 및 빅엔디안 방식에따라 표기의 차이는 있습니다.)
조금 더 살펴보자면 위의 0x0c033000값은 인텔 데이타시트에 따르면 아래의 4개값에 해당됨을 살펴볼 수 있겠습니다.
먼저 인식시에는 BCC, SCC, PI RID값을 기준으로 검사하여 인식한 후 NameMatch나 vendor, device-id등으로 2차검사를 하는 것으로 보여집니다.
참고이지만 NameMatch는 해당 기종에 들어가면 볼 수 있고,
포트도 앞서 살펴본 이미지대로 구성이 되어있지만! 리얼맥에서는 사용하는 포트가 제한이 걸려있어서
모든 포트가 사용가능한 상태가 아니라고 나옵니다.
XHCI에 대한 부분인데 XHCI에서 6포트 중 SSP의 2개는 사라져있고 나머지 하위호환으로만 4개 + 2개가 있는데
남은 2개포트의 용도는 딱히 모르겠다는 겁니다;
애플은 2.0포트따윈.. 만들지 않으므로 -_-;;
3.0과 그 하위호환만 동작한다고 보았을 때 대충 썬더볼트 단자로 추측되기는 합니다만
정확한 부분은 아니니 넘어가겠습니다.
DSDT인데 dsdt가 나오지 않는 이유가 있습니다.
실제로 기본적인 패치법들은 이미 이전 강의들을 통해 모두 익히셨고,
이제부터는 원리..가 좀 주된거라고 볼 수 있겠습니다.
[실전강의는 글을 번역해 옮겨다 쓰는 것에 지나지 않아 원리편으로 다시 돌아왔습니다; 죄송합니다 ㅠ]
요모조모 여러분들께서 실제 패치법을 맞딱뜨렸을 때에 조금은 더 유연하게 대처하기 위해서
적어도 동작원리는 알고 계셔야 한다는 겁니다.
대체로 가이드라인은 자신이 직접 자기 컴퓨터에 패치하는 것을 기초로해서 작성되는데
이런 경우 자기 컴퓨터가 가이드라인을 작성한 이의 기기와 다른경우가 태반이므로
조금이라도 값이 다르거나 하면 이게 맞는건가 하면서 우왕좌왕하게 된다는 것입니다.
고로, 어느정도 이런부분들을 숙지하셔야
대충 감을 잡고서 삽질을 조금이나마 더 줄일 수 있지 않을까 합니다. (ㅎㅎ....)
하튼, EHCI와 XHCI는 동작방식이 거의 흡사합니다.
다만 3.0이냐 2.0이냐 정도의 차이인데
2.0은 ehci는 MergeNub 및 특수한 방식으로 기기를 잡아서 인식해 쓰기때문에
(대체로 XHCI한테 권한을 다 넘겨줍니다. 이 드라이버가 EHCI한테 요청을 하면 넘어가는 식인 것 같습니다.)
딱히 루트에 대한 부분이 정확히 명시되어 있지가 않습니다만 (켁스트상에는요.)
IORegistryExplorer 혹은 DSDT의 RHUB등을 살펴보시면 하위 루트로 잡혀있는 포트들이
굉장히 다양하게 있음을 아실 수 있을겁니다.
여담으로 EHCI는 1a와 1d로 잡히는 경우가 대다수입니다. :)
이상으로 USB 완전 정복하기 2번째 편을 마치도록 하겠습니다~
감사합니다!
ksj 님 분명 좋은 강의인데 저에게는 넘사벽일까요...
어렸을때 친구들에게 미적분을 가르쳐주며
"조그만 하면 쉬운거야" 하고 내가 말하면
그 중 공부하기 싫은 친구는 "너나 그 문제 풀어."
그냥 하얀 글씨만 넘어갑니다. 흐흐흐
그래도 중요하니 빨강 볼펜으로 밑줄짝 하겠습니다.
한가지는 배우고 갑니다.
ehci니까 e= 2 = usb2
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
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 | |
665 | 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 |
오오오..EHCI2에서 XHCI로 가는거였군요..좋은 강의 감사합니다!! 너무 재미있어요