2019/03/30 00:17

USB 정보 입력 (SSDT-UIAC) 강좌&팁


기본적으로 아무짓 안 해도 이런 기종은 잘 작동하므로 딱히 필수는 아닙니다 (원래 15개 이상 포트가 잡히는 기종에서 작동 안 하는 포트가 있는경우 잡기 위한 작업입니다)

다만 실재 하드웨어 정보에 맞추어서 정보를 입력하기 위한 작업입니다

HP Prodesk 400 G2 mini를 쓰시는경우 그냥 위에 첨부된 SSDT-UIAC랑 SSDT-USBX를 받아서 쓰시면 됩니다

기본 https://translate.google.com/translate?js=n&sl=auto&tl=en&u=https://blog.daliansky.net/Intel-FB-Patcher-tutorial-and-insertion-pose.html를 참조한 상태입니다 (다만 번역기 돌린거고, 좀 이해 힘든 부분이 있으므로 http://kgp-hackintosh-corner.com/xhc-usb-kext-creation-guideline를 먼저 읽어보신후 보시길 추천합니다)

작업 수동으로 값 입력해도 되지만, 쓸때업는 노동을 피하기 위해 자동으로 해보겠습니다

먼저 https://www.insanelymac.com/forum/topic/335018-hackintool-v216에서 최신 버전의 Hackintool을 받습니다

다음 컴의 전원을 끈다음 M.2 무선랜 슬롯에 BT달린 무선랜을 장착후 부트해서 다운받은 Hackintool을 실행합니다

다음 USB텝에 가주세요

그리고 컴에 달린 모든 포트에 한번씩 USB3랑 1.1~2 (키보드등)타입을 각각 뻇다 꽃았다 해줍니다

다 완료하시면 현제 접속되어져 있거나, 꽃은적이 있는 포트가 빨간색으로 변합니다

이어서 타입을 맞출 차례입니다 (처음에 이걸 잘못 이해해서 작동 문제 일으킴)
1. Intenal : 내장 포트(M.2 등)랑 내장 허브에 연결된 포트(PR로 시작함)
2. USB2 : USB2 전용 포트
3. USB3 : USB3 포트 (USB3랑 연동된 HSUSB2가 아닌 USB3로 지정해주세요)
4. TypeC : 양면 장착시 각각 다른 SS 신호를 쓰는 경우 (복수의 SS를 사용)
5. TypeC+Sw : 양면 장착시 같은 SS 신호를 쓰는 경우

일단 외장의 모든 장치를 다 뺀다음 장치 이름이 뜨는 포트를 Internal (BT나 캠등의 내부 USB인터페이스 장치가 해당됩니다)로 지정합니다

다음 USB3포트에 장치를 꽃으면서 이름이 뜨는 포트를 3로 지정해줍니다 (USB2/3타입 각각 연결하면서 HS랑 SS양쪽 다 찾아서 지정!)

이어서 USB2포트에 장치를 꽃으면서 이름이 뜨는 포트를 2로 지정해줍니다

USB C포트경우 보드에 따라 1개가 아닌 장착 방향에 2개의 SS포트를 쓰는 경우도 있으니 반드시 양방향 다 시험해주세요 (만일 양면이 다른경우는 TypeC, 같은 경우 TypeC + Sw를 골라주세요)

참고로 HackinTool의 GUI에는 저렇게 5가지정도가 있지만, 문서에 따르면 실재 사용가능한 타입은 더 많이 있습니다 (입력할려면 수동으로 고쳐주세요)
 
kTypeA = 0x00 = USB2 표준 A
kMiniAB = 0x01 = Mini AB
kExpressCard = 0x02 = USB - Express Card
kUSB3StandardA = 0x03 = USB3 표준 A
kUSB3StandardB = 0x04 = USB3 표준 B
kUSB3MicroB = 0x05 = USB3 Micro B
kUSB3MicroAB = 0x06 = USB3 Micro AB
kUSB3PowerB = 0x07 = USB3 Power-B
kTypeCUSB2Only = 0x08 = USB2전용 C포트
kTypeCSSSw = 0x09 = C포트 (스위치 사용)
kTypeCSS = 0x0A = C포트 (스위치 미사용)
예약됨 = 0x0B – 0xFE = 예약됨
kInternal = 0xFF = 내부 커넥터
이렇게 되어있습니다
 
일반적인 USB20x00, USB30x03을 주시면 되고, 절전모드시에도 전력을 공급받아야하는 장치0xFF를 설정해주세요
 
아주 가끔 있는 USB - Express Card 어뎁터를 쓰는 경우 0x02, 모니터등을 위한 100W까지 지원되는 12V 지원타입0x07을 써주세요
 
USB C포트인 경우 USB3가 안 되는 타블렛등에서 가끔 보이는 USB2전용 포트는 0x08, USB 3.2 Gen1(5Gbps)/USB 3.2 Gen2(10Gbps)0x09 (SS 1개 사용), USB 3.2 Gen1x2(10Gbps)/USB 3.2 Gen1x2(20Gbps)0x0A (SS 2개 동시 사용)를 쓰셔야 합니다

보드에 따라 일부 포트가 기본으로 목록에 안 올라옵니다 (포트에 장치 연결해도 무반응)

이경우 먼저 포트 제거 안 한 상태에서 Export해서 만들어진 kext의 Infor.plist를 편집해서
<key>HS08</key>
<dict>
<key>UsbConnector</key>
<integer>255</integer>
<key>name</key>
<string>HS08</string>
<key>port</key>
<data>
BgAAAA==
</data>
</dict>
이런식으로 존재하지만 인식 안 된 (숫자가 중간에 하나쯤 비어있는등 부자연스러운곳을 의심해주세요) 포트를 수동으로 추가후 적용하고, 재부팅하면 정상적으로 작업을 할 수 있게 됩니다
 
