안녕하세요. :)
LG Ultra PC 15U480 - KA56K 노트북의 macOS Big Sur 11.2.1 설치 후기입니다.
저번에 OpenCore r0.5.9 로 macOS Catalina 10.15.x 를 설치 후기를 작성한 후로 한동안 업데이트를 하지 않다가
오랜만에 OpenCore r0.6.6 으로 업데이트하고 macOS Big Sur 11.2.1 버전으로 클린 설치를 하였습니다.
OpenCore r0.6.6 버전의 새로운 EFI 폴더로 다시 구축하고
기존에 사용했었던 일부 ACPI 설정 및 SSDT 패치와 Device Properties, SMBIOS 등의 설정만 가져왔습니다.
저번 macOS Catalina 10.15.x 설치 후기와 변경된 점만 설명하고 마치겠습니다.
그리고, 저도 GitHub 사이트를 만들었습니다. ^-^
저의 GitHub 사이트를 만들고 프로필도 조금 꾸며봤습니다. ✨
https://github.com/lshbluesky
이제, GitHub 저장소에 EFI 폴더를 업로드하고 OpenCore 가 업데이트되거나
EFI 폴더에서 수정된 부분이 있을 경우 수시로 Commit 하여 반영할 예정입니다. :)
❄️ 안정화 작업을 모두 완료한 Config.plist 의 ACPI 설정 모습
❄️ ACPI 패치에 사용되는 각각의 SSDT 에 대한 개요표
번호 | SSDT 이름 | ACPI Rename 필요 여부
| ACPI 패치 유형 | OEM DSDT Override 여부 |
1 | SSDT-ALS0.aml | X | Injection | X |
2 | SSDT-BATT.aml | O | Hot Patch & Override | O |
3 | SSDT-DMAC.aml | X | Injection | X |
4 | SSDT-EC-USBX.aml | X | X |
5 | SSDT-FNBL.aml | O | Hot Patch & Override | O |
6 | SSDT-HBTN_STA.aml | O | O |
7 | SSDT-HPET.aml | X | Preset Variable Method
| O
|
8 | SSDT-MATHLDR2_STA.aml | O | Hot Patch & Override | O |
9 | SSDT-MCHC.aml | X | Injection | X |
10 | SSDT-MEM2.aml | X | X |
11 | SSDT-NVOF.aml | X | X |
12 | SSDT-OSYS.aml | X | Assign & Injection | O |
13 | SSDT-PLUG.aml | X | Injection
| X |
14 | SSDT-PMCR.aml | X | X |
15 | SSDT-PNLF.aml | X | X |
저번 macOS Catalina 10.15.x 설치 후기글의 내용에서 외장 그래픽 장치를 비활성화하는 SSDT-NVOF.aml 이 추가되었습니다.
그리고, SSDT-BrightFn_Q6E.aml 은 이름이 조금 길어서 SSDT-FNBL.aml 로 수정하였습니다.
또한, SSDT-HPET.aml 은 Preset Variable Method 방식으로 패치하도록 수정하였습니다.
그 외 나머지 SSDT 의 안정화 작업들에 대한 자세한 내용은
아래의 LG Ultra PC 15U480 - KA56K 노트북의 설치 후기에서 안정화 부분을 참고해주세요.
https://x86.co.kr/mymac/5003460
shl628 | 2020.07.21
🌸 안정화 작업 수정 내역
1. SSDT-BATT.aml 에서 IVBI Method 의 일부 내용을 수정하였습니다.
2. SMBus 방식의 Synaptics 터치패드에 대하여 VoodooPS2 에서 VoodooRMI 로 교체하였습니다.
3. SSDT 를 사용하여 NVidia GeForce MX150 외장 그래픽 장치를 비활성화하였습니다.
4. CPUFriendFriend 를 사용하여 CPUFriendDataProvider.kext 를 다시 생성하였습니다.
🌼 그 외 나머지 소소한 수정 내역
- MAT 를 지원하므로 Config.plist 에서 Booter 의 일부 Quirks 옵션을 수정하였습니다.
- Qualcomm Atheros QCA6174 의 Bluetooth 는 작동하지 않으므로 Bluetooth 와 연결된 USB 포트를 비활성화하였습니다.
- Qualcomm Atheros QCA6174 의 Wi-Fi 는 작동하지 않으므로 SSDT 를 사용하여 RP12 의 PXSX 장치를 비활성화하였습니다.
- 잠자기에서 깨어난 후에 HDMI 외부 디스플레이 출력이 작동하지 않는 문제가 발견되어 force-online 속성을 추가하였습니다.
- 화면 밝기 조절 Fn 키에 대한 SSDT-FNBL.aml 에서 PS2K 의 Notify 값을 0x0405 / 0x0406 으로 수정하였습니다.
- LGWMI 를 추가하여 시스템 환경설정의 배터리 설정에서 배터리 성능 상태를 확인하고 배터리 수명을 관리할 수 있도록 하였습니다.
1. SSDT-BATT.aml 에서 패치된 IVBI Method 의 논리적 오류 수정
저번 설치 후기글에서 만들었던 SSDT-BATT.aml 에서 IVBI Method 의 일부 내용을 수정하였습니다.
물론, 배터리 잔량 표시는 잘 됐었지만 ACPI Source Language 코드를 해석해보면 논리적으로 잘못된 오류가 있습니다.
OEM DSDT 를 보면 IVBI Method 에서 EmbeddedControl Region 에 선언된 BANA 라는 FieldUnitObject 가 사용됩니다.
Method (IVBI, 0, NotSerialized)
{
Store (0xFFFFFFFF, Index (PBIF, One))
Store (0xFFFFFFFF, Index (PBIF, 0x02))
Store (0xFFFFFFFF, Index (PBIF, 0x04))
Store ("Bad", Index (PBIF, 0x09))
Store ("Bad", Index (PBIF, 0x0A))
Store ("Bad", Index (PBIF, 0x0B))
Store ("Bad", Index (PBIF, 0x0C))
Store (Zero, ^^PCI0.LPCB.EC0.BANA)
}
저번 설치 후기글에서는 64 Bit 의 BANA 변수를 직접 8 Bit 로 세분화하고 ANAX 라는 Method 에 담았는데
ANAX Method 의 코드 내용을 보면 변수의 값을 읽는 Method 라는 것을 알 수 있습니다.
하지만, 위의 IVBI Method 에서는 Store (Zero, ^^PCI0.LPCB.EC0.BANA) 라는 구문이 있습니다.
이 코드를 해석해보면 Zero 라는 값을 BANA 라는 변수에 쓰겠다는 의미입니다.
그런데, Store (Zero, ^^PCI0.LPCB.EC0.ANAX ()) 로 수정하면 이는 논리적으로 옳지 않게 됩니다.
직접 8 Bit 로 나눈 변수에 쓰는 경우에는 아래와 같이 ANAW Method 의 내용이 되어야 합니다.
Method (ANAW, 1, Serialized)
{
Name (TEMP, Buffer (0x10){})
Store (Arg0, TEMP)
Store (DerefOf (Index (TEMP, Zero)), ANA0)
Store (DerefOf (Index (TEMP, One)), ANA1)
Store (DerefOf (Index (TEMP, 0x02)), ANA2)
Store (DerefOf (Index (TEMP, 0x03)), ANA3)
Store (DerefOf (Index (TEMP, 0x04)), ANA4)
Store (DerefOf (Index (TEMP, 0x05)), ANA5)
Store (DerefOf (Index (TEMP, 0x06)), ANA6)
Store (DerefOf (Index (TEMP, 0x07)), ANA7)
}
하지만, 저는 위의 ANAW Method 를 사용하는 것 대신에
SSDT-BATT.aml 에 Buffer 를 8 Bit 씩 쓰는 WE1B & WECB Method 를 추가하고
아래와 같이 WECB Method 를 사용하여 다시 수정하였습니다.
Method (IVBI, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
Store (0xFFFFFFFF, Index (PBIF, One))
Store (0xFFFFFFFF, Index (PBIF, 0x02))
Store (0xFFFFFFFF, Index (PBIF, 0x04))
Store ("Bad", Index (PBIF, 0x09))
Store ("Bad", Index (PBIF, 0x0A))
Store ("Bad", Index (PBIF, 0x0B))
Store ("Bad", Index (PBIF, 0x0C))
^^PCI0.LPCB.EC0.WECB (0x77, 0x40, Zero)
}
Else
{
XVBI ()
}
}
64 Bit 보다 더 큰 128 Bit 나 256 Bit 의 FieldUnitObject 인 경우에는 직접 8 Bit 로 모두 세분화하기 조금 힘들 수 있기 때문에
RE1B & RECB Method 또는 WE1B & WECB Method 를 사용하는 것이 더 편리합니다.
또한, WECB Method 는 Buffer 를 읽는 Method 가 아닌 쓰는 Method 이므로
RECB Method 와 달리 WECB Method 를 Call 할 때 어떤 값을 쓸 지에 대한 인수 1개를 필요로 합니다.
그리고, 기존에 배터리 패치를 할 때 주로 사용되기도 하고 다른 분들도 많이 알고 계시는
B1B2 / B1B3 / B1B4 / L1L4 등의 Method 는 모두 변수의 값을 읽는 Method 입니다.
그래서, EmbeddedControl Region 에 선언된 16 Bit 의 FieldUnitObject 에 값을 쓰는 경우에는
ShiftRight 연산자를 사용하여 직접 패치를 했었는데, 요즘에는 W16B 라는 Method 를 사용하는 것 같아요.
자세한 내용은 아래의 사이트를 참고해보세요.
https://xstar-dev.github.io/hackintosh_advanced/Guide_For_Battery_Hotpatch.html
즉, 위의 내용에서 핵심은 EmbeddedControl Region 에 선언된 FieldUnitObj 를 사용하는 구문에서
B1B2 와 W16B 또는 RECB 와 WECB 둘 중 어떤 Method 를 사용해야 하는 지를 구분하는 것입니다. ^-^
2. VoodooRMI 를 사용한 SMBus 방식의 Synaptics 터치패드 및 제스처 안정화
LG Ultra PC 15U480 - KA56K 노트북은 SMBus 방식의 Synaptics 터치패드를 사용하며 ACPI 상에서 모델명은 SYN105A 입니다.
기존에는 Acidanthera 님의 최신 버전의 VoodooPS2Controller 를 사용했었는데
VoodooRMI 로 교체하고 난 후에 터치패드의 터치감이 매우 좋아지고 제스처도 부드럽게 작동합니다. :)
네 손가락 제스처까지 모두 부드럽게 작동하며 5점 터치도 정상적으로 인식합니다.
VoodooRMI 를 사용하여 SMBus 방식의 Synaptics 터치패드 및 제스처를 안정화하는 과정에 대한 내용은 아래의 Tip 글을 참고해주세요.
https://x86.co.kr/tip/5796443
shl628 | 2021.01.30
3. SSDT 를 사용하여 NVidia GeForce MX150 외장 그래픽 장치 비활성화
WhateverGreen 의 -wegnoegpu 부트 옵션을 사용하여 Mac OS 에서 외장 그래픽 장치를 숨길 수 있지만
외장 그래픽 장치가 여전히 배터리를 조금 미세하게 소모한다고 합니다.
SSDT 에서 Mac OS 로 부팅하는 경우에만 활성화되는 Device 를 추가하고
_INI Method 에서 외장 그래픽 장치를 비활성화하는 _OFF Method 를 Call 하면 됩니다.
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "DGOF", 0x00000000)
{
External (_SB_.PCI0.RP01.PEGP._OFF, MethodObj) // 0 Arguments (from opcode)
Device (RMD1)
{
Name (_HID, "RMD10000") // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
If (_OSI ("Darwin"))
{
If (CondRefOf (\_SB.PCI0.RP01.PEGP._OFF))
{
\_SB.PCI0.RP01.PEGP._OFF ()
}
}
}
}
}
그리고, 외장 그래픽 장치를 비활성화하는 _OFF Method 는 주로 특정 OEM SSDT Table 에 존재할 거예요.
또한, 외장 그래픽 장치를 비활성화하는 SSDT 를 적용한 후에는 -wegnoegpu 부트 옵션을 사용하지 않아도 됩니다.
자세한 내용은 아래의 사이트를 참고해주세요.
https://dortania.github.io/Getting-Started-With-ACPI/Laptops/laptop-disable.html
4. CPUFriendFriend 를 사용하여 CPUFriendDataProvider.kext 생성
CPUFriendFriend 를 사용하여 CPUFriendDataProvider.kext 를 다시 생성하였습니다.
그리고, CPUFriendDataProvider.kext 를 생성하는 과정에서 전력 절전을 중심으로 설정하였으며
Intel Speed Shift (HWP) 기능도 정상적으로 활성화되었습니다.
CPUFriend.kext 와 CPUFriendDataProvider.kext 의 사용 방법은 아래의 사이트를 참고해주세요.
https://github.com/acidanthera/CPUFriend/blob/master/Instructions.md
CPUFriendFriend 는 아래의 사이트를 참고해주세요.
https://github.com/corpnewt/CPUFriendFriend
✨ 마무리
집에 남는 SSD 로 외장 SSD 케이스에 연결하고 macOS Big Sur 11.2.1 을 설치해서
macOS SSD 아이콘이 노란색 외장 디스크로 표시되네요.
OpenCore 의 EFI 폴더를 업로드하고 마치겠습니다. :)
SMBIOS 에서 Serial Number 등의 항목은 직접 생성한 후에 사용해주세요.
EFI.zip
그리고, 저의 GitHub 저장소 사이트입니다. ^-^
https://github.com/lshbluesky/LG-Ultra-PC-15U480-KA56K-Hackintosh
+ OpenCore r0.6.7 버전의 EFI 폴더부터는 위의 GitHub 저장소 사이트를 참고해주세요.
✅ 작동하는 것
- Intel UHD Graphics 620 QE/CI
- Intel UHD Graphics 620 AGPM
- Realtek ALC 255 ( 내장 사운드 출력 & 마이크 입력 )
- Speed Step ( Speed Shift 활성화 & XCPM 방식 )
- X86Platform~ Kext 로드
- Realtek 유선 네트워크
- USB 3.x & 추가 전력
- USB HD 내장 웹캠
- Night Shift
- 배터리 잔량 표시
- SMBus 방식의 Synaptics 터치패드
- 노트북 HDMI 외부 디스플레이 영상 & 사운드 출력
- 노트북 내장 디스플레이 밝기 조절
- Fn 키 디스플레이 밝기 조절
- Fn 키 사운드 음량 조절
- Realtek 내장 SD Card Reader ( Sinetek-rtsx.kext 를 추가하면 사용 가능 )
- 잠자기 & 깨우기
- 노트북의 덮개를 덮어서 잠자기 모드 진입
❌ 작동하지 않는 것
- Qualcomm Atheros QCA6174 의 무선 네트워크 및 블루투스
❝[LG Ultra PC 15U480-KA56K 노트북] i5 - 8250U, UHD 620, Mac OS Catalina 10.15.5 설치와 안정화 중점 후기 + OpenCore r0.5.9❞