질문용 시스템 사양 | 1번 |
---|---|
추가사양 및 설치(할)OS | 카탈리나_오픈코어 |
공지숙지/증상설명 | 숙지 |
안녕하세요? 3년전 x1 yoga모델로 최근 오픈코어로 준비중입니다.
아무리 공부해도(솔직히 공부하는게 너무 방대한 범위라 제대로 봤는지도 모르겠네요.) 어디서부터 시작해야될지 몰라 글을 남깁니다.
x1 yoga : 3년전 구매했고, 무선랜은 따로 구매했습니다. ( 현재, ssd를 나눠서 모하비와 윈도10이 깔려 있으며, 모하비는 최근 어쩐일인지
부팅불가 상태여서 설치 usb로 부팅은 가능하네요.)
a. cpu : Intel core i5-6300u @2.4GHz
b. 메인보드 : Lenovo:20FQCTO1WW
Intel HM170/QM170 Express(2.6W)
c. 그래픽카드 : Intel HD Graphics 520
d. 사운드 : Intel HDMI Audio
e. 랜카드 : Intel Dual Band Wireless-Ac 8260->dw1560변경
f. 블루투스 : Intel Wireless Bluetooth
USB3.0 Controller : Intel eXtensible
g. ssd : NVMe SAMSUNG MZVK512
h.모니터 : Wide viewing angle & High density FlexView Display 2560*1440
i. 램 : 8GB
************************************************************************************************************
* 현재 까지 진행상황.
1. OC 구성하기 ..[설치usb만들기]
[참고] 오픈코어로 구성하기 위해 주로 참고했던 부분은 https://x86.co.kr/opencore/4984866
이것과 https://x86.co.kr/opencore/4879297
그리고,,, 자세히 설명이 나와 있는 (여기는 정말 정독하면 좋은 자습서였습니다.)
https://dortania.github.io/vanilla-laptop-guide/preparations/opencore-efi.html 로
오픈코어로 기본 EFI폴더구성을 skylake에 맞게 진행했습니다.
config.plist는 https://opencore.slowgeek.com/ 를 통해서 에러를 수정하여 에러없는 config.plist를 구성했습니다.
SMBIOS는 GenSMBIOS를 통해 얻은 정보를 입력했습니다.
(-> 이부분도 좀 특이점이 있는게 GenSMBIOS로 정보를 얻어와서 수정한 자료인데 HackinTool에서는 iMac으로 정보가 보이는데요
수정이 제대로 안된걸까요?) HackinTool 및 Opencore-configurator에 대한 더 많은 공부가 필요하겠지만 솔직히 어렵기만 하네요.
config.plist는 skylake오픈코어의 samp.config.plist를 가져와서 수정했습니다.
BIOS구성을 E4님께서 참고하라고 링크해주신 T460의 바이오스로 우선 설정했는데(제가 맨처음 설정과는 조금 차이가 있긴했습니다.)
이것도 좀 문제일수도 있을것 같긴했지만..bios구성을 여기에 맞춰 수정해둔 상태입니다.(이부분에도 잘못된 부분이 있을까요?)
Config
> USB
> UEFI BIOS Support
> EnableConfig
> Power
> Intel SpeedStep Technology
> EnableConfig
> Power
> CPU Power Management
> EnableConfig
> CPU
> Hyper-Threading Technology
> EnableSecurity
> Security Chip
> DisableSecurity
> Memory Protection
>Execution Prevention
>EnableSecurity
> Virtualization
> Intel Virtualization Technology
> EnableSecurity
> Virtualization
> Intel VT-d Feature
> EnableSecurity
> Anti-Theft
> Computrace
> Current Setting
> DisableSecurity
> Secure Boot
> DisableSecurity
> Intel SGX
> DisableSecurity
> Device Guard
> DisableStartup
> UEFI/Legacy Boot
> UEFI OnlyStartup
> CSM Support
> NoStartup
> Boot Mode
> Quick기본 그래픽으로 안전부팅잉 안되는 상황입니다.
[제 x1 yoga는 모하비때에도 그래픽7mb를 벗어나지 못했던 상태인데요]
우선, 현재 진행중인 efi폴더를 첨부해봅니다.
선배님들 조언부탁드립니다. 조언주신 뽀로로님. E4님 감사드립니다. 다른분들의 조언도 좀 구해봅니다. 감사합니다.
opencore-2020-08-01-222032.txt -> 부팅 에러 로그입니다.
EFI.zip -> 제가 작업중인 오픈코어. efi폴더입니다.
어디서부터 시작해야될지요..??
네. shl628님.. 수고스럽게 수정해주셔서 감사드립니다. 수정해주신 efi폴더를 부팅usb의 efi폴더와 교체하고 다시 부팅했는데 에러가 나고 멈추네요.
opencore-2020-08-02-233513.txt -> 부팅로그 첨부합니다. 아래 부팅시 멈춘화면 첨부해요. 여전히 기본 그래픽으로도 진입이 안되는것 같아요. 혹시 BIOS설정과 연관되어있는 부분은 없을까요?
BIOS 설정에는 문제가 없는 것 같습니다.
온유님의 Lenovo X1 Yoga 노트북의 OEM DSDT 를 확인해볼 필요가 있을 것 같아서
Lenovo X1 Yoga 노트북의 OEM DSDT 를 확인해보니
PNP0C09 라는 _HID 를 가지는 Embedded Controller Device 의 이름이 이미 EC 로 되어 있습니다.
그리고, ECDT ( Embedded Controller Boot Resources Table ) 도 존재합니다.
이의 경우에는 SSDT-EC-USBX-LAPTOP.aml 에서 정의되어 있는 EC Device 와 충돌할 수도 있습니다.
보통 H_EC 또는 EC0 이라는 이름으로 정의되어 있는데 OEM DSDT 에서 이미 EC 라면
Fake 의 EC Device 를 인젝션하지 않아도 부팅이 가능합니다.
Lenovo X1 Yoga 노트북의 DSDT 는 아래의 사이트에서 참고하였습니다.
온유님의 부팅 화면의 로그에서 표시되는 OEM Table ID 가 아래의 사이트에 있는 DSDT 와 TP-N1F 로 서로 같습니다.
https://github.com/xinyuwufei/X1Yoga-Hackintosh
단, 기존의 EC 를 EC0 으로 Rename 하고 SSDT 를 사용하여 Fake 의 EC Device 를 인젝션하는 것을 권장하지만
우선, Fake 의 EC Device 를 인젝션하는 SSDT 를 사용하지 않고 부팅을 해보는 것으로 하겠습니다.
SSDT-EC-USBX-LAPTOP.aml 를 지우고 USBX Device 만 인젝션하는 SSDT-USBX.aml 로 넣었습니다.
그리고, Config.plist 의 일부 설정을 수정하였습니다.
SSDT-PNLF.aml 은 Mac OS 설치를 완료하고 Intel HD Graphics 520 내장 그래픽의 QE/CI 를 활성화한 후에 Enabled 에 체크해주세요.
아래의 EFI 폴더로 교체하고 다시 부팅해보세요.
오늘 수정해주신 efi폴더 교체하고도 바로 커널패닉이네요.
(노트북의 설치는 쉽지가 않네요. 그동안 모하비는 설치했었는데,,물론 그것도 제대로 된것은 아니였지만요..ㅠㅠ)
음.. 모하비도 그래픽은 잡지 못했어도 부팅은 되었었는데 윈도우와 듀얼부팅으로 사용중에 윈도우 업데이트시 바이오스도 업데이트되었는지
부팅불가였었는데요. 시스템 바이오스 업데이트와 연관있는것은 아닐까요? (바이오스 버젼부분)
우선, 부팅시 멈춘화면 사진 올려봅니다. 감사합니다.
opencore-2020-08-03-223020.txt -> 부팅로그입니다. (사진 화면의 내용과 부팅로그의 내용은 내용부터가 다르네요.)
로그를 자세히 보니 커널 패닉의 형태가 아래의 분과 매우 비슷합니다.
커널 패닉이 발생하는 위치도 비슷하며 똑같이 Invaild Frame Pointer 라는 로그가 출력되었습니다.
https://x86.co.kr/mymac/4919509
위의 설치 후기글에서는 Booter - Quirks 의 DevirtualiseMmio 와 MmioWhitelist 설정을 적용하여 해결하였다고 합니다.
우선, DevirtualiseMmio 과 EnableWriteUnprotector 항목에 체크하고
RebuildAppleMemoryMap 과 SyncRuntimePermissions 항목은 체크 해제하였습니다.
아래에 첨부한 EFI 폴더로 교체하고 다시 부팅해보세요.
만약, 그래도 같은 커널 패닉이 발생하며 부팅이 되지 않는다면 아래의 글에서 7. 단계의 내용을 참고하여
DevirtualiseMmio 항목이 체크되어 있는 상태에서 MmioWhitelist 를 추가적으로 설정하고 다시 부팅해보세요.
https://x86.co.kr/opencore/4841193
오호..드디어 설치 화면까지 왔습니다. 첨부해주신 EFI폴더로 교체하고 부팅하니...부팅로그가 쭈루룩~
설치화면까지 나와서 디스크유틸리티로 설치하고자 하는 파티션 다시 포맷하고 진행하려했더니 에러메시지를 띄우네요.
" macOS를 설치하려면 인터넷 연결이 필요합니다. " 설치를 계속 진행할 수 없게되었습니다. 그래도 설치화면까지 갈수 있어서 오늘은 기분이 매우 좋습니다. (감사합니다.) 인터넷 연결이 되어야하는것 같은데요. ㅠㅠ
opencore-2020-08-04-233013.txt -> 부팅로그 올려봅니다.
부팅이 드디어 정상적으로 되었다니 다행입니다. :)
아마도, OpenCore 의 Config.plist 에서 Booter - Quirks 의
RebuildAppleMemoryMap 과 SyncRuntimePermissions 항목이 커널 패닉을 발생시킨 것 같습니다.
아래의 EFI 폴더로 교체하고 다시 부팅해주세요.
Broadcom 관련 Kext 를 잠시 비활성화해 놓았었는데 Enable 항목에 체크하여 활성화하였습니다.
음... 인터넷 연결이 없어도 Mac OS 시스템 이미지를 복원한 USB 를 사용하여 Mac OS 를 설치하는 것이어서 인터넷 연결은 원래 필요하지 않습니다.
이 부분에 대한 문제는죄송하지만 저도 잘 모르겠네요... ㅜㅅㅠ
좌절금지님의 Mac OS Catalina 10.15.6 OpenCore 0.6.0 Ghost 이미지 파일을 사용하여
다시 Mac OS 설치 디스크를 만들고 USB-BOOT 파티션 안에 있는 EFI 폴더만 제가 드린 것으로 교체하는 방법으로 시도해보시는 것도 좋을 것 같습니다...
Config.plist 에서 Kext 가 True 로 되어 있으면 이미 활성화가 되어있는 상태입니다.
AirportBrcmFixup.kext 는 혹시 몰라서 넣었는데 필요하지 않다면 삭제해주세요.
shl628님... 드뎌 설치 성공했네요. (설치용usb가 잘못된 것인지, 자료실의 카탈리나 ghost자료를 다운받고
복원하여 shl628님 최종 부팅가능하도록 수정해주신 EFI폴더를 교체해서 설치까지 진행이 되었네요.
(특이하게 클로버에서는 MacOS설치화면에서 바로 설치되던데 OpenCore는 설치완료 3분정도에 한번 재부팅해서
설치를 계속하네요. 재부팅을 3번정도 하는것 같습니다. 처음에 재부팅해서 '어라...이거 또 실패했나보다'라고 생각하는 순간
설치를 계속하더라구요.
먼저, 나타난 증상은
1. 무선랜이 작동하지 않는것--> 인터넷이 연결되어야 뭔가 할 수 있는데 말입니다.(급하게는 인터넷)
2. 그래픽이 14mb로 잡히지 않았고
3. 사운드, 외....여러가지가 맨 처음 아무것도 잡히지 않은 상태네요.
* 공부를 더 해서 하나둘씩 안정화 시키는 작업을 해야되겠는데 몇가지 궁금한게 있습니다.
1. 현재, 제 노트북은 한ssd에 윈도우와 MacOS가 듀얼부팅하게 구성되어있는데...OC의 듀얼부팅을 해결해야되는데..
shl628님께서 글 작성한 부분을 어떻게 작성해야될지 모르겠습니다.
여기 If 문과 Else 문 작성을 어떻게해야되는거지요?
If (_OSI ("Darwin")) // Mac OS 로 부팅한 경우
{
... // Mac OS 에서 수행할 내용
}
Else // Mac OS 가 아닌 다른 OS 로 부팅한 경우
{
Return (...) // ACPI Rename 패치가 적용된 Object 를 Return
}
저 양식작성을 어떻게 해야 듀얼부팅으로 작동할지 참고할만한 문구 샘플이 있으신지요?
2. 지금 dsdt/ssdt에 대해 매일 한번씩 보고 정독하며 공부하고 있는데 많이 공부해야 아직 잡히지 않는 것들을 잡을 수 있을건데
https://x86.co.kr/mymac/5003460
님의 여기 글을 잘 정독하고 있습니다.(어렵고, 솔직히 어디서부터 손대야될지 막연하기만 합니다.)
혹시 모하비때 ssdt자료를 oc에서도 config.plist상에서 수정만 잘 해주면 사용할수 있는가요?
(모하비때 제 x1 yoga에 맞게 잘 세팅된 efi폴더를 구해서 모하비땐 그래픽만 문제였지 기타 무선랜, 소리, 터치 등 다른 부분은 잘
작동되었었거든요...--> 음. 생각해보니 모하비와 카탈리나는 OS버전이 다르니 사용이 어렵겠네요. 맞지요?)
현재, properTree에서 수정하거나, kext를 config.plist에 연결(인젝션?) 시킨뒤 config.plist를 오류 여부를 확인해서
하나둘씩 잡아보려고 생각중인데요. 이방법이 맞을까요?
3. 아. 그리고, 기존 클로버가 설치되어있는데, OpenCore로 설치하려면 어떻게 해야되는가요?
OpenCore 최신버젼을 다운받아 클릭해서 설치하면(?) 기존 클로버로 설치된게 삭제되고 OC로 설치되는건 아니죠?
두서없이 이것저것 질문했네요.
설치까지 성공하도록 아낌없는 조언 감사드려요. 공부하면서 하나둘씩 진행해보겠습니다.
감사드려요.
OpenCore r0.6.0 버전으로 교체하고 일부 Kext 도 최신 버전으로 교체하였습니다.
그리고, Intel HD Graphics 520 내장 그래픽의 QE/CI 그래픽 가속 활성화가 가능하도록 Properties 를 입력하였습니다.
아래의 EFI 폴더로 교체하고 다시 부팅해주세요.
내장 사운드 출력은 Mac OS Mojave 10.14.x 를 사용하셨을 때 적용하신
사운드 장치의 Layout ID 를 alcid 부트 옵션으로 적용하고 다시 부팅해보세요.
DW1560 무선 랜카드는 다른 분의 Mac OS Catalina 10.15.x 설치 후기를 보니 아래의 Kext 가 필요한 것으로 보입니다.
- AirportBrcmFixup.kext
- BrcmBluetoothInjector.kext
- BrcmFirmwareData/Repo.kext
- BrcmPatchRAM3.kext
부트 옵션에 brcmfx-country=#a 도 추가하였습니다.
만약, 그래도 무선 LAN 이 작동하지 않는다면 죄송하지만 저도 잘 모르겠습니다... ㅜㅅㅠ
1. Windows 에는 필요하지 않고 Mac OS 에서만 필요한 내용은 If (_OSI ("Darwin")) 문만 사용하면 되며 Else 문은 필요하지 않습니다.
단, 배터리 패치와 같이 ACPI 에서 Windows 에서도 사용되는 내용은 Else 문까지 사용합니다.
SSDT 에서 Mac OS 에서 수행할 내용이 If (_OSI ("Darwin")) 문의 중괄호 { } 안에 들어가고
Else 문의 중괄호 { } 안에는 Windows 에서 수행할 내용이 들어가는데
Else 문의 중괄호 { } 안에 들어갈 내용은 따로 패치하지 않은 기존의 DSDT 내용입니다.
그런데, 그 기존의 DSDT 내용이 사실 OEM DSDT 에서 Rename 패치만 적용된 것의 내용과 같기 때문에
Else 문에서 기존의 OEM DSDT 에 대한 해당 Object 를 Return 하는 것입니다.
샘플은 제가 직접 패치하여 생성한 SSDT-BATT.aml 를 참고해보세요.
Else 문이 사용되지 않는 예시로는 배터리 패치에서 Windows 가 아닌
Mac OS 에서만 사용하려는 경우라고 할 때 B1B2, B1B4 등의 Method 가 있습니다.
그리고, 위에서 제가 드린 EFI 폴더에 다음과 같은 SSDT 가 포함되어 있습니다.
- SSDT-ALS0.aml
- SSDT-OSYS.aml
- SSDT-PLUG-DRTNIA.aml
- SSDT-PNLF.aml
- SSDT-USBX.aml
SSDT-PLUG-DRTNIA.aml 는 If (_OSI ("Darwin")) 문을 사용하여 패치하지 않아도 됩니다.
그 외 나머지 SSDT 는 모두 Device 가 인젝션되는데
_STA Method 에서 If (_OSI ("Darwin")) 문과 Else 문이 사용되었습니다.
즉, 위에서 제가 드린 EFI 폴더에 포함되어 있는 SSDT 는 모두 Windows 로 멀티 부팅이 잘 되도록 패치되어 있습니다.
OpenCore 에서 Windows 로 부팅이 잘 되는지 확인해보세요.
2. Mac OS Mojave 10.14.x 에서 사용하신 SSDT 는 OS 버전이 조금 달라도 대부분 사용할 수 있습니다.
단, 부트로더가 Clover 가 아닌 OpenCore 로 변경하였으므로 다른 OS 와 멀티 부팅을 구성한 상태에서 기존의 SSDT 를 사용하려면
If (_OSI ("Darwin")) 문을 사용하여 추가적으로 패치하고 사용해야 합니다.
그리고, Mac OS Mojave 10.14.x 에서 사용하신 일부 Kext 는 OpenCore 에서도 사용이 가능합니다.
하지만, 최근에 Kext 가 최신 버전으로 업데이트되어서 최신 버전의 Kext 를 사용하는 것이 좋습니다.
터치패드는 PS2 와 I2C 중 어떤 방식인지 확인해주세요.
제가 드린 EFI 폴더에는 VoodooPS2Controller.kext 가 포함되어 있습니다.
또한, 현재 Config.plist 에는 이제 딱히 오류가 없습니다.
Config 를 Check 해주는 것은 안정화 작업과 큰 관련은 없습니다.
노트북 디스플레이의 밝기 조절은 Intel HD Graphics 520 내장 그래픽의 QE/CI 활성화가 되었다면
Config.plist 의 ACPI - Add 에서 SSDT-PNLF.aml 항목의 Enabled 에 체크해주세요.
3. 네, Clover 는 직접 삭제해야 합니다.
Mac OS Catalina 10.15.6 이 설치된 SSD 또는 하드 디스크의 EFI 파티션 안에 있는 EFI 폴더에서
BOOT 폴더와 CLOVER 폴더를 삭제하고 제가 드린 EFI 폴더 안에 있는 BOOT 폴더와 OC 폴더를 복사하여 넣어주면 됩니다.
안녕하세요? 지난주 휴가기간이여서 제 노트북에 들어가서 확인을 할 수 없었습니다. 피드백이 늦어졌네요.
수정해주시고 조언주신대로 진행해본 결과.
** 젤 중요한 hd520그래픽이 2048mb로 잡혔습니다.(예전 모하비때 죽어라고 못잡았었는데.. 잘 수정해주셔서 드디어 잡혔습니다. 잡힌게 맞지요??)
1. 사운드 : Layout ID 를 alcid=15 부트 옵션으로 적용 하니 사운드는 출력이 됩니다.
2. 무선랜 : 수정해주시고 추가해주신 efi폴더적용해보니, 무선랜이 정상적으로 작동합니다.
3. [터치패드는 PS2 와 I2C 중 어떤 방식인지 확인해주세요. ] 제 x1 yoga의 터치패드가 뭔지 도통 찾기가 힘들었는데 레노버 사이트에서 트랙패드 장치드라이버 삭제방법을 보던중에 찾긴했습니다. 맞는지 확신이 안서네요. HID관련 휴먼인터페이스 장치 항목을 살펴봤지만 터치패드가 아닌것 같습니다.
제가 찾은 터치패드가 synaptics point device인데요 맞은가요?
4. 배터리 표시 : 우선 패터리 표시를 할수 없는데(배터리 관련 패치가 되어야 터치패드도 작동한다는 글을 본것같네요. 터치패드가 안되는 것도 배터리 배치가 아직 되지 않아 그런것 같습니다. 제생각입니다.) -> ssdt관련 자료를 찾아보고 있습니다. 솔직히 어렵습니다.
5. 블루투스 : 잡히지 않았습니다. 제 아이패드프로도 사이드카가 블루투스로 잡힐것 같은데..블루투스가 활성화되지 않아서 사이드카도 안되는 상황이네요.
무선랜과 블루투스 장치가 연관있는것 같은데, 무선랜은 잡히고 블루투스는 잡히지 않는것이 무선랜도 잘 잡히지 않은걸까요?
6. 잠자기 : 해보지 않았습니다. 전원관련된 부분이 불안정하지 않을까싶습니다.
7. 윈도우와 카탈리나 듀얼부팅 : 설치용 usb로 부팅시 선택하는 순서에서 윈도우로 진행시에 윈도우로 부팅되는데 (이건 ssdt파일이 듀얼부팅에 맞게 수정해주신거지요?) 감사드려요. 제가 잘못 이해하고 있었던 부분이 듀얼부팅시 if문으로 구분하라는 의미가 if 윈도우 else 카탈리나 이렇게 if로 나누어서 뭔가 수정을 해야된다고
생각했는데 이제 이해한게 각 ssdt마다 if를 사용해서 윈도우 부팅시 적용, 또는 카탈리나로 부팅시 ssdt가 적용되게 수정하라는 말씀이였더라구요.
(따라서, ssdt를 추가한다면 추가되는 ssdt도 if문으로 구분해야 된다는 의미로 이제야 이해되었네요. ㅠㅠ)
[노트북 디스플레이의 밝기 조절은 Intel HD Graphics 520 내장 그래픽의 QE/CI 활성화가 되었다면
Config.plist 의 ACPI - Add 에서 SSDT-PNLF.aml 항목의 Enabled 에 체크해주세요.]
-> Enabled에 체크는 했지만, 노트북 디스플레이 밝기 조절은 안되네요
** 이것저것 안되는게 대부분이겠죠..ㅜㅜ
** 무엇보다 설치관련 아낌없이 도움주시고 수정해주셔서 정말 감사드려요. 도움으로 여기까지 왔네요.
(사실 이것만으로도 전 만족합니다. 좀더 어렵지만 공부해보고 수정해볼게요. 감사합니다. 꾸벅^^;;)
Mac OS 의 Dock 에 블러 효과가 작동한다면
Intel HD Graphics 520 내장 그래픽의 QE/CI 그래픽 가속 활성화가 정상적으로 된 것입니다.
3. 터치패드는 댓글의 사진을 보니 I2C 방식은 아닌 것으로 보입니다.
PS2 와 SMBus 방식 중 하나일 것 같습니다.
OEM DSDT 에서 장치 관리자에서 표시된 내용처럼 MOU 라는 Device 가 존재하는 것을 볼 수 있습니다.
아래의 글을 참고하여 Windows 의 장치 관리자에 Synaptics SMBus Driver 항목이 있는지 확인해보세요.
4. 배터리는 천천히 시도해보세요.
5. 블루투스는 죄송하지만 저도 잘 모르겠습니다... ㅜㅅㅠ
6. 잠자기는 배터리 잔량 표시 작업이 완료된 후에 테스트를 해보세요.
노트북 디스플레이의 밝기 조절은 시스템 환경설정의 디스플레이 설정에서 밝기 조절 슬라이더바가 표시되는지 확인해주세요.
노트북의 Fn 키를 통한 밝기 조절은 밝기 조절 Fn 키를 담당하는 EC Query 를 찾고 Remapping 하는 작업이 필요할 수 있습니다.
처음에는 커널 패닉도 발생하고 어려웠었지만
지금은 Mac OS 설치를 완료하고 어느 정도의 안정화 작업을 마친 상태를 보니 저도 기쁩니다. :)
블루투스가 작동하지 않는 문제가 USB 포트 정리 작업이 되지 않아서 발생할 수 있다는 생각이 갑자기 떠올랐습니다.
Hackintool 에서 블루투스가 연결되어 있는 USB 포트를 Internal 로 정의하고 다른 USB 포트도 정리하여
생성한 USBPorts.kext 를 추가하고 Config.plist 의 Kernel - Add 에도 추가하고 다시 부팅해보세요.
그리고, 온유님의 OEM DSDT 를 확인해보니 배터리 관련 FieldUnitObject 가
BATW Method 아래에서 ECOR Field 에 추가적으로 더 선언되어 있습니다.
아래에 있는 128 Bit 가 할당된 SBMN 과 SBDN 이라는 변수는 RE1B & RECB 라는 Method 를 사용하여 해당 Buffer 를 읽도록 하는 것이 편리합니다.
또한, OEM DSDT 에서 밝기 조절 Fn 키를 담당하는 EC Query 는 _Q14 & _Q15 Method 인 것 같아요.
SSDT 를 사용하여 아래의 내용에 If 문과 Else 문을 사용하여
OEM DSDT 에서 기존의 _Q14 & _Q15 를 Override 하는 Hot Patch 방식으로 패치하면 될 거예요. :)
Method (_Q14, 0, NotSerialized) // _Qxx: EC Query
{
Notify (KBD, 0x0406)
}
Method (_Q15, 0, NotSerialized) // _Qxx: EC Query
{
Notify (KBD, 0x0405)
}
아이고. 끝까지 관심주셔서 몸둘바를 모르겠어요. 감사합니다.
솔직히, 퇴근후 아들녀석 재우고 나면 나만의 시간이라 그때 만지고 있는데. 매번 그냥 잠드는 경우가 많네요.ㅠㅠ
어제도 아들 재우고 10:30분에 꾸역꾸역 일어나 노트북 켜고 멍하니 있다가 Macial프로그램을 띄우니 'System DSDT'가 자동으로 올라오더라구요. (제 생각에 기본 노트북 시스템의 dsdt테이블을 불러오는것 같던데요.) 이 system dsdt를 수정하게 되면 기본 시스템에 있는 dsdt테이블이 수정되는건지요?
보통은 클로버부팅시 f4를 눌러 부팅후 클로버 폴더내에 저장되는 dsdt를 사용하는것 같은데요. OC도 dsdt를 추출하는 방법이 있겠죠?
한가지 궁금한게 카탈리나에서는 대부분 dsdt보다 ssdt를 사용하던데요.
여기 싸이트에서 검색해보면 배터리 패치를 보통 dsdt를 추출해서 하던데 배터리 패치를 ssdt-batt.aml로 패치하는것과 차이가 있는가요?
ssdt도 패치별로 종류가 다른데 ssdt별로 어느 용도로 사용되는지 때때로 이것도 궁금하더라구요. (아님..그냥 이름을 정의한건가요?)
(매번,,이렇게 질문만 하네요.ㅠㅠ 매일 공부한다 생각하고 dsdt패치관련 내용을 계속 읽어보고 있는데 어렵네요..
아. oem dsdt는 일반 dsdt와 다른가요?( 자신의 시스템에서 추출하는 dsdt와 oem dsdt가 다를까요?)
블루투스 관련해서는 조언하신대로 usb정리하는 것부터 해볼게요. 매번 감사드립니다.
USBPorts.kext 를 적용한 후에 Config.plist 에서 Kernel - Quirks 의 XhciPortLimit 항목을 체크 해제해주세요.
위의 댓글에서 말씀드리는 것을 잠시 깜빡했습니다. ㅜㅅㅠ
DSDT 와 SSDT 에 대한 질문은 현재 외출중이어서 나중에 답변해 드리겠습니다. :)
네. 감사드립니다.dsdt/ssdt는 제가 좀 이해가 안되는게 dsdt는 전체 정보를 모아놓은 테이블이고 ssdt는 dsdt의 일부라고 이해하고 있는데. 장치별로 ssdt를 새롭게 생성하고 이름을 붙이는건지 아니면 장치별도 ssdt 이름이 별도로 있는건지 (일부는 그러한 역할을 하는 장치별로 구분은 되어 있는것 같긴합니다. 한 예로 샘플로 주신 ssdt-batt.aml의 ssdt는 임의로 추출해서 작성이 된건가요?
대부분 배터리 패치에 대한 여기 싸이트의 정보는 dsdt를 추출해서 수정하는 방법인데요, 만약 dsdt를 추출해서 수정한다음 acpi폴더에 넣어야할까요? OpenCore는 dsdt를 넣어놓지 않은것 같아보여서요. ..)
말씀주신 [그리고, 온유님의 OEM DSDT 를 확인해보니 ] 제 oem dsdt는 어떻게 확인하셨어요? (그러고 보니 oem dsdt가 정확히 뭔지 모르겠습니다. 이게 system dsdt하고 다른거죠?( 어제 MaciASL프로그램을 열어보니 기본적으로 System DSDT가 열리던데 이게 제 노트북 시스템에 있는 DSDT가 열리는 것 같더라구요.)
초보입장에서는 용어부터 생소하여서 어렵습니다. .(오래전부터 여기를 알고 출근은 대부분 매일하고 있지만 아직도 초보예요).
아..하나만 더 알려주세요. 인젝션이라는 것이 궁금합니다.
제가 oc로 옮기면서 이해한 바로는 oc의 ACPI폴더와 Kexts폴더의 작업을 하면서, 추가되는 ssdt는 ACPI에 추가Kext는 Kexts폴더에 넣고.(예전에 기억은 Kext를 설치한다는게 매번 어려웠거든요) 지금은 제가 하는 방식은 https://x86.co.kr/opencore/4879297
Proper Tree-master로 config.plist 불러들인후, OC Snapshot를 누르면 기존 config.plist에 추가된 ssdt와 kext의 정보가 config.plist상에 삽입이 되더라구요. 이상태에서 활성화(True)/비활성화 시키는 방법을 사용하는데요.
이방식으로 진행해도 제대로되는건가요?
권한복구...터미널에 명령어 입력해서 권한복구하는게 kext 설치한다는 의미로 알고 있는데..kext설치조차 제대로 모르네요..ㅠㅠ
매번 느끼지만 상세하게 해주심에 몸둘바 모르겠는데 제가 잘 따라서 해보고 조치해야되는데 더디기만해서 좀 안타깝습니다. 그래도 적용해보고 결과는 꼭 피드백해보겠습니다. 천천히하셔도되세요. 감사해요.
1. MaciASL 프로그램을 띄우니 'System DSDT' 가 자동으로 올라오더라구요. (제 생각에 기본 노트북 시스템의 dsdt테이블을 불러오는것 같던데요.) 이 system dsdt를 수정하게 되면 기본 시스템에 있는 dsdt테이블이 수정되는건지요?
MaciASL 을 실행할 때 열리는 System DSDT 는 현재 자신의 컴퓨터 또는 노트북의 ACPI Tables 에서 DSDT 를 불러오는 것입니다.
DSDT 를 수정하고 파일로 저장한 후에 OpenCore 의 ACPI 폴더에 넣고
Config.plist 의 ACPI - Add 에 추가하면 수정한 내용의 DSDT 가 적용됩니다.
단, MaciASL 을 실행할 때 열리는 DSDT 가 무조건 원본 상태의 OEM DSDT 인 것은 아닙니다.
Config.plist 의 ACPI - Patch 에 Rename 등의 패치가 적용되어 있는 경우에는 그 패치가 적용된 DSDT 가 열립니다.
예를 들어, LPC 를 LPCB 로 Rename 하는 패치가 적용되어 있다면
OEM DSDT 에서는 LPC 로 나타나지만 MaciASL 에서 열리는 DSDT 는 LPCB 로 나타납니다.
2. 보통은 클로버부팅시 F4를 눌러 부팅후 클로버 폴더내에 저장되는 dsdt를 사용하는것 같은데요. OC도 dsdt를 추출하는 방법이 있겠죠?
Clover 는 F4 키를 눌러서 OEM ACPI Tables 를 추출하는 기능이 있지만 OpenCore 에는 없는 것 같습니다.
3. 한가지 궁금한게 카탈리나에서는 대부분 dsdt보다 ssdt를 사용하던데요. 여기 싸이트에서 검색해보면 배터리 패치를 보통 dsdt를 추출해서 하던데 배터리 패치를 ssdt-batt.aml로 패치하는것과 차이가 있는가요?
DSDT 로 패치하는 것과 SSDT 로 패치하는 것은 패치한 내용이 서로 같다면 차이가 없습니다.
ACPI 를 패치하는 방식이 다를 뿐입니다.
4. ssdt도 패치별로 종류가 다른데 ssdt별로 어느 용도로 사용되는지 때때로 이것도 궁금하더라구요. (아님..그냥 이름을 정의한건가요?)
SSDT 가 어느 용도로 사용되었는지 확인하는 방법은 그 SSDT 를 열어서 어떤 내용인지 확인해야 합니다.
그런데, ACPI 를 능숙하게 다루는 사람이 아니라면 SSDT 를 열어서 내용을 확인해봐도 어떤 용도로 사용되는지 파악하기가 쉽지 않습니다.
그리고, SSDT 파일의 이름은 그냥 마음대로 정해도 됩니다.
배터리를 패치하는 SSDT 라면 그냥 SSDT-Battery.aml 이라고 해도 되고 SSDT-BATT.aml 이라고 해도 되고
SSDT-ABCD.aml 처럼 아무 이름으로 해도 됩니다.
단, SSDT-ABCD.aml 처럼 아무 이름으로 하면 나중에 이게 무슨 용도로 사용되는 SSDT 인지 알기가 조금 힘들고 직접 SSDT 를 열어서 확인해야 하겠죠.
5. oem dsdt는 일반 dsdt와 다른가요? (자신의 시스템에서 추출하는 dsdt와 oem dsdt가 다를까요?)
OEM DSDT 는 ACPI Tables 에서 추출하고 나서 수정하지 않은 원본 상태의 DSDT 를 의미합니다.
즉, " 추출하고 나서 아무것도 수정하지 않은 DSDT = OEM DSDT " 입니다.
만약, 추출한 DSDT 에서 여러가지 패치를 적용하거나 일부 내용을 수정하였다면
원본 상태가 아니므로 OEM DSDT 라고 할 수 없으며 그냥 수정된 DSDT 라고 부릅니다.
6. 장치별로 ssdt를 새롭게 생성하고 이름을 붙이는건지 아니면 장치별도 ssdt 이름이 별도로 있는건지 (일부는 그러한 역할을 하는 장치별로 구분은 되어 있는것 같긴합니다. 한 예로 샘플로 주신 ssdt-batt.aml의 ssdt는 임의로 추출해서 작성이 된건가요?
SSDT 파일의 이름은 별도로 정해져있는 것이 아니며 마음대로 정해도 됩니다.
SSDT-BATT.aml 은 저의 LG Ultra PC 15U480 - KA56K 노트북의 배터리 잔량 표시 작업을 SSDT 로 패치한 것인데
추출하여 작성한 것이 아니라 처음부터 아예 새로운 빈 파일에서 직접 만든 것입니다.
단, SSDT-BATT.aml 에서 중간에 If 문의 중괄호 { } 안의 내용은 DSDT 의 배터리 관련 내용을 가져오고 패치한 내용이 들어간 것입니다.
그리고, 이름도 제가 그냥 BATT 라고 정한 것입니다.
이 SSDT 는 배터리를 패치하기 위한 SSDT 라는 것을 나타내기 위해서 그냥 이름을 SSDT-BATT.aml 이라고 한 것입니다.
추가로, SSDT-BATT.aml 의 내용에서 OEM Table ID 라는 것이 있는데 이 부분도 단순히 어떤 SSDT 인지 식별하기 위한 ID 일 뿐입니다.
OEM Table ID 도 자신의 마음대로 정해도 됩니다.
또한, OEM Table ID 는 Config.plist 에서 일부 ACPI Table 을 Drop 할 때에 사용되기도 합니다.
여기에서, 일부 ACPI Table 을 Drop 한다는 것은 해당 Table 을 로드하지 않겠다는 의미입니다.
7. 대부분 배터리 패치에 대한 여기 싸이트의 정보는 dsdt를 추출해서 수정하는 방법인데요, 만약 dsdt를 추출해서 수정한다음 acpi폴더에 넣어야할까요? (OpenCore는 dsdt를 넣어놓지 않은것 같아보여서요.)
네, OpenCore 에서도 수정한 DSDT 를 사용할 수 있습니다.
단, DSDT 에서도 If 문과 Else 문을 사용하여 패치해야 합니다.
Mac OS 에서 작동하도록 패치한 내용이 Windows 에서도 정상적으로 작동할 것이라고 보장할 수 없기 때문입니다.
ACPI 폴더에 수정한 DSDT.aml 을 넣고 Config.plist 의 ACPI - Add 에 첫 번째 순서로 추가하면 됩니다.
8. [그리고, 온유님의 OEM DSDT 를 확인해보니] 제 oem dsdt는 어떻게 확인하셨어요? (그러고 보니 oem dsdt가 정확히 뭔지 모르겠습니다. 이게 system dsdt하고 다른거죠? (어제 MaciASL프로그램을 열어보니 기본적으로 System DSDT가 열리던데 이게 제 노트북 시스템에 있는 DSDT가 열리는 것 같더라구요.)
Google 에서 온유님의 Lenovo X1 Yoga 노트북의 커스텀맥 관련 자료를 검색해보다가 Github 사이트에서 찾았습니다.
그 Github 사이트에서 Clover 폴더의 ACPI 폴더 안에 있는 Origin 폴더가 있었습니다.
Clover 에서 F4 키를 누르면 OEM ACPI Tables 가 추출되어 Origin 폴더에 저장됩니다.
즉, 그 Origin 폴더 안에 있는 DSDT 가 온유님의 Lenovo X1 Yoga 노트북의 OEM DSDT 입니다.
https://github.com/xinyuwufei/X1Yoga-Hackintosh
9. 초보입장에서는 용어부터 생소하여서 어렵습니다. .(오래전부터 여기를 알고 출근은 대부분 매일하고 있지만 아직도 초보예요.) 아..하나만 더 알려주세요. 인젝션이라는 것이 궁금합니다.
인젝션은 영어로 Injection 이며 주입한다는 뜻입니다.
즉, 인젝션은 "추가하다" 와 같은 의미라고 보면 됩니다.
예를 들어, Mac OS 에서 밝기 조절이 작동하기 위해서는 ACPI 상에서 PNLF Device 가 존재해야 하는데
OEM DSDT 에 PNLF Device 가 없으므로 SSDT 등을 사용하여 PNLF Device 를 추가합니다.
여기에서, SSDT 등을 사용하여 PNLF Device 를 추가한다는 것은 PNLF Device 를 인젝션한다는 것과 같은 의미입니다.
10. Proper Tree-master로 config.plist 불러들인후, OC Snapshot를 누르면 기존 config.plist에 추가된 ssdt와 kext의 정보가 config.plist상에 삽입이 되더라구요. 이상태에서 활성화(True)/비활성화 시키는 방법을 사용하는데요. 이방식으로 진행해도 제대로되는건가요?
네, Enabled 항목을 활성화 (True) 로 설정하면 로드하고 비활성화 (False) 로 설정하면 로드하지 않습니다.
그리고, 저는 Proper Tree 를 아직 사용해보지 않았습니다.
주로, OpenCore Configurator 를 사용합니다.
또한, Kext 를 추가하거나 삭제하고 권한 복구와 Kernel Cache 재생성 작업을 하는 것은
/Library/Extensions 또는 /System/Library/Extensions 경로에 추가 또는 삭제하였을 때에 해당됩니다.
Clover 또는 OpenCore 와 같은 부트로더에 Kext 를 추가하는 것은 권한 복구와 Kernel Cache 재생성 작업이 필요하지 않습니다.
단, VoodooI2C.kext 와 같이 일부 Kext 는 Mac OS 업데이트를 하고 난 후에 Kernel Cache 재생성 작업을 해줘야 작동하는 경우가 있습니다.
마지막으로, 아래의 Tip 글도 참고하면 도움이 많이 될 것 같습니다. :)
[ 블루투스가 작동하지 않는 문제가 USB 포트 정리 작업이 되지 않아서 발생할 수 있다는 생각이 갑자기 떠올랐습니다.
Hackintool 에서 블루투스가 연결되어 있는 USB 포트를 Internal 로 정의하고 다른 USB 포트도 정리하여
생성한 USBPorts.kext 를 추가하고 Config.plist 의 Kernel - Add 에도 추가하고 다시 부팅해보세요]
토요일이라 배터리는 너무 복잡해보여 블루투스와 관련될듯한 usb 포트 정렬을 다시해보려 시도했는데 막히네요.
1. 해킨툴로 확인되는 usb포트중에 활성화가 된 포트가 3개 (hsp0,hsp2,hsp5) 있는데,,다 노트북에 있는 3개의 usb포트입니다. 2.0으로 되어있긴하나 3개의 usb 포트가 정상작동하네요. hsp3한개가 비활성화 되어있고, ssp0,ssp2,ssp5도 비활성화되어있습니다. [노트북이라 usb포트가 많이 있진 않네요. ]
2. 문제는 비활성화되어있는 얘들중에 블루투스와 연결된 usb포트가 어느 녀석인지 확인할수가 없네요. 비활성화된 녀석들중에 블루투스와 연결된 녀석이 있다면 현재 설정되어 있는 커넥터타입을 USB2 타입-> internal로 변경해서 활성화하면 될듯한데요. 블루투스 장치와 연결된 포트를 어떻게 찾을수 있을까요?
usb포트를 정리한다는게 비활성화된 포트들의 장치별로 재설정해서 활성화시키는 것일건데..비활성화된 녀석들의 용도가 뭔지 모르겠네요.
3. FB-Patcher를 사용한 모하비14.1+USB3잡기[JAKARTA님 게시글] 따라 한번 시도했다가 부팅안되어 다시 원상으로 돌아왔네요.
블루투스는 추가 kext 2개 더 넣고 재부팅하니 잡혔습니다.
https://x86.co.kr/tip/3577203
여기 글을 참고하니 FakePCIID_Broadcom_WKFI.kext / FakePCIID.kext 이두개를 추가해서 넣고 재부팅하니 블루투스가 잡혔네요. 하나 연결시켰네요.
해킨툴로 보니 몇가지 usb포트가 추가로 더 잡혀있네요. 블루투스가 잡혀서 사이드카도 됩니다.ㅎㅎ
문제는 두번째 조언해주신 부분인데요.
[ 그리고, 온유님의 OEM DSDT 를 확인해보니 배터리 관련 FieldUnitObject 가
BATW Method 아래에서 ECOR Field 에 추가적으로 더 선언되어 있습니다.
아래에 있는 128 Bit 가 할당된 SBMN 과 SBDN 이라는 변수는 RE1B & RECB 라는 Method 를 사용하여 해당 Buffer 를 읽도록 하는 것이 편리합니다.]
GitHub 분의 자료는 128비트 부분을 그대로 두었더라구요.
일부 앞부분은 두개가 16비트로 남겨져있구요.(SBBS, 16 //SBCC, 16)
그런데 128비트는 세분화하지 않고 그냥 두었네요. 제것과 조금 다르긴합니다.
[ GitHub dsdt ] ***************************************************************************
Method (BATW, 1, NotSerialized)
{
If (BT2T)
{
Local0 = ^BAT1.XB1S /* \_SB_.PCI0.LPC_.EC__.BAT1.XB1S */
If ((HB1A && !SLUL))
{
Local1 = One
}
Else
{
Local1 = Zero
}
If ((Local0 ^ Local1))
{
^BAT1.XB1S = Local1
Notify (BAT1, One) // Device Check
}
}
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBR0, 8,
SBR1, 8,
SBF0, 8,
SBF1, 8,
SBE0, 8,
SBE1, 8,
SBS0, 8,
SBS1, 8,
SBC0, 8,
SBC1, 8,
SBZ0, 8,
SBZ1, 8,
SBA0, 8,
SBA1, 8,
SBBS, 16
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBM0, 8,
SBM1, 8,
SBD0, 8,
SBD1, 8,
SBCC, 16
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SSB0, 8,
SSB1, 8,
SBV0, 8,
SBV1, 8,
SBO0, 8,
SBO1, 8,
SBI0, 8,
SBI1, 8,
SBT0, 8,
SBT1, 8,
SBN0, 8,
SBN1, 8
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBH0, 8,
SBH1, 8,
SBH2, 8,
SBH3, 8
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
BMNX, 128
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
BDNX, 128
}
[ 제 노트북의 oem dsdt ] ***********************************************************************
Method (BATW, 1, NotSerialized)
{
If (\BT2T)
{
Local0 = \_SB.PCI0.LPC.EC.BAT1.XB1S
If ((HB1A && !SLUL))
{
Local1 = 0x01
}
Else
{
Local1 = 0x00
}
If ((Local0 ^ Local1))
{
\_SB.PCI0.LPC.EC.BAT1.XB1S = Local1
Notify (\_SB.PCI0.LPC.EC.BAT1, 0x01) // Device Check
}
}
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBRC, 16,
SBFC, 16,
SBAE, 16,
SBRS, 16,
SBAC, 16,
SBVO, 16,
SBAF, 16,
SBBS, 16
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBBM, 16,
SBMD, 16,
SBCC, 16
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBDC, 16,
SBDV, 16,
SBOM, 16,
SBSI, 16,
SBDT, 16,
SBSN, 16
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBCH, 32
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBMN, 128
}
Field (ECOR, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBDN, 128
}
그냥두어도 무관할까요?
GitHub의 dsdt 첨부해봅니다.
참. 제가 하루에 한번씩이라도 dsdt패치방법이나 acpi핫패치부분의 뽀로로님 글을 계속 읽고 정독하고 있는데요. 몇가지 추가적으로 궁금한게 있어요.
조언부탁드려봅니다. dsdt관련해서는 회사에서 쉬는시간에 틈틈히 계속해서 보고 있답니다. 조언과 답변 감사드립니다.
1. 배터리 패티관려해서 ssdt를 어떻게 생성하는가요?
-> 자료를 찾아봐도 dsdt의 배터리 부분을 패치하여 사용하는 자료나 답변들을 찾을 수 있는데요. ssdt는 어떻게 생성하는지 궁금합니다.
MaciASL을 보다가 File>New from ACPI를 보니 여러 ssdt를 생성하는듯(?)하던데.. dsdt를 수정하여 사용하지 않고 배터리 관련 ssdt를 어떻게
생성/작업하는지 모르겠어요..
2. 이 배터리관련 ssdt는 생성한뒤 반드시 윈도우 듀얼부팅에 대비해서 If(_OSI("Darwin"))구분으로 분리해내야될것인데...어디부분을 추가하고 수정해야될지
머리가 복잡하네요. ㅠㅠ
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)
}
}
[ 제 클로버에서 추출한 oem dsdt 를 첨부해봅니다 ]
_UID 의 값이 Zero 인 것과 0x00 인 것은 걱정하지 않아도 됩니다.
겉으로 표시만 조금 다를 뿐이며 실제로는 서로 같은 값입니다.
0 이라는 값을 영문으로 표시한 것과 16 진수 (Hex) 로 표시한 것의 차이일 뿐입니다.
RE1B & RECB 라는 Method 를 사용하는 방식은 8 Bit 로 세분화할 필요가 없습니다.
온유님의 OEM DSDT 에서 SBMN 과 SBDN 이라는 변수는 GBIF Method 에서 사용되는 것을 볼 수 있는데
RECB Method 는 해당 변수의 Offset 값을 입력하고 그 뒤에 몇 Bit 인지를 입력합니다.
그런데, 배터리 패치를 하기 위해서 DSDT 를 수정하실 때 DSDT.dsl 로 디컴파일을 하고 난 후에 수정해주세요.
RECB 의 두 번째 인수에 10 진수로 입력하는데 MaciASL 이 DSDT.aml 로 컴파일하여 저장하면서 16 진수로 변환합니다.
SBMN 과 SBDN 이라는 변수는 바로 위의 Offset 값을 보시면 0xA0 으로 표시되는 것을 볼 수 있습니다.
그리고, SBMN 과 SBDN 이라는 변수 둘 다 128 Bit 이므로
다른 부분에서 기존에 SBMN 과 SBDN 이라는 변수가 사용되는 곳에 RECB (0xA0, 128) 로 치환하면 되는데
DSDT.aml 로 저장하시면 MaciASL 이 자동으로 10 진수인 128 을 16 진수 (Hex) 로 변환하여 0x80 이 됩니다.
그래서, 배터리 패치가 완료된 Github 의 DSDT.aml 에서 보면 아래의 사진과 같이 표시되는 것을 볼 수 있습니다.
추가로, RECB 를 사용하여 패치한 배터리 관련 변수는 다른 이름으로 아무거나 변경해야 합니다.
단, DSDT 에서 이미 존재하는 변수의 이름으로 변경하면 안 됩니다.
그래서, 배터리 패치가 완료된 Github 의 DSDT.aml 를 보면 기존에는 SBMN 과 SBDN 이었던 변수가 각각 BMNX 와 BDNX 로 이름이 변경되어 있습니다.
또한, 16 Bit 로 남겨져 있는 SBBS 와 SBCC 라는 변수는 다른 부분에서 사용되지 않아서 세분화하지 않은 것입니다.
다른 부분에서 사용되지 않는 변수는 16 Bit 이상이어도 세분화하지 않아도 됩니다.
MaciASL 의 검색 기능으로 변수 이름을 검색해서 다른 부분에서 사용되는지 확인하면 됩니다.
SBVO 라는 변수는 위의 사진처럼 다른 부분에서 사용되므로 8 Bit 로 세분화를 해줘야 합니다.
하지만, SBBS 라는 변수는 다른 부분에서 사용되지 않고 ECOR Field 에 정의된 자기 자신만 검색되므로 8 Bit 로 세분화하지 않아도 됩니다.
그런데, SBAE & SBRS & SBAF & SBBS 라는 변수도 다른 부분에서 사용되지 않아서 8 Bit 로 세분화하지 않아도 되는데
Github 의 DSDT 는 세분화를 굳이 했네요...
SBAE & SBRS & SBAF & SBBS 라는 변수는 안 해도 됩니다.
그리고, New from ACPI 는 자기 자신의 컴퓨터에서 추출하는 것이며 새로 생성하는 것이 아닙니다.
배터리 패치를 위한 SSDT 를 새로 생성하는 방법은 MaciASL 에서 상단 메뉴바의 File - New 를 눌러서
새로운 빈 파일을 만들고 새로 작성하면 됩니다.
단, 완전히 처음부터 새로 작성하라고 하면 ACPI 를 능숙하게 다루는 사람이 아니면 어렵게 느껴질 수 있습니다.
처음에는 DefinitionBlock 을 정의해야 합니다.
DefinitionBlock ("", "SSDT", 2, "hack", "Battery", 0)
{
}
그리고, 저 중괄호 { } 안에 내용을 입력합니다.
Scope 로 배터리 관련 Object 의 경로를 맞춰주고
Scope 하위에 DSDT 에서 배터리 패치한 Method 를 가져오는데
배터리 패치한 Method 의 바로 하위 부분에 If (_OSI ("Darwin")) 문이 들어갑니다.
그러면, If (_OSI ("Darwin")) 문의 중괄호 { } 안에 배터리 패치한 Method 의 내용이 들어가게 됩니다.
즉, 배터리 패치한 Method 의 내용이 If (_OSI ("Darwin")) 문의 중괄호로 감싸지게 됩니다.
Scope (해당 Object 의 경로)
{
Method (배터리 관련 함수의 이름, ~ )
{
If (_OSI ("Darwin"))
{
배터리 패치한 Method 의 내용
}
Else
{
Return (Rename 패치가 적용된 기존의 배터리 관련 Method)
}
}
}
먼저, 답변 감사합니다. 잘 참고되는 내용들입니다. 정독해볼게요.
제가 먼저 걱정하는 부분이... 대부분 dsdt를 패치해서 acpi폴더내에 넣었을시.. 현재 dsdt의 에러를 잡지않고 넣으면 오히려 안될것 같은 느낌때문에(?) dsdt를 사용하지 않고.
배터리 부분만 ssdt를 생성하는 방법을 고민하고 있는데요. 조언주신것처럼..
신규로 생성할시 ,
처음에는 DefinitionBlock 을 정의해야 합니다.
DefinitionBlock ("", "SSDT", 2, "hack", "Battery", 0)
{
}
그리고, 저 중괄호 { } 안에 내용을 입력합니다.
저 내용에 github의 dsdt의 내용중 배터리 부분만 복사해서 붙여넣기하고 ssdt를 생성하면 문제가 될까요?
아님. dsdt를 에러잡은후 acpi에 넣고 사용하는게 효과적일까요?(이렇게되면 윈도우 듀얼부팅에 따른 dsdt 코드수정이 더 복잡해질듯한데..)
혹시, DSDT 에서 아래의 사진과 같은 Error 를 말씀하시는 것인가요?
Syntax Error 는 ACPI Source Language 의 문법 오류인데
해당 Error 가 발생한 부분은 배터리와 관련이 없어서 배터리 패치를 위한 SSDT 를 생성하는 데에는 문제가 없을 것 같습니다.
Github 의 DSDT 를 사용하여 배터리 패치를 위한 SSDT 를 생성해도 됩니다.
그리고, 배터리 관련 함수 뿐만 아니라 배터리 관련 함수에서 사용되는 배터리 관련 FieldUnitObject 가 선언되어 있는
EmbeddedControl Region 과 Field 도 가져오고 B1B2 와 RE1B & RECB 등의 Method 도 추가해야 합니다.
제가 배터리 잔량 표시 작업을 Hot Patch & Override 방식으로 패치하는 SSDT 를 생성하였습니다.
아래에 첨부한 SSDT 를 OpenCore 의 ACPI 폴더에 넣고 Config.plist 의 ACPI - Add 에 추가해주세요.
그리고, Config.plist 의 ACPI - Patch 에서 아래의 Rename 패치를 추가해주세요.
아래에 첨부한 Config-Battery.plist 에서 ACPI - Patch 의 Rename 패치만 현재 사용중인 Config.plist 로 가져오면 됩니다.
아래의 Config-Battery.plist 로 교체하는 것이 아닙니다.
배터리 관련 FieldUnitObject 가 GBIF 와 GBST 라는 배터리 관련 Method 뿐만 아니라
_WAK 와 Scope (\_GPE) 안에 있는_L17 이라는 Method 에서도 일부 사용되었으며
External Declaration 을 추가하는 과정에서 ThermalZoneObj 라는 항목도 추가해야 하였고
이름이 서로 같은 Object 가 또 다른 Scope 에도 존재하는데 해당 Object 의 Type 이 다른 경우도 있어서
온유님의 Lenovo X1 Yoga 노트북의 배터리 잔량 표시를 위한 SSDT 생성은 전체적으로 난이도가 조금 더 높고 까다로운 작업이었습니다.
위의 내용대로 SSDT 와 Rename 패치를 적용하고 다시 부팅해서 배터리 잔량이 정상적으로 표시되는지 확인해주세요. :)
퇴근후에 첨부해주신 자료로 ssdt-x1-yoga.aml파일을 acpi폴더에 넣고,Config.plist 의 ACPI - Patch 에서 아래의 Rename 패치를 추가한뒤 재부팅하니
패닉으로 부팅이 안되었습니다. 혹시나 배터리 관련 kext를 추가해야될것같아 Kext폴더내에 ACPIBatteryManager.kext를 추가(v1.9)해봤는데 여전히 부팅이 안되네요. 제가 작업한게 잘못이 있었을까요? 수고하셔서 얘써 작업해주셨는데 적용을 잘못한건지 모르겠네요.
EFI폴더도 첨부해봅니다. OC Configurator을 통해 확인해봤을때는 수정이 된것으로 확인되는데 뭐가 잘못된것인지 모르겠습니다. ㅠㅠ
ECOR Region 과 Field 를 다른 이름으로 수정하는 것을 까먹었네요... ㅜㅅㅠ
늦은 시간에 죄송합니다.
나중에 다시 수정해서 EFI 폴더로 드리겠습니다.
SSDT 를 다시 수정하였습니다.
그리고, VirtualSMC.kext 를 사용하는 경우에는 SMCBatteryManager.kext 를 사용하는 것을 권장하므로
ACPIBatteryManager.kext 를 삭제하고 SMCBatteryManager.kext 로 교체하였습니다.
아래에 첨부한 EFI 폴더로 교체하고 다시 부팅해주세요. :)
다시 수정해주신 EFI파일로 교체하고 부팅하니..부팅성공하고 배터리도 %가 잘 잡혔습니다. (처음 부팅화면도 텍스트가 아닌 GUI로 떡하니 떠서 순간 깜놀했네요. 세심한 배려 감사합니다. 깔끔하니 텍스트 모드보다 좋습니다.)
[교체후 특이점]
1. 일부만 되던 트랙패드가 설정화면에서 상세하게 설정하도록 살아났네요.(감사해요)
2. 배터리 %표시가 살아났습니다. 잘 잡힌게 맞지요?[사진 첨부](제 요가용으로 직접 제작해주신 배터리 ssdt덕분입니다.)
3. 모든 ssdt가 윈도우와 듀얼부팅 가능하도록 수정되어서 듀얼부팅이 가능할듯 합니다. (처음 부팅시 GUI화면으로 부팅이 가능하네요.)
4. 되던게 안되는게 있어요.
-> 블루투스가 지난번 블루투스 관련 kext 2개를 넣어서 활성화가 되었었는데 블루투스가 활성화가 안되네요..ㅠㅠ(해킨툴로 usb항목을 살펴봤는데
지난번 활성화된 포트에서 블루투스 관련된 장치들이 이번엔 보이지 않네요.)
-> kext폴더내 해당 추가해줬던 kext는 있는데 작동을 안하는건지 아님 배터리 배치와 관련되어 충돌이 있는건지 모르겠습니다.
지난번에 usb정렬 시도했을때 넣었다가 삭제했었던 USBinjectAll.kext를 혹시나해서 넣고 부팅해봤는데
여전히 블루투스가 활성화가 안되고 있네요.(블루투스 비활성화)
usb정렬을 한번 해서 정리가 되어야 활성화가 될지 모르겠습니다.(추측)
참. 궁금한게 있는데요.
* 수정해주신 EFI폴더내에 추가해주신 kext의 종류별 역할이 무엇인지요?
-> SATA-unsupported.kext(사타 비활성화)
-> SMCLightSensor.kext
-> SMCProcessor.kext
-> SMCSuperIO.kext
배터리 잔량이 정상적으로 표시된다니 다행입니다. :)
그리고, 배터리 잔량이 정상적으로 표시되어야 터치패드도 같이 작동하는데 터치패드도 잘 되는 것으로 보입니다. :)
- SATA-unsupported.kext
Mac OS 디스크 유틸리티에서 노트북에 장착된 하드 디스크 또는 SSD 가 보이지 않을 때 사용합니다.
삭제해도 부팅이 잘 되고 디스크 유틸리티에서 하드 디스크 또는 SSD 가 잘 보인다면 해당 Kext 는 필요하지 않으므로 삭제해도 됩니다.
아래는 모두 VirtualSMC 의 Sensor Kexts 입니다.
- SMCLightSensor.kext
Ambient Light Sensor Device 의 _ALI 와 연관되어 작동합니다.
- SMCProcessor.kext
iStat 또는 HWMonitor 등의 App 에서 CPU 의 온도를 모니터링하는 목적으로 사용됩니다.
- SMCSuperIO.kext
위와 마찬가지로 iStat 또는 HWSensors 등의 App 에서 시스템 Fan 의 정보를 읽으면서 모니터링하는 목적으로 사용됩니다.
사진 출처
https://github.com/acidanthera/VirtualSMC/blob/master/Docs/FAQ.md
제 랩탑하고 그래픽이 같아서 제 EFI올려 드립니다. HP랩탑 종특 패치만 풀고 올려 드렸으며, 참고사항은 저도 인스톨러로는 부팅이 안되어서 일단 10.15.6에서 1차 업데이트 해놓고 그다음 OC로 부팅하여 설치를 완료 했습니다.EFI.zip
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
모니터(오류화면) 사진 찍을 때 팁(소소함) +270 | 11만 | 17.07.3020:49 | 달쇠 |
빠르고 정확한 답변을 받는 팁 및 질답자의 매너, EFI폴더 압축법 +90 | 12만 | 17.02.1014:21 | Mactopia |
Hot 오픈코어로 단일 ssd로 듀얼부팅 설정시 윈도우 블루스크린문제 해결방... +12 | 51 | 24.10.2318:25 | 헷인토시 |
Hot 새로운 os 설치, 벤츄라가 좋을까요? 세콰이어가 좋을까요? +10 | 102 | 24.10.2308:19 | 미찌콘 |
Hot 맥프로를 들여왔는데 질문이 있습니다. +7 | 71 | 24.10.2315:51 | 배고픈사람 |
15 | 24.10.2421:15 | 활주로임 | |
39 | 24.10.2322:21 | 활주로임 | |
51 | 24.10.2318:25 | 헷인토시 | |
45 | 24.10.2317:01 | 활주로임 | |
71 | 24.10.2315:51 | 배고픈사람 | |
44 | 24.10.2315:18 | 희밍현수님 | |
102 | 24.10.2308:19 | 미찌콘 | |
96 | 24.10.2213:48 | 아킬리오 | |
82 | 24.10.2210:36 | MCMC | |
58 | 24.10.2200:57 | 헷인토시 | |
147 | 24.10.2123:22 | 마요네즈 | |
282 | 24.10.1914:54 | 활주로임 | |
185 | 24.10.2017:21 | RTings | |
289 | 24.10.2000:14 | Kylee | |
118 | 24.10.1921:50 | 루이코아낭 | |
206 | 24.10.1918:03 | Gastone | |
81 | 24.10.1721:28 | Oscar | |
201 | 24.10.1712:11 | 희밍현수님 | |
70 | 24.10.1612:42 | SystemShock | |
307 | 24.10.1517:37 | Gastone | |
1315 | 24.10.1517:20 | 물만두 | |
1624 | 24.10.1317:18 | 물만두 | |
1274 | 24.10.1315:07 | Steer | |
872 | 24.10.1004:51 | Steer | |
188 | 24.10.0920:24 | KImET | |
929 | 24.10.0915:49 | lesmi | |
179 | 24.10.0911:23 | LumOS | |
73 | 24.10.0902:16 | lesmi | |
909 | 24.10.0822:09 | 애플맨 | |
1314 | 24.10.0810:58 | soullees | |
113 | 24.10.0723:26 | 오십견 | |
1234 | 24.10.0723:14 | Steer | |
116 | 24.10.0721:40 | 서재희 | |
69 | 24.10.0704:04 | g2030h61 | |
89 | 24.10.0704:00 | g2030h61 | |
93 | 24.10.0620:14 | SystemShock | |
113 | 24.10.0617:57 | 늘심심 | |
1372 | 24.10.0601:48 | 아스타틴 | |
1271 | 24.10.0515:04 | lesmi | |
129 | 24.10.0422:58 | 낡은기계 | |
544 | 24.10.0315:33 | oreo | |
118 | 24.10.0315:26 | 매치포인트 | |
175 | 24.10.0313:01 | 매치포인트 | |
149 | 24.10.0311:30 | KAKU | |
372 | 24.10.0207:44 | 데스맥 | |
255 | 24.09.3014:22 | 민준송 | |
174 | 24.09.2922:21 | oreo | |
133 | 24.09.2917:58 | 수박 | |
111 | 24.09.2913:21 | 루마루 | |
206 | 24.09.2910:19 | 루마루 | |
141 | 24.09.2723:18 | 머트 | |
146 | 24.09.2720:41 | ashly | |
230 | 24.09.2716:50 | loopers | |
213 | 24.09.2602:42 | Caper | |
288 | 24.09.2301:36 | 낡은기계 | |
164 | 24.09.2122:38 | Door | |
228 | 24.09.2108:35 | 루베콘 | |
503 | 24.09.2022:16 | 에잉 | |
225 | 24.09.1910:03 | 밤가시 | |
306 | 24.09.1822:20 | SUNWAYFOTO | |
732 | 24.09.1815:34 | Nelson | |
444 | 24.09.1814:34 | sebali | |
237 | 24.09.1813:37 | Panictosh | |
338 | 24.09.1801:27 | SUNWAYFOTO | |
155 | 24.09.1719:17 | 그냥인간 | |
331 | 24.09.1620:36 | dlraud | |
217 | 24.09.1618:45 | Nelson | |
102 | 24.09.1612:07 | 아스타틴 | |
204 | 24.09.1522:02 | lesmi | |
265 | 24.09.1323:56 | 윤수꾸하하 | |
644 | 24.09.1319:18 | 뚜비 | |
1550 | 24.09.1200:33 | Steer | |
255 | 24.09.0918:08 | 상큼버터 | |
1446 | 24.09.0717:13 | 인터찹 | |
1554 | 24.09.0711:07 | 서재희 | |
1464 | 24.09.0113:39 | 시습이 | |
495 | 24.08.3022:44 | 블루 | |
435 | 24.08.2911:20 | lesmi | |
451 | 24.08.2823:04 | 김덕뱀 | |
327 | 24.08.2517:14 | 그냥구름 |
제가 EFI 폴더를 조금 수정해 보았습니다.
아래에 첨부한 EFI 폴더로 교체하고 다시 부팅해보세요.
EFI.zip