최종 결과물은 하단의 스샷을 참조해주세요

이 기종경우
전면 좌 - HS08 + SS04
전면 후 - HS09 + SS03
후면 2.0 상 - HS05
후면 2.0 하 - HS04
후면 3.0 상 - HS01 + SS01
후면 3.0 하 - HS02 + SS02
에 매치되므로 종합하면
HS01, 02, 04, 05, 08, 09
SS01, 02, 03, 04
이 사용중입니다

흰색인 포트는 실재 커넥터가 연결 안 된 포트이므로 하단 중앙의 5개중 -버튼을 눌러서 다 지워줍니다

이걸로 작업이 완료되었습니다

다음 하단 중앙의 버튼중 젤 우측의 export버튼을 눌러줍니다

그럼 바탕화면에 SSDT-UIAC.aml, SSDT-USBX.aml, USBPorts.kext가 생성되는데 USBPorts.kext는 필요없으므로 지웁니다

Catalina에서 SSDT-USBX.aml로 고속 충전이 안 되는경우 해당 aml이 아닌 위에 첨부된 전용을 써보세요 (다른 기종에서 작업시 EC관련 aml이 생기는경우 해당 aml을 쓰지말고 위 파일을 써주세요

정확히는 SSDT or KEXT로 두가지중 하나를 사용하시면 되는데, kext로 패치하는 경우는 USBInjectAll.kext가 없어도 되고, SSDT로 패치하는경우는 필요하다고 합니다)


마무리로 SSDT-UIAC.aml, SSDT-USBX.amlEFI:/EFI/CLOVER/ACPI/patched에 복사하고 Clover ConfiguratorACPI에 가서 팻치 목록에서 EC0 to EC를 켜고 재부팅하면 적용됩니다 (SSDT-UIAC만 복사해도 포트 정보는 지정되지만, SSDT-USBX가 없으면 절전 진입시 바로 켜집니다) (EC0가 아닌 다른 이름일 수 도 있습니다)

전력 관리를 제대로 잡기 위해서는 BIOS에서 제공되는 기본 전력 관리 장치를 맥에서 호환되게 하거나, 맥에서 인식할 수 없는 이름으로 수정후 Fake로 추가해야 합니다

작업을 위해서는 IOReg나 DSDT를 뒤져서 PCI0/LPCB의 하위에 있는 PNP0C09값을 찾아서 들어있는 장치를 찾으시면 됩니다 (Intel HEDT경우 LPC0, AMD경우 SBRG이므로 만일 해당되는 경우 aml에서 해당 부분을 수정해주세요)

6세대 이상은 호환 시키는게 가능하므로 EC0 to EC처럼 이름을 변경해주면 되고, 구형 보드는 EC_같은걸로 바꾸어서 숨겨야 합니다 (3~5세대/6~세대로 구분하시면 됩니다)

또한 6세대 이상이거나, AMD인경우 SSDT-USBX를 추가해서 최대 전력값을 덮어써줘야 합니다 (구형경우는 EHC/XHC에 직접 값을 덮어써야 합니다)

셈플 파일 첨부하니 참조해주세요

이번에 작업에 사용중인 HP Prodesk 400 G2 mini의 실재 포트 정보를 입력한 상태입니다 (HS06포트는 내부의 M.2 WLan포트의 BT용 인터페이스입니다)

가끔 포트가 직접 컨트롤러에 안 물리고, 내장 허브를 통하는 경우 (목록에 PR이 올라오고, 포트명이 HS가 아닌 HP입니다) 이대로 작업하면 문제가 됩니다

를 참조하였습니다

여기서 필요한건 먼저 연결 구조를 파악하는겁니다

IORegistryExplorer를 실행해서 USB컨트롤러 (EH/XHC)를 찾습니다
이런식으로 컨트롤러-허브-포트의 구조로 물려있는걸 확인 가능합니다

먼저 기존대로 HackinTool로 내보내기를 해서 aml을 만듭니다

다음 이 파일을 수동으로 편집해서 허브를 정의해줘야 합니다

이 파일을 참조해주세요

Name (RMCF, Package (0x0A)의 하위에
"HUB1",
Package (0x04)
{
   "port-count",
   Buffer (0x04)
   {
      0x02, 0x00, 0x00, 0x00                        
   },

   "ports",
   Package (0x04)
   {
      "HP15",
      Package (0x04)
      {
         "portType",
         Zero,
         "port",
         Buffer (0x04)
         {
            0x01, 0x00, 0x00, 0x00                        
         }
      },
      "HP16",
      Package (0x04)
      {
         "portType",
         Zero,
         "port",
         Buffer (0x04)
         {
            0x02, 0x00, 0x00, 0x00                        
         }
      }
   }
},
이런식으로 추가하시면 됩니다

포트 정보는 기존의 자동 생성 결과물에서 가져오시면 됩니다

초록색으로 지정된 부분에는 포트의 개수를 적어주시고, 보라색으로 된건 01부터 순서대로 카운트됩니다

포트가 연결 안 된 허브는
"PR26",
Package (0x04)
{
   UsbConnector",
   Zero,
   "port",
   Buffer (0x04)
   {
      0x06, 0x00, 0x00, 0x00                        
   }
}
이런식으로 커넥터 Zero로 지정해서 추가하거나, 입력 안 해도 됩니다




추신 : FrameBuffer로 VGA 포트 살려볼려고 했지만, 제대로 안 되네요
추신2 : 몇일전에 10.14.3 -> 4로 업글하였는지라 앞으로 모든 작업은 10.14.4 기준입니다




핑백

덧글

댓글 입력 영역