X86 Open로그인

추천하기 twitter 로그인 facebook 로그인 google 로그인 카카오 로그인 네이버 로그인
2

3일간 참으로 억겹의 시간을 보내면서, 허리가 많이 아팠습니다만..
큰 힌트를 주신 여섯길타래 뉴해킨님께 큰 감사의 이야기 전해 드리고 싶습니다.

결국 충돌없이 잘 인식 시키면서 Z420을 아끼게 되는데요. 사실 오늘 새벽까지만해도 팔아버리고 싶었던게 함정입니다만 각설하고 본문으로 직행하겠습니다.

 

준비물 

1. FL1100칩셋의 USB 3.0 (국내에선 BZ1-Ultra USB 3.0 PCIe로 판매중입니다)
2. /System/Library/Extensions/IOUSBHostFamily.kext
3. EFI/Clover/patched/SSDT-1.aml
4. USBInjectAll.kext (최신 버전 필요)
5. IORegistryExplorer (없어도 되긴 하지만 있으면 더더욱 좋아요)
6. 웅녀를 능가할 인내심
 

 

** Z420의 슬롯 번호에 대해

CPU에서 가까운 슬롯이 1번이며 대부분 BCM94360CD를 여기에 장착 하시죠
그 다음 2번 슬롯은 GPU를 장착하시게 되는데... 대부분 이런 케이스가 발생하면 추가 PCIe는 바로 5번에 설치를 하도록 합니다. 행여나 슬롯이 부족하신 분께서는 GPU 쿨러를 1 slot으로 변경하시면 좀 나아지시리라 여깁니다.

자 그럼, AppleUSBXHCIFL1100을 인식 시키는 HP Z420의 SSDT-1.aml을 수정하도록 하겠습니다.

 

SSDT-1.aml에서 (\_SB.PCI0.NEP3.SLT5 에 USB 3.0 PCIe 카드가 장착되었으나,
IORE에서는. 운영체제에서 불러오는 변수인 XHC1과는 거리가 먼 SLT5로 표시됩니다. 이것을 XHC1으로 Fake 시켜 버리겠습니다.

 

가. SSDT-1.aml

/*
 * Intel ACPI Component Architecture
 * AML Disassembler version 20100331
 *
 * Disassembly of iASL2X5ZTg.aml, Sun Oct 16 16:57:15 2016
 *
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x00000615 (1557)
 *     Revision         0x01
 *     Checksum         0x0A
 *     OEM ID           "APPLE "
 *     OEM Table ID     "Devicein"
 *     OEM Revision     0x00015601 (87553)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20100331 (537920305)
 */
DefinitionBlock ("iASL2X5ZTg.aml", "SSDT", 1, "APPLE ", "Devicein", 0x00015601)
{
    External (\_SB_.PCI0, DeviceObj)
    External (\_SB_.PCI0.NPE2, DeviceObj)
    External (\_SB_.PCI0.NPE3, DeviceObj). /* 시스템 버스 NPE3를 DSDT.aml에서 참조 합니다 */
    External (\_SB_.PCI0.NPE2.SLT2, DeviceObj)
    External (\_SB_.PCI0.NPE3.SLT5, DeviceObj) /* 시스템 버스 SLT5를 DSDT.aml에서 참조 합니다 */

    Method (XOSI, 1, NotSerialized)
    {
        Name (WINV, Package (0x06)
        {
            "Windows", 
            "Windows 2001", 
            "Windows 2001 SP2", 
            "Windows 2006", 
            "Windows 2006 SP1", 
            "Windows 2009"
        })
        Return (LNotEqual (Match (WINV, MEQ, Arg0, MTR, Zero, Zero), 
            Ones))
    }

    Scope (\_SB.PCI0)
    {
        Device (HDEF)
        {
            Name (_ADR, 0x001B0000)
            Name (_PRW, Package (0x02)
            {
                0x08, 
                0x04
            })
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x02)
                {
                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }
    }

    Scope (\_SB.PCI0.NPE3.SLT5)
    {
        Name (_STA, Zero)/* NPE3.SLT5의 DSDT내용을 삭제 시킵니다 */
    }

    Scope (\_SB.PCI0.NPE3) 
    {
        Device (XHC1) /* NPE3.XHC1 장치를 새롭게 만들어 _DSM구문을 로딩 합니다 */
        {
            Name (_ADR, Zero)
            Name (_SUN, 0x05)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x18)
                {
                    "device-id", 
                    Buffer (0x04)
                    {
                        0x00, 0x11, 0x00, 0x00
                    }, 

                    "IOName", 
                    Buffer (0x0D)
                    {
                        "pci1b73,1100"
                    }, 

                    "name", 
                    Buffer (0x0D)
                    {
                        "pci1b73,1100"
                    }, 

                    "compatible", 
                    Buffer (0x0D)
                    {
                        "pci1b73,1100"
                    }, 

                    "built-in", 
                    Buffer (One)
                    {
                        0x00
                    }, 

                    "device_type", 
                    Buffer (0x10)
                    {
                        "XHCI Controller"
                    }, 

                    "AAPL,clock-id", 
                    Buffer (One)
                    {
                        0x00
                    }, 

                    "AAPL,current-available", 
                    0x0834, 
                    "AAPL,current-extra", 
                    0x0898, 
                    "AAPL,current-extra-in-sleep", 
                    0x0640, 
                    "AAPL,max-port-current-in-sleep", 
                    0x0834, 
                    "AAPL,device-internal", 
                    Zero
                })
            }
        }
    }

    Scope (\_SB.PCI0.NPE2.SLT2)
    {
        Name (_STA, Zero)
    }

    Scope (\_SB.PCI0.NPE2)
    {
        Device (GFX1)
        {
            Name (_ADR, Zero)
            Name (_SUN, 0x02)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x0A)
                {
                    "@0,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@1,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@2,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@3,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }

        Device (HDAU)
        {
            Name (_ADR, One)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x02)
                {
                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }
    }

    Device (UIAC)
    {
        Name (_HID, "UIA00000")
        Name (RMCF, Package (0x04)
        {
            "EH01", 
            Package (0x04)
            {
                "port-count", 
                Buffer (0x04)
                {
                    0x08, 0x00, 0x00, 0x00
                }, 

                "ports", 
                Package (0x10)
                {
                    "PR11", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        0xFF, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR12", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x02, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR13", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x03, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR14", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x04, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR15", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x05, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR16", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x06, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR17", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x07, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR18", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x08, 0x00, 0x00, 0x00
                        }
                    }
                }
            }, 

            "EH02", 
            Package (0x04)
            {
                "port-count", 
                Buffer (0x04)
                {
                    0x06, 0x00, 0x00, 0x00
                }, 

                "ports", 
                Package (0x0C)
                {
                    "PR21", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        0xFF, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR22", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x02, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR23", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x03, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR24", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x04, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR25", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x05, 0x00, 0x00, 0x00
                        }
                    }, 

                    "PR26", 
                    Package (0x04)
                    {
                        "UsbConnector", 
                        Zero, 
                        "port", 
                        Buffer (0x04)
                        {
                            0x06, 0x00, 0x00, 0x00
                        }
                    }
                }
            }
        })
    }
}

