ssdt, dsdt 딱히 문제 없는데 오류가 뜨네요
- Soluzers
- 414
- 8
Soluzers님의 기기정보
아래 스샷처럼 딱히 문법상에 오류가 없는데 문법 오류가 자꾸 뜨네요
아무리 확인 해봐도 괄호 갯수 맞고 잘 처리 됬는데 도무지 이유를 모르겠습니다.
이런 상태로 EFI/Clover/ACPI/patched/ 경로에 넣어주면 없는것보단 나을까요?
애초에 이렇게 컴파일이 안되서는 제 목적인
배터리 인식, 외장 그래픽 죽이기는 불가능 하지만...
Soluzers
댓글 8
51번 라인 마지막 괄호는 70번 라인에 있습니다.
왜냐하면 52번째 라인부터 시작되는 중괄호는
OperationRegion() 안에 선언된 Field 값이니까요
따라서 Field가 끝난뒤에 나오는 70번 라인의 )가 51번에서 시작된?OperationRegion을 닫는 괄호가 되는것 입니다.
라는건 ssdt파일을 오늘 처음 열어본 제 생각이구요...
저게 잘못된 거라면 뭐가 어떻게 잘못된 건지 가르쳐주시면 감사하겠습니다
똑같이 오늘 처음 보는 입장에서는 문법 오류라는 생각이 듭니다.
컴파일러가 문법에러라고 51번라인을 지적하는것 보면,
단순히 괄호 문제가 아니라 문법이 틀렸다고 봐야겠죠.
제 시스템 DSDT에 있는 코드를 예제삼아 살펴보니
기본 문법이
OperationRegion (PXCS, PCI_Config, 0x40, 0xC0)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
생략
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
생략
}
컴파일 에러에서도 ) 를 요구하고 있는것 보면
위에 예제 처럼
OperationRegion 는 () 괄호를 닫아주고
필드 정의를 다음줄에 따로 해주는게 맞는 문법 같아 보입니다.
본문에서 오퍼레이션 리전 안에 필드를 정의해야 되는 이유라도 있는건가요?
저런식으로 어떤 함수 내에 변수로의 함수 사용이 빈번 하더군요
그럼에도 에러 안뜨는 곳이 많구요
컴파일시 에러 없는 코드입니다. 204번 라인 보시면 됩니다.
Operationregion 함수 내부에 Derefof 함수가 사용됬는데 오류가 없습니다.
이건 대놓고 Operationregion 함수 내부에 Field가 선언 되있는데도 오류가 없습니다.
토니맥에서 RehabMan 님이 가르켜주셨습니다.
코드 자체에 잘못된건 없고 애초에 수정할 필요가 없습니다.
잘못된 거라면 추출된 SSDT.aml 파일을 MaciASL로 바로 열어서 재컴파일 하려했다는 점입니다.
SSDT, DSDT는 추출된 이후에 한번 Disassembling 해준후에 수정하라고 하더군요
실제로 디어셈블링한 후에 재컴파일 해보니 오류 안뜨네요
https://www.tonymacx86.com/el-capitan-laptop-support/152573-guide-patching-laptop-dsdt-ssdts.html
소스 파일을 컴파일해서 바이너리를 만드는게 컴파일러의 역활 이니 젤 근본적인 것에 대한 실수를 하셨군요.
직접 적인 도움은 못드렸지만 본인 스스로 어떻게던 문제를 해결 했으니 축하드립니다. :)
원래 이런류의 문제는 DIY가 정답이죠 ^^
에러메세지에도 나와 있고 실제로 괄호 () 짝이 안맞아요.