안녕하세요, Ks J입니다!
이렇게 글을 쓰게된 것은 최근에 UEFI 보드들이 많이 보급이 되면서 DSDT패치를 굳이 해주지 않아도,
부트로더인 클로버나 카멜레온이 대부분 알아서 잡아주는터라 저 또한 DSDT에 손을 댈 일이 없었는데요.
부트로더를 없애고 Bios패치 방식으로 하는 Ozmosis를 사용하게 되다보니,
이것 저것 인식이 안되는 부분들도 있고 골치아픈 부분들이 있어서 DSDT패치를 감행하게 되면서
여러가지로 아직까지도 DSDT패치를 하는 분들을 위해 소소하게 알아낸 부분들을 팁으로 정리하면 좋겠다 싶어서 글을 작성하게 되었습니다.
첫째로 DSDT가 무엇인가?에 대해서 여러모로 알아볼 필요가 있다고 생각합니다.
굳이 아주 자세하게는 아니더라도, 최소한으로 DSDT가 자신의 컴퓨터 정보를 담고있는 집합체 정도라는 사실만 알아두더라도 괜찮을 것 같습니다.
대체로 DSDT의 경우 컴퓨터의 하드웨어적 정보들을 담고 있는 것은 맞으나,
그렇다고 모든 하드웨어적 정보들을 담고 있는 것은아니다라는 부분입니다.
아직 구체적인 패치방법들을 찾지못해서일 수도 있겠지만, 현재 제가 알아본 바로는
컴퓨터에 연결한 블루투스 동글 (USB형태)라던지, 스피커나 모니터에 관련한 정보들은 DSDT에 없는 경우가 대부분이었습니다.
또한 내장그래픽의 경우도 DSDT를 추출할 시에 존재하지도 않는 것으로 나오며,
내장 Ethernet 또한 잘못된 경로에 정보가 적혀있기도 했습니다.
그리고 DSDT 패치를 하면서 중요하게 여겨지는 스피드스텝관련한 부분도 메인보드의 기종에 따라
되기도 하고, 되지 않기도 하며, 이 부분은 SSDT라고 불뤼는 부분을 DSDT에 포함시켜 패치해주거나 하기도 해야합니다.
어쨌거나, 확실한건 DSDT가 만능은 아니라는 것입니다.
그럼에도 불구하고! DSDT를 어느정도 패치를 했느냐, 하지 않았느냐에 따라서 시스템의 안정도나
인식되지 않았던 하드웨어가 인식되거나 하는 부분들이 존재하기 때문에 DSDT가 없어도 잘 동작하는 경우를 제하고는 대부분의 시스템에서
DSDT 패치가 어느정도 필요하다는 것입니다.
그렇다면, 둘째로는 DSDT를 어떻게 구하느냐?입니다.
이 부분은 직접 추출하는 방법이 가장 좋다고 말씀드릴 수 있습니다.
직접 추출은 Mac OS X에서 추출하는 방식과, Windows를 설치하여 추출하는 방식
그리고 우분투 Live를 통하여 추출하는 방식으로 나눌 수 있는데, 저의 경우에는 Mac OS X에서 직접 추출하는 방식을 사용하였습니다.
최근의 UEFI 보드이면서 기가바이트의 제품인 경우 Q-Flash를 통하여 Rom 파일을 저장할 수 있습니다.
이 Rom파일을 가지고 OZMTool이라는 프로그램을 사용하여 dsdt를 바로 추출해낼 수 있습니다.
굳이 이 프로그램이 아니더라도 DSDT SE라는 프로그램이나 MaciASL이라는 프로그램 등을 사용하셔서
DSDT를 추출해낼 수 있습니다.
Windows의 경우에는 에베레스트라는 프로그램에서 DSDT 추출이 가능하며,
DSDT SE 윈도우 버전을 통하여서도 DSDT 추출이 가능합니다.
우분투의 경우는 사용해본 적이 없어서 어떻게 추출하는지는 모르므로 생략하도록 하겠습니다.
DSDT를 추출할 때에 주의 사항이 있는데,
반드시 기존에 적용한 DSDT를 제거한 후에 DSDT를 추출해주셔야 한다는 부분입니다.
DSDT가 적용된 상태에서 DSDT를 추출해버리면 기존의 적용된 DSDT의 내용으로 추출되기 때문에,
반드시 기존의 DSDT를 제거하신 후에 추출하셔야만 제대로된 HW정보를 담은 DSDT가 추출된다는 것입니다.
이렇게 DSDT를 추출하면 그것으로 끝인가?? 싶으시겠지만,
유감스럽게도! DSDT 패치를 감행하여야만 합니다.
오류가 아마 수백개정도 나오는 경우가 태반이리라 생각됩니다.
제가 사용하는 보드만 하여도 DSDT 추출시 오류만 150개가 훌쩍 넘었으니깐 말이죠.
이제부터 DSDT패치를 하면서 제가 겪었던 오류 수정법 등을 여기다 적도록 하겠습니다.
저 또한 구글링이나 인터넷 검색을 통하여 알아낸 방법들이 대부분이어서, 굳이 적지 않아도 검색만으로 어느정도 해결이 가능은 합니다만
정보들이 이곳저곳에 퍼져있어 한번에 정리할 필요가 있다고 생각이 들기 때문에 적어두는 것이니 양해 부탁드리겠습니다.
1. Object does not exist (????)
위의 오류의 경우 ????라는 이름을 가진 객체가 존재하지 않기 때문에 생기는 오류입니다.
실제로 정말로 존재하지 않아서 나는 오류보다는 문법적으로 syntax 오류가 있는경우 발생되는 경우가 대부분이었습니다.
따라서 위 오류는 syntax오류가 먼저 해결된 후에 손을 보는 것이 가장 삽질을 줄이는 방법이라고 할 수 있겠습니다.
한번 syntax오류가 나면 위의 오류가 기본적으로 수십 개 이상 나버리기 때문에, 일일이 수정하는게 힘들기 때문입니다.
만일 syntax오류가 없는데도 위의 오류가 난다면 해결법은 두가지 정도가 있습니다.
다른 dsdt를 참고하여 필요한 부분을 발췌하여 추가시키거나, 해당 부분을 제거해버리거나 입니다.
2. syntax error ~~~
위의 오류는 문법적으로 (나 )가 잘못 추가되었거나 }의 부족 혹은 ,의 잘못된 사용등으로 인하여 발생하는 오류입니다.
가장 간단한 해결은 지우고 추가해주고 지지고볶고 하는 것인데 (-_-;;) 그래도 해결이 안되는 경우가 많습니다.
저의 보드를 예로 들면 다음과 같을 때에 오류가 나거나 했었습니다.
If (CondRefOf (_SB.PCI0.XHC.PS0X))
{
PS0X
}
위의 경우 PS0X를 지워버리면 오류가 해결됩니다.
혹시라도 위와 비슷한 형태의 오류라면 과감하게 PS0X와 PS3X같은 부분들을 지워버리신 후 컴파일을 눌러주시면 되겠습니다.
실로 사인택스 오류는 정말 다양한 이유로 인하여 발생되는 오류이니만큼 아주 구체적인 해결방법이 없는것이 현실입니다.
가장 좋은 방법은 역시, 잘 패치된 DSDT를 구하여 검색하셔서 해당부분이 어떠한 방식으로 패치되었는가를 보고,
수정을 감행하시는게 가장 좋다고 생각됩니다. (실제로 대부분의 DSDT패치는 잘 패치된것만 구하면 금방 수정이 가능합니다.)
3. syntax, error unexpected PARSEOP_~~
위의 경우 PARSEOP_뒤의 부분이 문법적으로 잘못되어 발생하는 부분이 대부분입니다.
저의 경우는 다음과 같을 때에 오류가 났었습니다.
Method (ADBG, 1, Serialized)
{
If (CondRefOf (MDBG))
{
Return (MDBG)
Arg0
}
Return (Zero)
}
위의 경우 Arg0에 오류가 있었는데, 이경우는 간단하게 Arg0을 아래와 같이 지워버리면 해결되는 오류였습니다.
Method (ADBG, 1, Serialized)
{
If (CondRefOf (MDBG))
{
Return (MDBG)
}
Return (Zero)
}
4. Use of compiler reserved name (_T_0), (_T_1)
위의 경우는 Remark 부분에 해당되는 자그마한 충고?같은 건데요, 해결법은 간단합니다.
_T_0과 _T_1를 모두 찾으셔서 T_0, T_1로 바꿔주시면 됩니다.
Command + F를 하신 후에 Replace를 통하여 바꾸시면 편하게 바꾸실 수 있습니다.
Warning에러로 Unkown reserved name _DEP에러가 난다면 이 또한 DEP로 바꿔주시면 가볍게 해결이 됩니다.
5. Possible operator timeout is ignored
위 오류는 왜 생기는지는 모르겠습니다만, 아래의 경우에 해당되는 분이라면 다음과 같이 패치해주시면 됩니다.
Acquire (MUT0, 0x0FFF) <<여기에 오류가 생기는 경우
Acquire (MUT0, 0xFFFF) << 0x0FFF를 0xFFFF로 고쳐주시면 오류가 바로 해결됩니다.
6. Effective AML package length is Zero
위 오류는 패키지의 경우 가지는 값이 Zero일때 생기는 오류입니다.
Return (Package (0x00) {})
굳이 오류부분이 위와 동일하지 않더라도 Package (0x00)으로 인해 생기는 부분이므로
가볍게 Package (0x01)등으로 패치해주시면 해결됩니다.
위의 경우는 아래와같이 바꾸면 해결되는 부분입니다.
/*-------------------수정------------------*/
Return (Package (0x01) {})
위의 방식으로 패치하는 것이 아니라고 합니다.
Return (Zero)가 올바른 방식이라고 합니다.
/*----------------------------------------*/
위의 방식으로 패치를 하게 되면 _DEP 관련 오류가 활성화 되므로 DEP로 이름 변환을 추천드립니다.
7. Called method may not always return a value 혹은 Not all control paths return a value (~~~)
위의 경고는 해당 method들이 Return으로 반환값을 항상 넘겨주지 않기 때문에 발생하는 오류입니다.
위 경우는 해당 Method가 끝나는 } 전에 Return (Zero)등을 넣어주시면 오류가 해결됩니다.
그런데 아직까지 모르겠는 부분이 Return (Zero)만을 반환하지 않는 메소드들이 있을텐데,
이 부분을 어떻게 판단하여 Zero대신 올바른 값을 넣어서 반환시킬 수 있을까라는 부분입니다.
어쨌거나 오류는 위처럼 반환하게끔 해주면 해결되는 부분입니다.
Method (_PLD, 0, Serialized)
{
Name (PLDP, Package (0x01)
{
Buffer (0x10)
{
/* 0000 */ 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x71, 0x0C, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00
}
})
CreateBitField (DerefOf (Index (PLDP, Zero)), 0x40, VIS)
If (LNot (And (PR2S (0x0F), PR2)))
{
And (VIS, Zero, VIS)
}
Return (PLDP)
}
위의 메소드처럼 Return(PLDP)가 Method가 끝나는 } 바로 전에 위치해있으면 됩니다.
(오류 해결시엔 Return (Zero)로 넣어주시면 됩니다.)
/* -----------------------------추가
8. Control Method should be made Serialized (due to creation of named objects within)
위 오류는 NotSerialized라고 되어있는부분에 대한 오류인데, 해결법은 간단하게
NotSerialized -> Serialized로 고쳐주면 해결되는 부분입니다.
// 정보를 제공해주신 촉촉한초코칩ㅋ님께 감사의 말씀 드립니다.
/* ----------------------------------------------------------------- */
제가 겪은 대부분의 오류는 위의 정도가 전부였습니다.
이렇게 오류 패치를 하여서 오류도, 경고도, remark로 재참조도 전부 없이 깔끔하게 컴파일이 된다면
다음으로 작업해야 할 부분은 H/W정보를 추가하고 수정하는 부분입니다.
대체로 DSDT를 이용하여 Ethernet, Audio, Graphic관련 부분을 많이 패치합니다.
제 경우도 위 3가지를 크게 벗어나지 않았는데요, 저의 경우에는 특이하게도 구글링하여 구한 DSDT에 USB관련한 치명적인 오류가 있어서
ECH및 XCH도 패치를 하여 사용하고 있는 상태입니다.
어쨌거나, 대표적인 세가지 부분을 추가하는 방법에 대해서 알아보도록 하겠습니다.
어렵지 않고, 복사 붙여넣기 하여 넣어주기만 하면 되는 부분인지라 쉽게 패치하실 수 있으리라 생각됩니다.
1. Graphic
Ethernet을 제외한 오디오 및 그래픽은 _SB.PCI0이란 경로 안에 위치하게 됩니다.
같은 이름이 세네게 정도 더 있는데, 이들 장치가 위치한 _SB.PCI0은 맨위로부터 4번째정도에 위치해있는 폴더이니 잘못된 경로에 장치를 추가하지 않도록
각별한 주의가 요구됩니다.
특이나 이 경로는 보드에 따라 달라지기도 하기 때문에 꼭 제가 말씀드린 경로에 장치가 위치해야하는 것은 아닙니다.
일단은 대표적으로 많이 위치해있는 경로를 기준으로 설명드리는 것이기에, 참고해주시면 감사하겠습니다.
외장 그래픽을 사용하는 경우에는 굳이 그래픽 패치가 필요하지는 않습니다.
그냥 잘 호환되는 nvidia 그래픽 카드나 radeon등 ati계열 그래픽 카드를 꼳기만 해도 잘 인식이 되는 부분이기 때문입니다.
그러나 내장 그래픽을 사용하는 경우에는 DSDT가 어느정도 필수 패치가 되어버립니다.
그 이유는 DSDT에 내장 그래픽 관련 부분이 존재하지 않는 경우가 많기 때문입니다.
이런경우 아래의 코드를 추가해주시면 됩니다.
Device (IGPU)
{
Name (_ADR, 0x00020000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"AAPL,ig-platform-id",
Buffer (0x04)
{
0x03, 0x00, 0x22, 0x0D
},
"model",
Buffer (0x18)
{
"Intel HD Graphics 4600"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
위의 코드를 그대로 추가시켜주시면 되는데, 중요한 부분이 있습니다.
AAPL, ig-platform-id의 경우인데, 이 부분에 들어가는
Buffer코드값은 보드에 내장된 그래픽카드의 종류에 따라 달라지게 됩니다.
HD4600을 기준으로 0x0D220003이 되므로 이것을 역방향으로
0x03, 0x00, 0x22 0x0D로 넣어주어야 제대로 인식이 됩니다.
이외의 그래픽카드와 관련한 헥스값들은 아래의 주소로 들어가셔서 참고하여 작성하시면 크게 문제없이 되리라 생각됩니다.
그럼에도 hd4400과 같은 그래픽카드는 다른 추가적인 패치가 필요할 수도 있기에 검색하셔서 해결해보실 필요가 있을 것 같습니다.
아래는 참조 주소입니다.
https://www.tonymacx86.com/graphics/131937-chimera-hd-graphics-bootflags-igpenabler-igplatformid-igpdeviceid.html
2. Audio
오디오와 관련한 패치는 굉장히 많습니다.
그만큼 패치가 좀 까다로운 부분이 많고 같은 오디오를 사용하는데도, 되는 보드가 있고 안 되는 보드가 있는만큼
골치아픈 부분이 오디오 관련 부분입니다.
오디오 관련 부분에 해당하는 패치는 보드마다 다르기에 ALC892를 기준으로 작성하도록 하겠습니다.
기본적으로 오디오는 Audio로 추가가 안되며 HDEF로 추가가 됩니다.
또한, 가장 중요한 부분인데 HDEF만 패치가 되었다 하여서 반드시 작동이 되거나 하지는 않는다는 것입니다.
제가 사용하는 보드를 기준으로 Name (IOST, 0x05)라는 패치가 더 필요했었습니다.
이 이유는 저도 잘 모르겠지만, 위의 패치가 되어있지 않은 경우 아무리 HDEF패치를 먹여도
오디오 코덱이 잡히지 않는 현상이 일어났기 때문입니다.
확인하시어 Name (IOST, 0x05)부분의 헥스값이 0xFFFF와 같은 방식으로 되어있다면 0x05등으로 패치하셔서
코덱이 정상적으로 잡히게끔 해주시는 것이 좋을 듯 합니다.
Device (HDEF)
{
Name (_ADR, 0x001B0000)
OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
Field (HDAR, WordAcc, NoLock, Preserve)
{
DCKA, 1,
Offset (0x01),
DCKM, 1,
, 6,
DCKS, 1,
Offset (0x08),
Offset (0x09),
PMEE, 1,
, 6,
PMES, 1
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x0D, 0x04))
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0E)
{
"AAPL,slot-name",
Buffer (0x09)
{
"Built In"
},
"name",
Buffer (0x19)
{
"Realtek Audio Controller"
},
"model",
Buffer (0x20)
{
"Realtek ALC892 Audio Controller"
},
"device_type",
Buffer (0x11)
{
"Audio Controller"
},
"layout-id",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"PinConfigurations",
Buffer (Zero) {},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
달아주신 덧글을 이제서야 읽었네요...,
알람이 안뜨다보니 확인을 미처 못했습니다 ㅜ;
레티나의 경우에는 저도 미미한 차이인지라 큰 실감은 못하고 있는 상태이기는 하나
디자인작업을 하고 그럴 때에는 굉장히 유용하게 잘 사용하고 있는 중입니다 ㅎㅎ
오즈모시스같은 경우에는, 아무래도;
제작 메인보드 자체가 다른 메인보드라서, 제 메인보드에 맞게끔 수정을 해주려면
가장 좋은 적용방법이 dsdt밖에 없어 구글링하며 알게된 것들로
이것저것 적용하며 입맛에 맞게 쓴다고 보는게 좋을 것 같습니다.
덧글 감사합니다 :)
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
macOS Sequoia 15.0.1 24A348 정식버젼 고스트 이미지 OC 1.0.2 ft: 전체공개 +29 | 937 | 24.10.1121:10 | 좌절금지 |
오픈코어 1.0.2 +23 | 575 | 24.10.0900:22 | 줌바이퍼 |
[중급편] 노트북 해킨 +16 | 1403 | 24.07.1219:19 | Stultus |
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +17 | 575 | 24.09.1917:09 | 좌절금지 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +31 | 909 | 24.09.1723:58 | 좌절금지 |
[초급편] 문제 스스로 해결하기 +20 | 4002 | 24.03.2920:07 | Stultus |
[입문편] 첫 해킨 길라잡이 +40 | 5086 | 24.01.1218:54 | Stultus |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +67 | 5.1만 | 23.01.0913:39 | shl628 |
Hot AMD Sequoia용 AppleALC 1.9.2 +3 | 106 | 24.10.2319:04 | 사노라맨 |
Hot [Sequoia 15.0.1, OC r1.0.2] ASUS TUF B550-PLUS / RYZEN 5 5600X / RX470 +2 | 103 | 24.10.2322:26 | 뿌엥 |
Hot OCLP로 지원되지 않는 기기/dGPU를 사용하는 해킨토시의 사이드카 품질 문제 해결방법 +1 | 119 | 24.10.2321:29 | 해킨도전자 |
119 | 24.10.2321:29 | 해킨도전자 | |
106 | 24.10.2319:04 | 사노라맨 | |
784 | 24.10.1412:27 | shl628 | |
666 | 24.10.1316:00 | 수박 | |
937 | 24.10.1121:10 | 좌절금지 | |
575 | 24.10.0900:22 | 줌바이퍼 | |
1403 | 24.07.1219:19 | Stultus | |
1210 | 24.10.0500:31 | 줌바이퍼 | |
569 | 24.10.0410:49 | Tamy | |
463 | 24.09.2808:22 | Tamy | |
894 | 24.09.2321:32 | Stultus | |
601 | 24.09.1722:40 | 좌절금지 | |
562 | 24.09.1708:13 | 김경석 | |
768 | 24.09.1504:35 | Tamy | |
584 | 24.09.1319:18 | Stultus | |
706 | 24.09.1019:44 | 치토 | |
462 | 24.09.0112:54 | 해킨도전자 | |
546 | 24.08.3115:34 | 머핀X | |
306 | 24.08.2601:42 | 화정큐삼 | |
305 | 24.08.2422:59 | 하나브 | |
318 | 24.08.2316:25 | 화정큐삼 | |
415 | 24.08.1810:56 | CanBe | |
363 | 24.08.1800:04 | 화정큐삼 | |
300 | 24.08.1722:03 | 화정큐삼 | |
419 | 24.08.1419:58 | Stultus | |
377 | 24.08.1311:26 | 오디세이 | |
270 | 24.08.1115:46 | 좌절금지 | |
233 | 24.08.1022:46 | Stultus | |
131 | 24.08.0609:17 | RogerT | |
88 | 24.08.0523:34 | jbhlyk | |
267 | 24.08.0521:10 | 수인과윤슈 | |
622 | 24.08.0221:07 | Stultus | |
391 | 24.07.3019:12 | Tamy | |
308 | 24.07.2112:43 | Stultus | |
284 | 24.07.1122:47 | Stultus | |
215 | 24.07.1020:44 | Stultus | |
257 | 24.07.0921:44 | Stultus | |
384 | 24.07.0820:57 | Stultus | |
397 | 24.07.0721:25 | Stultus | |
359 | 24.07.0604:41 | bsiugr | |
650 | 24.07.0509:56 | 애플브리크 | |
472 | 24.06.2723:24 | 치토 | |
852 | 24.06.1120:40 | Stultus | |
1447 | 24.04.3022:28 | Stultus | |
1027 | 24.04.2718:46 | Stultus | |
3084 | 24.04.1312:15 | Stultus | |
3049 | 24.04.0712:49 | Stultus | |
1537 | 24.04.0619:59 | Stultus | |
1517 | 24.04.0613:43 | Stultus | |
2667 | 24.04.0521:57 | Stultus |
헐.. 도대체 KsJ 님은^^ 저랑 똑같이 오즈모시스를 쓰시면서도 알아서 입맛에 맞게 씨스템을 변경하면서 사용하시네요.. 올려주신 여러가지 좋은 글 가운데 EDID를 변경하여 레티나 적용할려고 했는데 제가 사용하고 있는 모니터가 삼성 32인치 티비(1920X1080)라서 한참으로 버벅거리면서 레티나 적용을 해도 큰 차이가 없다는 결론에 도달해서 다음에 4k 모니터를 구입하면 레티나 적용을 해야지라고 생각했습니다..
그런데 계속해서 찜찜한 내용이 바로 dsdt의 수정을 통해서 Mac Pro(2008)으로 나오는 것을 바꿀려고 해도 엄두가 나지 않는데.. 오즈모시스의 dsdt를 수정하시다니.. 대단하단 이야기밖에 할게 없네요..^^?