위 내용처럼 SSDT-1.aml을 작성하셨다면, /EFI/Clover/patched에 저장하시면 됩니다.

 

나. AppleUSBXHCIPCI.kext 수정

/System/Library/Extensions/IOUSBFamily.kext를 바탕화면에 복사한 다음,
패키지 내용 보기를 눌러서 다음의 경로로 이동합니다.

Contents/Plugins/AppleUSBXHCIPCI.kext/Info.plist

PlistEditor를 이용해 아래의 스샷처럼 수정을 하면 됩니다.

ScreenCapture 3.jpg

위 스샷은 타 모델은 모두 삭제하고 MacPro6,1-XHC1만 남겨 놓았습니다. 혹시라도 불안하신 분께서는
MacPro6,1-XHC1만 수정하세요... 

수정이 완료되면. KCPM Utility Pro를 이용해 S/L/E에 복사 하시고, 권한 복구를 해주세요. : )

* HS01~HS04번 포트는 삭제 합니다. 그래야 BCM94360CD와 포트 충돌이 일어나지 않습니다.
* 포트 충돌이 일어나는 증상으로는 USB3.0도 데이터 읽기 쓰기가 안되고 와이파이 모듈이 다운됩니다.

 

다. USBInjectAll.kext 수정

ScreenCapture 4.jpg

USBInjectAll.kext/Contents/Info.plist를 PlistEditor로 열은다음 위 스샷처럼 수정해 주세요.
- 위 스샷도 HP Z420 기준으로 정리를 했습니다. 타기종 유저분께는 참으로 죄송합니다만... 이와 비슷하게 작업 하시면 됩니다.

IOKitPersonalities/ConfigurationData/ConfigurationXHC1을 추가하고 

-----------------------------------------------------------------------------
- XHC1 : Dictionary
        ㄴ Port Count : Data :
06000000 (스샷은 오타입니다)
        ㄴ Port : Dictionary 
                ㄴ SSP1 : Dictionary
                        ㄴ UsbConnector : Number : 0
                        ㄴ port : Data : 05000000
                ㄴ SSP2 : Dictionary
                        ㄴ UsbConnector : Number : 0
                        ㄴ port : Data : 06000000       
                ㄴ SSP3 : Dictionary
                        ㄴ UsbConnector : Number : 0
                        ㄴ port : Data : 01000000
                ㄴ SSP4 : Dictionary
                        ㄴ UsbConnector : Number : 0
                        ㄴ port : Data : 02000000

