질문용 시스템 사양 | 1번 |
---|---|
추가사양 및 설치(할)OS | 카탈리나 10.15.7 |
공지숙지/증상설명 | 숙지 |
*적용중인 도장
이분께서 적어주신 스크립트로 dsdt 패치를 진행하는데 에러가 두개 나옵니다.
최대한 찾아가면서 수정을 시도해 보는데 에러가 안고쳐집니다....ㅠㅠ
패치된 버전 첨부합니다...ㅠㅠ 왜 에러가 나는걸까요...ㅠㅠ
직접 DSDT 를 수정하는 방식으로 배터리 패치 작업을 진행해주세요.
질문글의 본문에 링크하신 스크립트는 질문자님의 LG Gram 15Z990 - VA50K 노트북에 사용할 수 없는 것으로 보입니다.
SMD0 이라는 FieldUnitObject 가 DSDT 의 최상단 Root 경로에서 PNVA 라는 SystemMemory Region 의 PNVA Field 에 선언되어 있는데
H_EC Device 에서 ECF4 라는 EmbeddedControl Region 의 ECF4 Field 에도 선언되어 있습니다.
이로 인하여 스크립트가 배터리와는 관련이 없는 다른 영역에서 사용되는
별개의 SMD0 이라는 FieldUnitObject 에도 RECB Method 로 치환되어 버리는 문제가 발생하고
이로 인하여 Syntax Error 가 발생하였습니다.
위의 사진에서 다음과 같이 수정하면 Syntax Error 는 해결되지만
SMD, 8,
스크립트에 RECB Method 를 인젝션하는 내용이 없는 것으로 보이며 따로 추가해야 하는데
배터리와 관련이 없는 별개의 SMD0 이라는 FieldUnitObject 도 치환되어 버렸습니다.
Scope (_SB.PCI0) 의 I2C0 Device 와 같은 부분에서 배터리와 관련된 SMD0 이라는 변수가 사용될 리가 없죠.
저는 직접 DSDT 를 수정하여 배터리 패치 작업을 진행하는 것을 권장합니다.
그리고, 아마 스크립트 만으로 배터리를 패치하더라도 배터리 잔량 표시가 정상적으로 되지 않을 거예요.
LG Gram 노트북이라면 OEM ACPI Tables 중에서 DSDT 뿐만 아니라
다른 OEM SSDT Tables 에서도 OEM DSDT 에서 H_EC Device 의 EmbeddedControl Region 에 선언된 일부 변수가 사용되기도 합니다.
특히, OEM SSDT Tables 중에서 XnSsdt 와 FwiTable 을 한번 확인해보세요.
VER_ 과 CBT_ 등의 FieldUnitObject 가 OEM DSDT 로부터 External Declaration 되어 있고 외부로부터 참조하고 있다면
이의 경우에는 DSDT 뿐만 아니라 SSDT 도 수정하고 수정한 SSDT 를 적용할 때 수정한 SSDT 에 해당하는 OEM SSDT Table 을 Drop 해야 합니다.
전에, 이와 비슷한 사례의 질문글이 있었습니다.
아래의 질문글의 댓글도 참고해보세요.
위의 sjlee 님의 LG Gram 15ZD980 - GX7BK 노트북은 EmbeddedControl Region 을 포함하는 EC 계열의 Device 가
OEM DSDT 가 아닌 특정 OEM SSDT Table 에 존재했었습니다.
현재 사용중이신 EFI 폴더와 어떤 ACPI 패치 관련 SSDT 를 사용하고 있고
VoodooI2C 의 로그를 확인하여 어떤 오류가 발생하고 있는지를 확인해야 도움을 정확하게 드릴 수 있습니다.
그리고, IOReg 도 추출하여 보내주세요.
https://voodooi2c.github.io/#Troubleshooting/Troubleshooting
터치패드 관련 Kext 는 VoodooI2C.kext 와 VoodooI2CHID.kext 만 사용하면 될 것으로 보입니다.
GenI2C 를 실행하고 Information 탭의 정보와 Diagnosis 탭에서 Diagnosis 버튼을 누른 후의 결과를 캡쳐한 2장의 스크린샷을 보내주세요.
그리고, VoodooI2C 의 로그는 GenI2C 의 상단 메뉴바의 Debug 에 있습니다.
VoodooI2C 의 로그도 저장하여 댓글로 첨부하여 보내주세요.
현재, IOReg 를 확인해보니 TPD0 Device 의 APIC Pin 은 0x10 으로 보이며 0x2F 보다 작습니다.
즉, Interrupt 모드 중에서 GPIO 가 아닌 APIC 로 작동시킬 수도 있을 것 같습니다.
이의 경우에는 TPD0 Device 의 _CRS 에서 GPIO Pin 에 해당하는 SBFG 가 Concatenate 되거나 Return 되지 않아야 합니다.
Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFI)) 가 반환되어야 할 거예요.
또한, OpenCore 가 아닌 Clover 를 사용한다면 굳이 SSDT 를 사용하여 패치하지 말고 DSDT 를 직접 수정하여 패치하는 것이 편리할 수도 있겠네요.
추가로, EFI 폴더를 확인해보니 VirtualSMC 를 사용할 때에는
ACPIBatteryManager 가 아닌 SMCBatteryManager 를 사용하는 것을 권장합니다.
그리고, VoodooPS2Controller.kext 의 Plugin 으로 포함되어 있는 VoodooInput.kext 는 삭제해주세요.
VoodooI2C.kext 의 Plugin 으로 포함되어 있는 VoodooInput.kext 와 중복됩니다.
VoodooI2C 의 작동 방식인 Interrupt ( GPIO 또는 APIC ) 모드와 Polling 모드가 무엇인지 공부해보세요.
그리고, I2C 방식의 터치패드 장치에 해당하는 Device 의 _CRS Method 를 다루게 될 것입니다.
_CRS Method 에서 ConcatenateResTemplate 문이 사용됩니다.
사진 출처 - ACPI Specification 기술 문서
https://uefi.org/sites/default/files/resources/ACPI_6_3_May16.pdf
즉, _CRS 에서 ConcatenateResTemplate 의 인수에 어떤 Object 가 들어가서 Return 되는지에 따라서
다음과 같은 VoodooI2C 의 작동 방식이 달라지게 됩니다.
- Interrupt (GPIO) 모드
- Interrupt (APIC) 모드
- Polling 모드
Mac OS 에서 I2C 방식의 터치패드가 GPIO Controller 에 의하여 Interrupt 모드로 작동하려면
Return (ConcatenateResTemplate (SBFB, SBFG))
APIC Controller 에 의하여 Interrupt 모드로 작동하려면
Return (ConcatenateResTemplate (SBFB, SBFI))
Polling 모드로 작동하려면
Return (ConcatenateResTemplate (SBFB, SBFI))
또는 Return (SBFB)
여기에서, SBFB 는 I2cSerialBusV2 에 해당하는 Object 이며
SBFG 는 GPIO Pin 이고 SBFI 는 APIC Pin 입니다.
그런데, VoodooI2C 의 작동 방식인 Interrupt ( GPIO 또는 APIC ) 모드와 Polling 모드도 각각 지원 조건이 있습니다.
아래의 사진은 DSDT 에 따른 VoodooI2C 의 작동 방식인 Interrupt ( GPIO 또는 APIC ) 모드와 Polling 모드의 지원 여부에 대한 개요표입니다.
" = " 는 위와 같다는 의미입니다.
더불어, GPIO Controller 에 의하여 Interrupt 모드로 작동하려면
OEM DSDT 에서 GPIO Controller 에 해당하는 GPI0 Device 의 _STA 에서 Return (0x0F) 를 반환하도록 하여
GPIO Controller 도 활성화해야 Interrupt (GPIO) 모드로 작동할 수 있습니다.
참고로, Interrupt (APIC) 모드와 Polling 모드는 GPIO Controller 를 활성화할 필요가 없습니다.
또한, Mac OS 에서 I2C 방식의 터치패드가 APIC Controller 에 의하여 Interrupt 모드로 작동하려면
APIC Pin 에 해당하는 값이 0x2F 보다 작거나 같아야 합니다.
만약, APIC Pin 에 해당하는 값이 0x2F 보다 크면 Interrupt (APIC) 모드는 사용이 불가능하며
GPIO Controller 에 의해서만 Interrupt 모드로 작동시킬 수 밖에 없습니다.
그 외에도, Mac OS 에서 I2C 버스 속도 상수인 SSCN 과 FMCN 이 누락되어서 I2C 방식의 터치패드가 작동하지 않는 경우에는
SSCN 및 FMCN 도 추가로 인젝션해야 합니다.
아래의 사이트를 참고하여 VoodooI2C 에 대하여 공부해보세요.
GenI2C를 사용하지 않고 다음 글을 참고하여 직접 DSDT 를 수정하는 방법으로 시도해보세요.
단, 난이도가 높은 작업입니다.
https://www.penghubingzhou.cn/2019/01/06/VoodooI2C%20DSDT%20Edit/
https://www.penghubingzhou.cn/2019/07/24/VoodooI2C%20DSDT%20Edit%20FAQ/
https://blog.gzxiaobai.cn/2020/05/17/用热补丁修理你的触摸板(TouchPad-Hotpatch)/
DSDT 를 직접 수정하여 VoodooI2C 를 설치하는 전체적인 과정은 다음 사이트를 참고해주세요.
https://voodooi2c.github.io/#Installation/Installation
다음 글은 GPIO Pinning 에 대한 내용입니다.
https://voodooi2c.github.io/#GPIO%20Pinning/GPIO%20Pinning
그 외에, VoodooI2C 에 대한 자세한 설명은 다음 사이트를 참고해주세요.
https://voodooi2c.github.io/#Introduction/Introduction
https://voodooi2c.github.io/#Polling%20Mode/Polling%20Mode
https://voodooi2c.github.io/#Satellite%20Kexts/Satellite%20Kexts
_STA Method 가 무엇인지는 아래의 글도 참고해주세요.
추가로, SSCN 및 FMCN 이 누락되어서 Mac OS 에서 I2C 방식의 터치패드가 정상적으로 작동하지 않을 때
Intel 8th Gen Whiskey Lake 계열의 경우에는 SSCN 및 FMCN 을 PKG3 Method 와 연관하여 인젝션하는 방식을 주로 사용하는 것 같아요.
위의 사진은 예시일 뿐이며 질문자님의 DSDT 에 \_SB.PCI0.I2C0 이라는 Scope 경로에 잘 맞추어서 입력하면 됩니다.
Method (PKG3, 3, Serialized)
{
Name (PKG, Package (0x03)
{
Zero,
Zero,
Zero
})
PKG [Zero] = Arg0
PKG [One] = Arg1
PKG [0x02] = Arg2
Return (PKG)
}
Method (SSCN, 0, NotSerialized)
{
Return (PKG3 (SSH1, SSL1, SSD1))
}
Method (FMCN, 0, NotSerialized)
{
Name (PKG, Package (0x03)
{
0x0101,
0x012C,
0x62
})
Return (PKG)
}
그리고, GenI2C 의 정보 화면을 보니 APIC Pin 의 값이 0x10 이 아니라 0x33 으로 표시되네요.
추출하여 보내주신 IOReg 에서는 0x10 인 것 같았는데...
실제로, APIC Pin 의 값이 0x33 이 맞다면 Interrupt 모드는 GPIO Controller 에 의해서만 작동이 가능할 거예요.
또한, I2cSerialBusV2 에 해당하는 SBFB 가 _CRS 에서는 사용되지 않고
I2CM 이라는 Method 에 따로 정의되어 있는 I2cSerialBusV2 를 사용하는 경우도 있는데 이 부분도 노트북마다 다릅니다.
SBFB 대신에 I2CM Method 가 사용되는 것만 다르다는 차이점이 있습니다.
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
모니터(오류화면) 사진 찍을 때 팁(소소함) +270 | 11만 | 17.07.3020:49 | 달쇠 |
빠르고 정확한 답변을 받는 팁 및 질답자의 매너, EFI폴더 압축법 +90 | 12만 | 17.02.1014:21 | Mactopia |
Hot 오픈코어로 단일 ssd로 듀얼부팅 설정시 윈도우 블루스크린문제 해결방... +13 | 59 | 24.10.2318:25 | 헷인토시 |
Hot 새로운 os 설치, 벤츄라가 좋을까요? 세콰이어가 좋을까요? +10 | 117 | 24.10.2308:19 | 미찌콘 |
Hot 맥프로를 들여왔는데 질문이 있습니다. +7 | 87 | 24.10.2315:51 | 배고픈사람 |
12 | 24.10.2513:02 | 김밉상 | |
31 | 24.10.2421:15 | 활주로임 | |
48 | 24.10.2322:21 | 활주로임 | |
59 | 24.10.2318:25 | 헷인토시 | |
54 | 24.10.2317:01 | 활주로임 | |
87 | 24.10.2315:51 | 배고픈사람 | |
117 | 24.10.2308:19 | 미찌콘 | |
102 | 24.10.2213:48 | 아킬리오 | |
86 | 24.10.2210:36 | MCMC | |
61 | 24.10.2200:57 | 헷인토시 | |
157 | 24.10.2123:22 | 마요네즈 | |
739 | 24.10.1914:54 | 활주로임 | |
189 | 24.10.2017:21 | RTings | |
697 | 24.10.2000:14 | Kylee | |
118 | 24.10.1921:50 | 루이코아낭 | |
206 | 24.10.1918:03 | Gastone | |
82 | 24.10.1721:28 | Oscar | |
204 | 24.10.1712:11 | 희밍현수님 | |
70 | 24.10.1612:42 | SystemShock | |
308 | 24.10.1517:37 | Gastone | |
1318 | 24.10.1517:20 | 물만두 | |
1624 | 24.10.1317:18 | 물만두 | |
1275 | 24.10.1315:07 | Steer | |
875 | 24.10.1004:51 | Steer | |
192 | 24.10.0920:24 | KImET | |
931 | 24.10.0915:49 | lesmi | |
182 | 24.10.0911:23 | LumOS | |
73 | 24.10.0902:16 | lesmi | |
909 | 24.10.0822:09 | 애플맨 | |
1315 | 24.10.0810:58 | soullees | |
115 | 24.10.0723:26 | 오십견 | |
1234 | 24.10.0723:14 | Steer | |
117 | 24.10.0721:40 | 서재희 | |
73 | 24.10.0704:04 | g2030h61 | |
89 | 24.10.0704:00 | g2030h61 | |
95 | 24.10.0620:14 | SystemShock | |
113 | 24.10.0617:57 | 늘심심 | |
1372 | 24.10.0601:48 | 아스타틴 | |
1272 | 24.10.0515:04 | lesmi | |
131 | 24.10.0422:58 | 낡은기계 | |
547 | 24.10.0315:33 | oreo | |
118 | 24.10.0315:26 | 매치포인트 | |
177 | 24.10.0313:01 | 매치포인트 | |
151 | 24.10.0311:30 | KAKU | |
382 | 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 | 루마루 |
저제품이 아마 있을텐데요?
있는 dsdt를 사용하시는게 빠를겁니다.
아마 후기글에 보시면 dsdt랑 다 첨부 되있으실거에요