시스템 사양 선택 | 2번 |
---|
안녕하세요.
새 노트북에 드디어 해킨을 성공했습니다.
EFI 파일은 제 개인 깃허브에 올렸습니다.
https://github.com/mswgen/LG-Ultra-PC-15UD50N-GX56K-Hackintosh
가이드는 shl628 shl628 1371073 님 글처럼 자세히 작성해보려 합니다. 물론 내용은 훨씬 짧긴 합니다만... 당연히 shl님의 그 컬러풀하게 글 쓰는 건 뺐고요. 근데 왜 shl님은 글을 컬러풀하게 쓰는걸까요...
1. EFI 제작, 설치
Dortania 가이드를 기반으로 EFI를 만들었습니다.
https://dortania.github.io/OpenCore-Install-Guide
또한 USBToolBox를 사용하여 Windows에서 USB 매핑을 진행했습니다.
노트북에 장착된 삼성 970 EVO Plus(Elpis 컨트롤러)의 펌웨어를 업데이트하기 위해 Samsung Magician을 설치했지만, 이미 최신 버전이었습니다.
Elpis 컨트롤러가 장착된 970 EVO Plus는 문제가 없는 것 같습니다.
그리고 부팅을 했는데 HID: Legacy Shim 2 부근에서 멈췄습니다.
그래서 config.plist-Booter-Quirks에서
DevirtualizeMmio: True -> Flase
EnableWriteUnprotector: Falce -> True
ProtectUefiServices: True -> False
RebuildAppleMemoryMap: True -> False
SetupVirtualMap: False -> True
SyncRuntimePermissions: True -> False
이렇게 변경하고 부팅하니 그 부분은 지나갔지만, 애플 로고가 나와야 할 때 화면이 꺼졌습니다.
그래서 boot-args에 -igfxblr를 넣고 재부팅하니 설치 화면이 정상적으로 떴습니다.
그리고 설치를 완료했습니다.
이제...
안정화가 남았습니다...
2. 안정화
설치 후 각종 장치가 제대로 작동하도록 하는 단계입니다. 노트북은 데스크톱보다 안정화할 내용이 더 많습니다.
안정화에 필요한 프로그램입니다.
1. HackinTool: https://github.com/headkaze/hackintool/releases
2. IORegistryExplorer: https://developer.apple.com/download/all/ 사이트(Apple ID 로그인 필요)에서 Additional tools for Xcode (최신버전) 을 다운받고 DMG를 마운트하면 안에 있습니다.
3. MaciASL마샤셀: https://github.com/acidanthera/maciasl/releases
4. 그리고 Plist Editor (ProperTree, Xcode, PlistEdit Pro 등)이 필요합니다.
OpenCore Configurator는 사용하지 않았습니다.
안정화 중에 DSDT와 SSDT가 종종 나옵니다.
DSDT와 SSDT는 컴퓨터의 모든 장치 정보를 담은 테이블입니다.
자세한 내용은 아래 글을 참고해주세요.
SSDT 목록
순서 | SSDT 이름 | ACPI Rename 필요 여부 | ACPI 패치 타입 | OEM DSDT Override 여부 |
---|---|---|---|---|
1 | SSDT-PLUG | X | Injection | X |
2 | SSDT-EC-USBX | X | Injection | X |
3 | SSDT-AWAC | X | Preset Variable Method | O |
4 | SSDT-PNLF | X | Injection | X |
5 | SSDT-BATT | O | Hot Patch & Override | O |
6 | SSDT-OSYS | X | Assign & Injection | O |
7 | SSDT-GPIO | O | Hot Patch & Override | O |
8 | SSDT-HPET | O | Preset Variable Method | O |
9 | SSDT-SBUS-MCHC | X | Injection | X |
목차
1. Intel UHD Graphics 620 내장 그래픽 QE/CI
2. Intel UHD Graphics 620 내장 그래픽 AGPM 인젝션
3. Realtek ALC255 내장 사운드 출력 및 내장 마이크 입력
4. Speed Step 과 X86PlatformPlugin Kext 로드 ( Speed Shift 활성화 및 XCPM 방식 )
5. 배터리 잔량 표시 ( SSDT 를 사용하여 EmbeddedControl Region 의 배터리 관련 변수 8 Bit 세분화 )
6. Synaptics I2C 방식의 HID 규격 트랙패드 및 제스처 활성화
7. Darwin OS Check Fix ( SSDT 를 사용하여 Windows 10 의 OSYS 값으로 Assign )
8. 노트북 디스플레이 화면 밝기 조절 ( SSDT 를 사용하여 PNLF Device 인젝션 )
9. HPET IRQ 충돌 패치 ( SSDT 를 사용하여 _CRS Method Override )
10. MCHC & SBUS Device 활성화 ( SSDT 를 사용하여 인젝션 )
1. Intel UHD Graphics 620 내장 그래픽 QE/CI
먼저 내장 그래픽의 PCI 경로는 PciRoot(0x0)/Pci(0x2,0x0) 입니다.
Intel 10th Gen Comet Lake-U는 Intel UHD Graphics 620을 사용합니다.
하지만 이 UHD 620은 macOS와 호환되지 않습니다.
그러므로 device-id를 추가해야 합니다.
또한 기본적으로 DVMT Pre-Allocated가 32MB인데, 이 설정이 숨겨져 있습니다.
그러므로 framebuffer-stolenmem과 framebuffer-fbmem을 패치해야 합니다.
config.plist-DeviceProperties 아래에 PciRoot(0x0)/Pci(0x2,0x0) 이라는 Dictionary를 만들고 그 안에 다음 내용을 추가해주세요:
AAPL,ig-platform-id | Data | 00009B3E device-id | Data | 9B3E0000 framebuffer-patch-enable | Data | 01000000 framebuffer-stolenmem | Data | 00003001 framebuffer-fbmem | Data | 000090000
자세한 내용은 아래 글을 참고해주세요.
그리고 재부팅하면 메뉴 바와 Dock이 반투명해지면서 VRAM도 1.5GB가 잡힙니다.
참고로 처음에는 Intel HD Graphics CFR CRB 이런식으로 이상하게 떠서
config.plist-DeviceProperties-PciRoot(0x0)/Pci(0x2,0x0) 아래에 다음 속성을 추가해서 이름을 Intel UHD Graphics 620으로 바꿨습니다.
model | string | Intel UHD Graphics 620
VRAM이 1.5GB가 잡히고 Metal이 작동하는 것을 알 수 있습니다.
UHD 620은 VRAM을 2GB로 잡는 경우가 많습니다.
그러는 이유는 모르겠지만, 저는 문제가 없어서 VRAM 1.5GB만 잡았습니다.
2. Intel UHD Graphics 620 AGPM 인젝션
SMBIOS를 MacBookPro16,3으로 설정하니 AGPM은 자동으로 잡혔습니다.
3. Realtek ALC255 내장 사운드 출력 및 내장 마이크 입력
LG Ultra PC 15UD50N-GX56K는 ALC255 코덱을 사용합니다.
HackinTool을 열고 Sound 탭에 가면 다음과 같이 ALC255를 알 수 있습니다.
https://github.com/acidanthera/applealc/wiki/supported-codecs
이 사이트에 보면 ALC255의 레이아웃 id는 3, 11, 12, 13, 15, 17, 18, 20, 21, 27, 28, 29, 30, 31, 66, 71, 82, 86, 96, 99, 100입니다.
하지만 특이하게도 저는 모든 레이아웃 id에서 사운드 출력이 잡히지 않았지만, 일부 레이아웃 id에서는 마이크 입력이 잡혔습니다.
더 특이한 건 배터리를 잡은 후에 레이아웃 id 3으로 입/출력 모두 잡혔습니다.
레이아웃 id 테스트의 경우 config.plist-NVRAM-Add 아래에 보면 7C436110-AB2A-4BBB-A880-FE41995C9F82가 있습니다.
그 아래에 boot-args가 있는데, boot-args는 -v debug=0x100 keepsyms=1 -igfxblr 이런 식입니다.
맨 뒤에 한 칸 띄어쓰기를 하고
alcid=3
을 추가합니다.
그리고 재부팅해서 작동하는 지 확인하고, 작동하지 않으면 저 부분의 3을 다음 레이아웃 id인 11로 바꾸고 재부팅하고 확인하고 ...
이렇게 합니다.
일단 저는 배터리 패치 후에 레이아웃 id 3이 잡혔습니다.
조금 더 리얼맥에 가깝게 하기 위해 alcid=3 을 지우고
HackinTool을 열어서 PCIe 탭으로 간 다음,
IOReg name이 HDEF로 시작하는 디바이스의 Device path를 복사합니다.
저는 PciRoot(0x0)/Pci(0x1F,0x3) 이었습니다.
이제 config.plist-DeviceProperties-Add 아래에 복사한 값을 이름으로 하는 Dictionary를 만들고 그 아래에 다음 값을 추가합니다.
layout-id | Data | 03000000
이때 03000000은 자신의 레이아웃 id를
1. 16진수로 바꾸고 (저는 3 -> 3)
2. 앞에 0을 추가해서 8자리를 만들고 (저는 3 -> 00000003)
3. 그걸 2자리씩 쪼개고 (저는 00000003 -> 00 00 00 03)
4. 쪼개서 나온 4개의 순서를 바꾸고 (저는 00 00 00 03 -> 03 00 00 00)
5. 쪼갠 걸 합치면 됩니다. (저는 03 00 00 00 -> 03000000)
그리고 재부팅하면 됩니다.
마이크가 잘 잡힙니다.
IOReg에도 HDEF 디바이스 아래에 많은 드라이버가 인젝션되어 있습니다.
4. Speed Step 과 X86PlatformPlugin Kext 로드 ( Speed Shift 활성화 및 XCPM 방식 )
LG Ultra PC 15UD50N - GX56K 모델의 노트북은
Intel 10th Gen Comet Lake Core i5 - 10210U CPU 가 장착되어 있습니다.
macOS에서 Intel 4th Haswell 이상의 CPU 는 Plugin Type 속성을 인젝션하면 XCPM 방식으로 Speed Step 안정화가 가능합니다.
OpenCore 에서는 SSDT-PLUG 를 사용하여 _DSM Method 로 Plugin Type 속성을 인젝션하는 방식을 사용합니다.
OpenCore 에서 제공하는 ACPI Samples 폴더에 SSDT-PLUG.dsl 이 포함되어 있습니다.
MaciASL 을 사용하여 일부 내용을 수정한 후에 .aml 로 컴파일하고 OpenCore 의 ACPI 폴더에 넣고 Config.plist 에서 정의해주면 됩니다.
먼저 OEM DSDT가 필요합니다.
config.plist-Misc-Debug-SysReport를 True로 설정하고 재부팅한 다음 EFI 파티션에는 EFI 폴더 말고도 SysReport 폴더가 있습니다.
이 폴더를 데스크톱이나 사용자 폴더, 또는 별도의 하드 디스크 등의 적당한 곳으로 옮기고 원래 EFI 파티션에 있는 SysReport는 삭제합니다.
그리고 config.plist-Misc-Debug-SysReport를 다시 False로 바꿉니다.
SysReport 폴더에 보면 ACPI 폴더가 있습니다.
그 안에 DSDT.aml이 OEM DSDT입니다.
이 파일을 MaciASL로 열면 자동으로 Disassemble 됩니다.
여기서 Processor를 찾습니다.
command + F를 사용하여 쉽게 찾을 수 있습니다.
저의 경우는 CPU가 \_SB.PR00부터 \_SB.PR19까지 있습니다. 하지만 실제로는 PR07까지(총 8스레드)만 있고, PR08부터는 실제로 없는 CPU입니다.
이때 \_SB.PR00을 기억합니다.
그 다음, OpenCore를 다운받았을 때 Docs/AcpiSamples/Binaries 폴더에 보면 SSDT-PLUG.aml이 있습니다.
이 파일을 EFI 파티션의 /EFI/OC/ACPI에 복사합니다.
그리고 MaciASL로 열면 알아서 Disassemble 됩니다.
보면 이런식으로 엄청 노가다가 되어 있습니다.
이 중, 저는 CPU가 \_SB.PR00에 있기 때문에
External Declaration에서
External (_SB_.PR00, ProcessorObj)
만 남기고 지웠습니다.
그리고 그 밑에 If (CondRefOf (\_SB.CPU0)) 이런 것이 엄청 많습니다.
이중 \_SB.PR00을 제외하고, 모두 지웁니다.
이때 PMPM Method를 삭제하면 안 됩니다.
저는 아래와 같은 SSDT가 만들어졌습니다.
DefinitionBlock ("", "SSDT", 2, "ACDT", "CpuPlug", 0x00003000) { External (_SB_.PR00, ProcessorObj) Method (PMPM, 4, NotSerialized) { If ((Arg2 == Zero)) { Return (Buffer (One) { 0x03 }) } Return (Package (0x02) { "plugin-type", One }) } If (CondRefOf (\_SB.PR00)) { If ((ObjectType (\_SB.PR00) == 0x0C)) { Scope (\_SB.PR00) { If (_OSI ("Darwin")) { Method (_DSM, 4, NotSerialized) { Return (PMPM (Arg0, Arg1, Arg2, Arg3)) } } } } } }
그리고 command S로 저장하면 알아서 Assemble 됩니다,
재부팅하면
아래와 같이 PR00 아래에 X86PlatformPlugin이 인젝션되었습니다.
5. 배터리 잔량 표시 ( SSDT 를 사용하여 EmbeddedControl Region 의 배터리 관련 변수 8 Bit 세분화 )
많은 경우 ECEnabler.kext를 사용하면 배터리는 자동으로 잡힙니다.
하지만 저는 ECEnabler.kext를 사용해도 잡히지 않았습니다.
그래서 처음에 SSDT를 만들었습니다.
먼저 DSDT를 열고 EmbeddedControl을 찾습니다.
ERAM Field가 EmbeddedControl OperationRegion에 있습니다.
이제 ERAM을 검색합니다.
여기에 보이는 Field 하나만 ERAM인 걸 알 수 있습니다.
이제 ERAM 안에 있는 16비트 이상의 FieldUnitObj를 찾습니다.
저는
FSPD, 16
DSCP, 16
LACP, 16
DSVG, 16
BANA, 64
MCUR, 16
MBRM, 16
MBCV, 16
FN1R, 16
FN2R, 16
VERN, 32
이렇게 있습니다.
이제 MaciASL을 열고, DefinitionBlock부터 만듭니다.
DefinitionBlock ("", "SSDT", 2, "mswgen", "Battery", 0x00000000)
{
}
물론 mswgen은 다른 걸로 바꿔도 됩니다.
그리고 중괄호 안에
If (_OSI ("Darwin")) { Method (B1B2, 2, NotSerialized) { Return ((Arg0 | (Arg1 << 0x08))) } Method (B1B4, 4, NotSerialized) { Local0 = Arg3 Local0 = (Arg2 | (Local0 << 0x08)) Local0 = (Arg1 | (Local0 << 0x08)) Local0 = (Arg0 | (Local0 << 0x08)) Return (Local0) } }
이걸 넣습니다.
이것의 의미는
1. If (_OSI ("Darwin")) -> macOS로 부팅했을 때만 그 안에 있는 코드 실행 (macOS iOS iPadOS watchOS 등등 다 Darwin OS 기반임)
2. Method (B1B2, 2, NotSerialized) -> 이는 16비트를 8비트 2개로 쪼갰을 때 그걸 합쳐서 읽기 위한 Method입니다.
B1B4도 똑같이 32비트를 8비트 4개로 쪼갰을 때입니다.
그리고 그 밑에
Scope (\_SB.PCI0.LPCB.EC0) { If (_OSI ("Darwin")) { OperationRegion (XRAM, EmbeddedControl, Zero, 0xFF) Field (XRAM, ByteAcc, NoLock, Preserve) { Offset (0x5C), SPD0, 8, SPD1, 8, Offset (0x70), SCP0, 8, SCP1, 8, ACP0, 8, ACP1, 8, SVG0, 8, SVG1, 8, Offset (0x77), BANX, 64, Offset (0x83), CUR0, 8, CUR1, 8, BRM0, 8, BRM1, 8, BCV0, 8, BCV1, 8, Offset (0xCA), N1R0, 8, N1R1, 8, N2R0, 8, N2R1, 8, Offset (0xFA), ERN0, 8, ERN1, 8, ERN2, 8, ERN3, 8 } Method (WE1B, 2, NotSerialized) { OperationRegion (ERAM, EmbeddedControl, Arg0, One) Field (ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 } BYTE = Arg1 } Method (WECB, 3, Serialized) { Arg1 >>= 0x03 Name (TEMP, Buffer (Arg1){}) TEMP = Arg2 Arg1 += Arg0 Local0 = Zero While ((Arg0 < Arg1)) { WE1B (Arg0, DerefOf (TEMP [Local0])) Arg0++ Local0++ } } } }
이걸 넣습니다.
Scope (\_SB.PCI0.LPCB.EC0)은 \_SB.PCI0.LPCB.EC0 부분으로 들어간다는 것입니다. \_SB.PCI0.LPCB.EC0는 Embedded Controller의 경로입니다.
OperationRegion과 Field는 기존 OperationRegion을 덮어씁니다. 여기서 16비트 이상의 FieldUnitObj만 세분화하기 위해 Offset을 사용합니다.
Offset은 Byte (8Bit) 단위지만, FieldUnitObj는 Bit 단위라는 걸 주의하세요.
그리고 원래 ERAM과 다른 이름인 XRAM을 사용합니다.
세분화는 32Bit까지는 원래 이름의 첫번째 글자를 지우고 뒤에 0, 1, 2, 3, ...을 추가합니다.
FSPD, 16은 SPD0, 8과 SPD1, 8이 됩니다.
64Bit부터는 다른 방법을 사용합니다. 원래 이름에서 마지막 글자를 X로 바꾸거나 다른 방법으로 중복이 없도록 하면 됩니다. 저는 BANA, 64를 BANX, 64로 바꿨습니다.
WE1B, WECB는 64 Bit 이상의 FieldUnitObj를 쓰기 위한 Method입니다.
이제 EC0 Scope 밖에
위에서 찾은 FieldUnitObj를 사용하는 Method를 복사합니다.
이때 적절히 Scope를 해줘야 합니다.
그리고 Method 안의 내용 맨 위에
If (_OSI ("Darwin"))
넣은 다음 원래 Method 코드를 중괄호로 감쌉니다.
그리고 닫는 중괄호 뒤에
Else
{
Return (<바꾼 Method 이름> (Arg0, Arg1, Arg2, ...))
}
이런 식으로 합니다.
<바꾼 Method 이름> 은 원래 Method 이름 첫글자를 X로 바꾼 것을 쓰고,
Arg0, Arg1, ...의 경우 Arg 개수만큼 쓰면 됩니다.
Method (B1B4, 4, NotSerialized) 에서 4가 Arg 개수이므로, 이 경우 Arg0부터 Arg3까지 씁니다.
그리고 Method 안에서 세분화한 변수가 사용되는 건 모두 B1B2, B1B4 등을 사용합니다.
64비트 이상의 경우 조금 다릅니다.
저는 IVBI Method에서 BANA가 사용되었습니다.
Method (IVBI, 0, NotSerialized) { PBIF [One] = 0xFFFFFFFF PBIF [0x02] = 0xFFFFFFFF PBIF [0x04] = 0xFFFFFFFF PBIF [0x09] = "Bad" PBIF [0x0A] = "Bad" PBIF [0x0B] = "Bad" PBIF [0x0C] = "Bad" ^^PCI0.LPCB.EC0.ECWT (Zero, RefOf (^^PCI0.LPCB.EC0.BANA)) }
이때 ECWT를 보면
Method (ECWT, 2, Serialized) { Local0 = Acquire (ECMT, 0x03E8) If ((Local0 == Zero)) { If (ECOK) { Arg1 = Arg0 } Release (ECMT) } }
즉, 2번째 인수에 1번째 인수를 쓰는 것, 저는 BANA에 Zero를 쓰는 것입니다.
이를 WECB로 바꿉니다
WECB는 1번째 인수에 Offset, 2번째는 길이, 3번째는 쓸 값입니다.
저는 1번째의 경우 BANA의 Offset인 0x77, 2번째는 64비트를 16진수로 한 0x40, 3번째에 Zero를 씁니다.
이런 식으로 Method 불러오기도 끝나면 External Declaration을 만들어줍니다.
Compile을 누르면 엄청난 에러가 뜨는데, 그 에러를 하나씩 보면서 DefinitionBlock 중괄호 연 직후에
External (경로, UnknownObj)
씁니다.
경로는 _SB_.PCI0.LPCB.EC0_ 등입니다.
루트 경로인 \는 쓰지 않고, 중간에 3자리, 2자리 등 4자리 미만이 있으면 뒤에 _를 붙여서 4자리를 만듭니다. 예: EC0 -> EC0_, _SB -> _SB_
그리고 SSDT-BATT.aml로 저장하고 /EFI/OC/ACPI에 복사한 다음
config.plist-ACPI-Add에 추가합니다.
그리고 ACPI Rename이 필요합니다.
자세한 내용은 아래 글을 참고해주세요.
저는 WMAB to XMAB, WMBB to XMBB, UPBI to XPBI, UPBS to XPBS, IVBI to XVBI, WSAA to XSAA를 진행했습니다.
그리고 재부팅하면 배터리가 떠야 하는데 뜨지 않습니다.
그래서 저는 DSDT를 직접 수정해서 적용해보려 했는데, Assemble 하는 동안 에러가 났습니다.
보니까 OGNS OperationRegion 길이가 부족하다는 것입니다.
여기서 0x00001003이 OperationRegion 길이입니다.
그래서 저는 이걸 0x00001004로 늘리니까 에러가 없어졌습니다.
그리고 재부팅하니까 배터리가 잘 잡혔습니다.
그래서 왜 지금은 되는걸까 해서 보니까 DSDT를 적용시키지 않았을 때 부팅 중 ECOK 부분에서 ACPI 에러가 엄청 떴던 것 같은데,
DSDT 적용 후에 그 에러가 보이지 않았습니다.
또, ECOK는 OGNS Field에 있습니다.
그래서 혹시 하고 DSDT 비활성화, SSDT-BATT 다시 활성화 후 아래 ACPI Rename 적용하니까 배터리가 잘 됩니다.
그리고 VirtualSMC 플러그인 중 SMCBatteryManager.kext도 필요합니다.
하지만, 배터리 패치는 엄청 난관이었습니다.
2일동안 엄청난 삽질과 고생을 했고, 많은 도움을 주신 shl628 shl628 1371073 님께 다시 한 번 감사드립니다.
자세한 경과는 여기에 있습니다.
SSDT-BATT도 깃허브에 있지만, 여기에도 공유합니다.
6. Synaptics I2C 방식의 HID 규격 트랙패드 및 제스처 활성화
일단 트랙패드는 처음부터 제스처, 5점 터치 다 되긴 했습니다.
하지만 설정에 뜨지 않았습니다.
이 경우는 배터리 패치를 하지 않아서입니다.
배터리 패치를 하니까 설정에도 떴습니다.
하지만 더 나은 성능과 전력 소모를 위해 Polling 모드 대신 GPIO Interrupt 모드로 바꿨습니다.
자세한 내용은 다음 글을 참고해주세요.
참고로 이때
Intel 6th Gen Skylake-U, Intel 7th Gen Kaby Lake-U, Intel 8th Gen Kaby Lake Refresh-U는 Intel Sunrise Point-LP
Intel 8th Gen Coffee Lake-U, Intel 8th Gen Whiskey Lake-U, Intel 10th Gen Comet Lake-U는 Intel Cannon Lake-LP
Intel 8th Gen Coffee Lake-H, Intel 10th Gen Comet Lake-H는 Intel Cannon Lake-H
Intel 10th Gen Ice Lake는 Intel Ice Lake-LP입니다.
GenI2C 앱을 통해 자세한 정보를 확인할 수 있습니다.
원래는 깃허브에 있지만, 깃허브 레포가 삭제되어 여기에 올립니다.
앱을 열고 Agree를 누르면
이렇게 뜹니다. 원래는 Mode에 Polling이 있지만, 저는 GPIO Pin 작업을 끝내서 Interrupt (GPIO) 가 있습니다.
또한 Diagnosis 탭에서 Diagnosis를 누르고 조금 기다리면 아래와 같이 뜹니다.
저는 CPU 세대 지원을 제외하고 모두 정상이었습니다. 하지만 About 탭을 보면
2019년에 업데이트가 멈춰 있습니다. 저 중국어는 도대체 뭐지 씽쑝쌩쑝
Intel 10th Gen Comet Lake는 2020년에 나왔습니다. 그러므로 CPU 세대 지원이 정상이 나올 리가 없습니다. 즉 이는 모두 정상이라는 뜻입니다.
설정에도 잘 뜹니다.
5점 터치도 됩니다.
참고: FingerMgmt 앱 다운로드
여기서도 다시 한번 shl628 shl628 1371073 님 도움이 컸습니다. 정말 감사드립니다.
7. Darwin OS Check Fix ( SSDT 를 사용하여 Windows 10 의 OSYS 값으로 Assign )
안희 이 세상에 운영체제가 윈도우만 있나요??? 왜 리눅스나 기타 등등 윈도우 아닌 운영체제에서는 기능이 엄청 제한되냐고요!?!?!?!?!?!?!?
대부분의 컴퓨터는 OSYS 값을 통해서 운영체제에 따라 기능을 제한합니다.
하지만 macOS는 당연히 없습니다.
\_SB.PCI0의 _INI, 즉 초기화 Method에 보면
이런식으로 운영체제에 따라 OSYS를 설정합니다.
이 중 가장 높은 값인 0x07DF로 설정하기 위해, 실제로 없는 디바이스인 PCI1을 만듭니다.
그리고 macOS로 부팅했을 때만 보이도록 _STA를 이용합니다.
또한 PCI0처럼 _INI Method에서 OSYS를 강제로 0x07DF로 설정합니다.
DefinitionBlock ("", "SSDT", 2, "ACDT", "OSYS", 0x00000000) { External (OSYS, FieldUnitObj) Scope (\_SB) { Device (PCI1) { Name (_ADR, Zero) // _ADR: Address Method (_INI, 0, NotSerialized) // _INI: Initialize { If (CondRefOf (\OSYS)) { OSYS = 0x07DF } Method (_STA, 0, NotSerialized) // _STA: Status { If (_OSI ("Darwin")) { Return (0x0F) } Else { Return (Zero) } } } } }
8. 노트북 디스플레이 화면 밝기 조절 ( SSDT 를 사용하여 PNLF Device 인젝션 )
노트북 밝기 조절을 하려면 디스플레이가 일반 AppleDisplay가 아닌 AppleBacklightDisplay가 필요합니다.
다운받은 오픈코어에 보면 Docs/AcpiSamples/Binaries 안에 SSDT-PNLF가 있습니다. 이 파일을 적용하고 재부팅하면 됩니다.
IOReg에도 보면 AppleBacklightDisplay가 있는 것을 볼 수 있습니다.
9. HPET IRQ 충돌 패치 ( SSDT 를 사용하여 _CRS Method Override )
일부 디바이스에서는 HPET 디바이스의 IRQ가 충돌하여 사운드가 작동하지 않는 경우가 있습니다.
저는 SSDTime으로 만들었습니다.
https://github.com/corpnewt/ssdttime
접속한 다음 Code-Download Zip으로 받은 다음 SSDTTime.command를 실행합니다.
먼저 Dump DSDT를 선택하고, SysReport 안에 있는 DSDT.aml을 터미널에 드래그하거나 파일 경로를 입력한 다음, 엔터를 치고
조금 있으면 FixHPET가 보입니다.
FixHPET를 선택한 다음, C를 입력하고 엔터친 다음, 조금 기다리면 SSDT-HPET가 만들어집니다.
SSDTTime 디렉토리 안의 Results 폴더에 파일 4개가 있습니다.
이 중, SSDT-HPET.aml을 적용한 다음, Patches-OC.plist를 열면, ACPI-Patch에 몇개가 있습니다.
각각을 하나씩 복사한 다음 config.plist-ACPI-Patch 아래에 붙여넣으면 됩니다.
10. MCHC & SBUS Device 활성화 ( SSDT 를 사용하여 인젝션 )
필수는 아닙니다.
다운받은 OpenCore의 Docs/AcpiSamples/Binaries 안에 있는 SSDT-SBUS-MCHC.aml을 적용하고 재부팅합니다.
그 외에도, 여러 가지 안정화가 있습니다.
Fn 키 밝기 조절은 BrightnessKeys.kext를 적용하니 바로 작동하였습니다.
잠자기는 기본적으로 작동하였습니다.
Wi-Fi는 Airportitlwm을 사용, 블루투스는 IntelBluetoothFirmware을 사용했습니다.
iCloud, App Store는 기본 작동하였으나, iMessage, FaceTime은 작동하지 않습니다.
훨씬 빠른 부팅 속도와 USB 슬롯 1개를 위해 EFI를 USB에서 SSD로 옮겼습니다.
안정화 후 디버그 로그가 표시되지 않도록 하고, GUI 부트 픽커를 사용하도록 했습니다. (이는 단순히 코스메틱 작업입니다.)
노트북 덮개를 덮어서 잠자기, 덮개를 열어서 깨어나기는 기본 작동하였습니다.
HackinTool의 PCIe 탭에서 PCIe 장치를 config.plist-DeviceProperties-Add에 넣었습니다. (이는 단순히 코스메틱 작업입니다.)
3. 마무리
처음으로 노트북 해킨을 해봤습니다.
난관이 몇 개 있었지만, shl628 shl628 1371073 님 도움 덕에 모두 해결했습니다.
현재 iMessage, FaceTime 제외하고 모두 작동합니다.
곧 몬테레이가 나오는데, 아마 될 것으로 보입니다. (몇 가지 변경할 점이 있긴 합니다.)
어쩌다보니 글이 너무 산으로 갔네요......
이상으로 생 초짜가 쓴 노트북 해킨 성공담이었습니다.
감사합니다.
문제는...
글이 너무 산으로 갔네요......
그런데 진짜 특이한 게
shl님은 왜 항상 글을 그렇게 컬러풀하게 쓰는 걸까요?
그거야 저도 모르죠 ㅋㅋ
그런데 읽기에는 예쁘기도 하고 줄마다 색이 달라서 가독성이 더 있다고 느껴져서
가끔 따라하고 있습니다 ㅋㅋ
저는 데스크탑으로 수업 들으면서 앞에 노트북 열어놓고 미뤄뒀던 GPIO Pinning SSDT 제작을...ㅋㅋㅋ
엌
배터리는 ssdt로 하셨나요?
그런데...
안정화 밀린 게
뭐뭐 있어요?
그런데...
트랙패드가 엄청 편하네요.
그런데... 벌써 3번째
TN패널 괜찮나요?
배터리는 해킨 성공했을 때쯤 마침 ECEnabler가 나와줘서 한 번도 SSDT패치 해본 경험이 없습니다 ㅋㅋ
안정화 밀린건 해킨 성공 후 5개월이 지난만큼 거의 없습니다. 지금 잠자기에서 일어난 후 정말 간헐적으로
오디오가 나가버리는 현상이 있는데, WakeConfigData 값을 리눅스 가서 Codec Dump하고 알아내서 바꾸고
AppleAlc에 PR 넣고... 귀찮아서 안하고 있으며 앞으로 할 예정도 없습니다
그 외에는.. 트랙패드 귀찮아서 Polling으로 놔뒀는데 지금 Interrupt로 바꾸려 노력 중이고,
Lidwake도 고쳤고 아이서비스도 되고, 제가 쓰는건 전부 다 했습니다.
아, 하나 안되는거 있네요. 잠자기 전에는 Type-C DP Alt출력이 안나옵니다.
이건 찾아도 전혀 안나오길래 조금 삽질하다가 포기 했습니다 ㅋㅋ
그리고.. TN패널 정신 나갈 것 같습니다. 상하 시야각이 심각해서 각도가 조금만 바뀌면 화면이 안보이고..
지금 보고있는 각도에서조차 약간 비네팅 현상처럼 가장자리가 아주 약간 더 어둡습니다.
돈 조금 더 주더라도 다시는 TN패널 안살 것 같네요 ㅋㅋㅋㅋㅋ
엌
삼성 놑북이 엄청 싸서 뭐지 했는데 보니까...
TN이고...
보니까 해킨 난관이 되게 많네요...
그래도 ECEnabler는 되고...
저는 ECEnabler가 안됐는데
어쩌면 그 OGNS 길이 문제일수도 있어요
저는 IPS여서 되게 좋아요. 굳이 찾자면 한가지 흠은 글레어 패널이어서 사진찍을 때 얼굴 안나오게 하려면 힘들다는...
그리고 트랙패드 제스처 중에 사파리에서 그 껍질 벗겨내기 (???)가 되게 편하더라고요.
휴 KT인터넷인데 나갔다가 이제야 들어오네요 ㅠㅠ
그런데 저만 가끔 스와이프로 뒤로가기만 안되나요? 됐다 안됐다..
사파리 15부터 갑자기 그러더군요;;
엌
저도 지금 줌 수업 시간인데 놀고 있어요. 하라는 공부는 안하고
그런데 저도 껍질 벗기기 가끔 안되긴 해요
계정에 들어있던 기기들 전부 제거하고 애플아이디 5개월 가량 쓰니까 틀린 시리얼로 해도 활성화가 되더군요..ㅋㅋ
ROM값 제대로 맞추고 하니까 저는 그냥 됐습니다..ㅋㅋ
그리고 하나 팁이
설정-접근성-포인터 제어-트랙패드 옵션에서 드래그 사용에 체크하고 오른쪽 옵션에서 세 손가락 드래그로 설정하면
세 손가락을 이용해서 드래그가 돼요.
트랙패드 누르고 드래그하는 것보다 훨씬 좋아요.
(이때 기존의 세 손가락 제스처는 네 손가락으로 바뀜)
저도 세손가락 제스쳐 사용하고 있습니다 ㅋㅋ
가끔 드래그 이어서 하려는데 손가락 떼자마자 끊겨버려서 불편할 때가 있는데, 그래도 이게 더 편하더군요
원래 저는 두번 탭해서 드래그 쓰고 있었는데, 세손가락이 훨씬 빨라서 이제 이것만 쓰게 되더군요 ㅋㅋ
손 떼고 바로 손 다시 놓으면 이어서 움직여요.
손떼고 몇초 있어야 드래그가 끊기더라고요.
그런데 왜 이게 접근성에 있는걸까요...
그것도 어느정도 움직인 후에 떼야 유지되더군요
짧게 하고 떼면 바로 드래그가 끊기더라고요 ㅋㅋ
트랙패드 설정에 있어야 더 적절할 것 같은데.. 음..
다시 한 번 정말 감사드립니다.
그리고 15u480-ka56k 바이오스가 피닉스 보안중심 바이오스 맞죠
lg 노트북 중 피닉스 바이오스 있는건 바이오스 진입후
command option f7 누르면 히든메뉴 떠요.
안되면
shift comnand option f7
저는 insyde 바이오스여서......
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
macOS Sequoia 15.0.1 24A348 정식버젼 고스트 이미지 OC 1.0.2 ft: 전체공개 +28 | 790 | 24.10.1121:10 | 좌절금지 |
오픈코어 1.0.2 +22 | 544 | 24.10.0900:22 | 줌바이퍼 |
[중급편] 노트북 해킨 +16 | 1365 | 24.07.1219:19 | Stultus |
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +17 | 560 | 24.09.1917:09 | 좌절금지 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +31 | 889 | 24.09.1723:58 | 좌절금지 |
[초급편] 문제 스스로 해결하기 +20 | 3975 | 24.03.2920:07 | Stultus |
[입문편] 첫 해킨 길라잡이 +40 | 5033 | 24.01.1218:54 | Stultus |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +67 | 5.1만 | 23.01.0913:39 | shl628 |
19 | 24.10.2319:04 | 사노라맨 | |
460 | 24.10.1412:27 | shl628 | |
595 | 24.10.1316:00 | 수박 | |
323 | 24.10.1222:56 | Stultus | |
790 | 24.10.1121:10 | 좌절금지 | |
405 | 24.10.1115:53 | 수박 | |
544 | 24.10.0900:22 | 줌바이퍼 | |
1365 | 24.07.1219:19 | Stultus | |
1173 | 24.10.0500:31 | 줌바이퍼 | |
563 | 24.10.0410:49 | Tamy | |
733 | 24.09.2923:48 | 머트 | |
623 | 24.09.2822:28 | 머트 | |
448 | 24.09.2808:22 | Tamy | |
879 | 24.09.2321:32 | Stultus | |
990 | 24.09.2210:59 | 좌절금지 | |
626 | 24.09.2203:23 | 누림어멈 | |
1163 | 24.09.1919:17 | 좌절금지 | |
560 | 24.09.1917:09 | 좌절금지 | |
496 | 24.09.1813:37 | Stultus | |
889 | 24.09.1723:58 | 좌절금지 | |
592 | 24.09.1722:40 | 좌절금지 | |
450 | 24.09.1717:13 | 맥가즈아 | |
558 | 24.09.1708:13 | 김경석 | |
226 | 24.09.1617:47 | Panictosh | |
760 | 24.09.1504:35 | Tamy | |
580 | 24.09.1319:18 | Stultus | |
694 | 24.09.1019:44 | 치토 | |
482 | 24.09.0118:13 | 머핀X | |
448 | 24.09.0112:54 | 해킨도전자 | |
537 | 24.08.3115:34 | 머핀X | |
300 | 24.08.2601:42 | 화정큐삼 | |
300 | 24.08.2422:59 | 하나브 | |
316 | 24.08.2316:25 | 화정큐삼 | |
411 | 24.08.1810:56 | CanBe | |
358 | 24.08.1800:04 | 화정큐삼 | |
297 | 24.08.1722:03 | 화정큐삼 | |
197 | 24.08.1710:14 | jbhlyk | |
309 | 24.08.1622:06 | Stultus | |
214 | 24.08.1511:16 | hackillious | |
161 | 24.08.1421:30 | 세유니 | |
416 | 24.08.1419:58 | Stultus | |
375 | 24.08.1311:26 | 오디세이 | |
263 | 24.08.1115:46 | 좌절금지 | |
184 | 24.08.1111:21 | 티타보르 | |
231 | 24.08.1022:46 | Stultus | |
523 | 24.08.1022:10 | 오디세이 | |
166 | 24.08.1019:05 | jbhlyk | |
192 | 24.08.0923:20 | RogerT | |
336 | 24.08.0717:18 | 좌절금지 | |
129 | 24.08.0609:17 | RogerT | |
568 | 24.08.0606:14 | 줌바이퍼 | |
86 | 24.08.0523:34 | jbhlyk | |
260 | 24.08.0521:10 | 수인과윤슈 | |
880 | 24.08.0521:08 | 좌절금지 | |
603 | 24.08.0221:07 | Stultus | |
389 | 24.07.3019:12 | Tamy | |
340 | 24.07.2915:37 | 해킨도전자 | |
272 | 24.07.2813:52 | june119 | |
301 | 24.07.2112:43 | Stultus | |
4030 | 23.05.0502:19 | BlueGuerrilla | |
3727 | 21.08.0213:10 | 김태국 | |
275 | 24.07.1122:47 | Stultus | |
211 | 24.07.1020:44 | Stultus | |
248 | 24.07.0921:44 | Stultus | |
370 | 24.07.0820:57 | Stultus | |
198 | 24.07.0811:28 | 의정이 | |
381 | 24.07.0721:25 | Stultus | |
357 | 24.07.0604:41 | bsiugr | |
645 | 24.07.0509:56 | 애플브리크 | |
2435 | 24.02.1715:21 | 광호 | |
470 | 24.06.2723:24 | 치토 | |
239 | 24.06.2617:24 | talas | |
155 | 24.06.2120:58 | 블루사탕 | |
551 | 24.06.1609:01 | gtrfxdsp | |
387 | 24.06.1401:04 | Mactopia | |
849 | 24.06.1120:40 | Stultus | |
762 | 24.06.1115:07 | 새콤칠리 | |
118만 | 23.02.2118:35 | 좌절금지 | |
311 | 24.06.1001:11 | Steer | |
210 | 24.06.0810:09 | Door |
자세한 안정화 과정까지.. 멋집니다!
추천 박고 갑니다 ㅎㅎ
저도 빌드 후기글 쓰고싶네요.ㅠ