-----------------------------------------------------------------------------

ScreenCapture 5.jpg

그리고  하단의 MacPro6,1-XHCMacPro6,1-XHC1으로 변경합니다. (XHC to XHC1)

* IOnameMatch : 1b73_1100
* IOPCIPrimaryMatch : 0x11001b73
* kConfigurationName : XHC1


으로 수정한 다음 저장하고, USBInjectAll.kext 파일을 /EFI/Clover/kexts/10.12에 복사해 줍니다.

 

ScreenCapture 0.jpg

IORegistryExplorer를 이용해 확인하면, NEP3.XHC1으로 장치가 등록된 것을 확인할 수 있습니다. 아쉽게도 SSP3/SSP4의 포트는 활성화 되지 않지만, 차차 방법이 생길거라고 예상합니다. 이렇게 된 케이스라면 BZ1-Ultra의 내장 19핀 USB 3.0은 동작하지 않고  PCIe 카드 슬롯의 USB3.0 포트만 동작하는거라 여기시면 됩니다.


혹시라도 전면 USB 3.0활성화가 꼭 되야 한다면 5.25인치 베이 타입 USB 3.0확장을 노리시면 급한 불은 꺼지겠고요. 후면에서 USB 3.0 케이블을 연장해서 오면 되지 않을까 싶습니다.

 

ScreenCapture 1.jpg

시스템 정보에서 USB3.0버스에 장착된 동기 속도가 최대  5Gbps인지 확인 합니다.

 

ScreenCapture 2.jpg

속도 테스트를 통해 확인하는 이상적인 결과는 UASP를 지원하는 외장하드 케이스에 SSD타입입니다. : )
물론 USB3.0 메모리 스틱도 나쁘지 않은 결과를 줄 것으로 예상합니다.

 

작성하고나면 무쟈게 쉬워 보이는것이지만... FL1100은 OOB 즉 Kext없이 잘 돌아간다는 말만 있을 뿐..
이를 다양한 환경에서 적용하는 방법이 없더라고요.. 그래서 7가지 정도의 조합을 통해서 테스트 하다가 결국 낚여 올라왔습니다!!!

 

3일 동안 대장정을 통해서 마지막 안정화까지 끝냈으니 이제는 생업에 종사할 그 때인 것 같습니다!!!
HP Z420을 사용하시는 모든 분께서 보다 쉽게 안정화를 마치셨으면 합니다~!

 

 

 

 

good poor

킹보리 Mactopia님
2명이 이글을 호평하셨습니다. 0명이 불평하셨습니다.

★ 글쓴이에게 고마우시면 커피한잔 후원(클릭) ★ 추천 정보가 입력되지 않았습니다.
twitter 공유 facebook 공유 googleplus 공유 카카오스토리 공유 네이버라인으로 공유

글쓴이의 서명이 비어 있습니다.

★ 글쓴이에게 고마우시면 커피한잔 후원(클릭) ★ 추천 정보가 입력되지 않았습니다.
  • Profile
    2016/10/16
    0 0

    6. 웅녀를 능가할 인내심

    약간 19금 냄새가 나지만  ㅎㅎㅎㅎ

    훌륭한 후기입니다.

    HP Z420 쓰신분들은 특히 도움이 되겠습

    니다.

  • Profile
    2016/10/16
    0 0
    아이뱅크 : 6. 웅녀를 능가할 인내심 약간 19금 냄새가 나지만  ... 에 달린 대댓글입니다.

    앗!!! 웅녀가.. 옹녀로 보일 수도 있겠네요? 하하하핫!!!

    정말.. ㅠㅠ 3일동안 USB 3.0을 새로 구매해놓고는 인식 시키느라고 진땀 뻘뻘 흘리면서 눈에 땀도 차보고 그랬습니다 ㅠㅠ 

     

    근데 정말 인식 시키기전엔 이게 마지막이다... 이랬는데.. 인식 시켜놓고 나니까, 또 뭐할게 있나 찾아보고 있는 제 자신을 돌이켜 봅니다 ㅠㅠ

  • Profile
    2016/10/17
    0 0
    안될 때 팔아버리고 싶은 마음은 같은가 봅니다. 
    삽질하다보면 오기가 생겨서......
    생업으로의 복귀가 쉽지 않았었습니다. 
    지금은 설치/사용으로 만족하고 있습니다. 
  • Profile
    2016/10/17
    0 0
    날새날새 : 안될 때 팔아버리고 싶은 마음은 같은가 봅니다. 삽질... 에 달린 대댓글입니다.

    그러게요 ㅠ ㅠ 시에라의 롤백되는 캐시 문제만 어서 어서 안정화 되었으면 좋겠습니다 ㅠㅠ

일반로그인 twitter 로그인 facebook 로그인 google 로그인 카카오 로그인 네이버 로그인
서버에 요청 중입니다. 잠시만 기다려 주십시오...