길어서 올라가지 않는 관계로 연결되는 문서입니다.
Part 10.
DSDT 만들기-DSDT 에 대하여.
일반적으로
레오파드가 아닌 스노우레오파드 즈음해서는 보드에 따라 다르지만 DSDT 가
없는상태론 부팅하기가 힘듭니다. 일단 부팅을 하게되면 맥 환경에서 dsdt 를 생성한다고 하여도 부팅된 환경 자체에서 파생된 하드웨어 환경을
dsdt.aml 로 만들게 되므로 제대로된 dsdt 를 만들기 어려워집니다.
가령 어디에선가 다운받은 dsdt.aml 파일로 부팅하여
DSDT 를 만들려고 시도한다면 이미 부팅된 환경의(즉 애초에 다운받았던 파일 이외의 코드) DSDT.aml 이외의 명확한 결과물은 얻을 수
없습니다.
많은 해킨PC 를 작업해주다보니 혹시 인터넷 어딘가 쓸만한 dsdt가 없는지 찾아보거나 차곡히 진열되어있는 dsdt
파일들을 찾아서 열어보아도 완벽하게 작업된 dsdt 는 나를 포함한 전세계 누구도 공개하지 않는 것으로 보입니다.
기본적인 것은
잡혀있지만 완벽하게 작업되어있는 것은 인터넷 어디에서도 찾아보지 못했습니다. 결국 DSDT 는 수작업 하는것이 가장 완벽합니다. 결국 일반인의
경우 DSDT 코드 자체에 대한 이해가 힘들기 때문에 적당히 동작하면 쓴다… 정도가 됩니다. 하는 수 없습니다.
DSDT 는 하드웨어
프로그래밍 + 맥 하드웨어 호환 에 대한 지식을 모두 총괄하기 때문에...
DSDT.aml 파일을 정리해 두었다는 사이트에서 받은
dsdt.aml 파일을 열어보아도 사실 신뢰불가한 수준이었습니다만 적당히 안정적인 동작정도는 제공했습니다.
남에 컴퓨터 DSDT
만 매일 스트레스받아가며 작업해서 그런지 DSDT 수정이 무지 귀찮아서 PC를 교체한 이후로는 정작 제가 사용하는 PC 에 쓰는 DSDT 는
그야말로 몇분만에 뚝딱 만든걸로 정말 대충 씁니다. 완벽한 무언가를 원하지 않는다면 저처럼 대충 써도 됩니다.완벽한 하나의 DSDT 를
수작업해서 만들려면 정말 많은 시간이 필요해지기 때문입니다.
- DSDT 와 MAC 코드에 대한 전반 사항
* 기본적으로
PC 하드웨어 정의코드와 MAC 의 정의코드가 다르다.
* DSDT 는 PC 하드웨어 구조에 대한 코드를 기본으로 만들어진다.
*
DSDT 의 하드웨어 정의를 가능하면 MAC 용 하드웨어 정의 코드로 바꾸어 준다.
* 순수한 하드웨어 DSDT 가 필요한 이유는 적어도
내 메인보드에서 동작하는 모든 하드웨어에 대한 하드웨어 코드는 모두 가지고 있어야 후반 작업을 할 수 있기 때문이다.
* DSDT 에서의
하드웨어 정보를 맥에 제공할때 기본 칩셋 정보만을 알려주고 세부적인 하드웨어 컨트롤 부분을 맥오리지널 드라이버에 전담시키는 방식과, 칩셋 내부의
세세한 코드를 DSDT 상에서 동작하게 하는 방식 두가지 등이 있습니다
(예를들어 순수 DSDT 만으로 ALC889a 칩셋을 동작시킨다고
할 때, 출력 레벨, 포트 등을 맥 정의에 맡길지, 혹은 사운드칩셋 정의 내부에서 세세하게 정의시킬지..하는
문제입니다)
A. 내 보드의 DSDT 의 기본형을 만드는 가장 깨끗하고 손쉬운 방법.
이 과정에서 dsdt.aml 이
만들어지지 않는다면 유분투등으로 dsdt.aml 을 뽑아내야하는데,
과정이 번거롭고 별도의 준비물이 필요하므로 인터넷 등에서 자신의 보드
DSDT 를 찾아보는것이 빠르다. 물론 인터넷에 나도는 dsdt.aml 파일은 모두 쓰레기에 가깝지만 그래도 자신의 보드에 대한 기본하드웨어
정보는 잡혀있습니다.
일부의 보드바이오스는 지원되지 않으나.
일반적으로는 윈도우에서 DSDT Patcher5 이용하여
BIOS 롬파일 자체를 DSDT.aml 로 컨버팅 하는것이 가장 깨끗합니다.(깨끗하다는 것이 그다지 큰 의미는 없지만)
1.
DSDT patcher5 실행.
2. 소스란에 bios.rom 원본 파일을 선택, 타겟에 DSDT.aml 파일을 생성시켜주는 모드를
선택.
3. Fixs 에 모든 항목을 체크.
4. 사운드칩셋이 ALC888,alc889,ALC889a 칩셋이라면 일단 사운드 란의
HDEF 를 체크하고 칩셋 선택. (일단은 동작하지 않더라도 dsdt 파일 내부 코드에 포지션을 잡아주므로)
5. 랜과 그래픽 등은 일단
건들이지 않음(차후 설명)
6. dsdt.aml 만들기 실행.
7. 오류가 나서 만들어지지 않으면 강제 생성 옵션을
사용.
만들어진 파일을 맥 하드로 가져가는 것은 알아서….
B. 맥OS 에서 DSDT 만들기.
1. A 과정에서
만든 dsdt.aml 파일을 DSDT SE 로 열어서 추가 작업 한 후 컴파일로 생성
2. dsdt.aml 이 없는 상태에서 부팅이 된다면
맥상에서 dsdt.aml 파일을 만들 수 있습니다. DSDT SE 프로그램의 Extract dsdt 버튼을 클릭후 코드 수정작업 이후 컴파일로
생성.
C. DSDT 코드 수정의 기본
- DSDT 는 그야말로 프로그래밍과 하드웨어 를 결합한 하드웨어 프로그래밍
이라고 할 수 있습니다.
- 함수의 규정에 따른 제약이 있습니다. 가령 앞에서 정의된 함수가 몇백줄의 코드 뒷부분에서 처리될때 정의가
달라지면 어김없이 에러가 납니다. 대충쓰는것은 고사하고 컴파일 자체가 안될수도 있습니다.
- 특정부분에 오류가 있다고 해서 선행된 함수를
포함하여 해당 파트를 모두 날려버리면 컴파일시 에러 자체는 뜨지 않지만, 날려버린 파트의 하드웨어 정보는 너무도 당연히 DSDT 에 포함되지
않습니다.
- 정의된 하나의 이름을 교체하면 동일한 모든 이름을 교체하여야 합니다.
D. DSDT 코드
수정하기
********************* 삭 제 ****************************
상기의 이유로 모두
삭제
링크된 게시물을 참조하시기 바랍니다.
https://x86osx.com/bbs/view.php?id=osxtips&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=2336********************************************************
N.
SPEED STEP 몇몇 CPU 에 대한 스피드스텝 코드 첨부.
i7-860 speed-step
코드
------------------------------------------------------
{
Scope
(_PR)
{
Processor (CPU0, 0x00, 0x00000410, 0x06)
{}
Processor (CPU1, 0x01, 0x00000410, 0x06) {}
Processor
(CPU2, 0x02, 0x00000410, 0x06) {}
Processor (CPU3, 0x03, 0x00000410,
0x06) {}
Processor (CPU4, 0x04, 0x00000410, 0x06)
{}
Processor (CPU5, 0x05, 0x00000410, 0x06) {}
Processor
(CPU6, 0x06, 0x00000410, 0x06) {}
Processor (CPU7, 0x07, 0x00000410,
0x06) {}
}
Scope (_PR.CPU0)
{
Method
(_PSS, 0, NotSerialized)
{
Return (Package
(0x0E)
{
Package
(0x06)
{
0x0AEA,
0x00017318,
0x0A,
0x0A,
0x16,
0x16
},
Package
(0x06)
{
0x0AE9,
0x00017318,
0x0A,
0x0A,
0x15,
0x15
},
Package
(0x06)
{
0x0A64,
0x000130B0,
0x0A,
0x0A,
0x14,
0x14
},
Package
(0x06)
{
0x09DF,
0x00011170,
0x0A,
0x0A,
0x13,
0x13
},
Package
(0x06)
{
0x095A,
0xDEA8,
0x0A,
0x0A,
0x12,
0x12
},
Package
(0x06)
{
0x08D5,
0xC738,
0x0A,
0x0A,
0x11,
0x11
},
Package
(0x06)
{
0x0850,
0xA028,
0x0A,
0x0A,
0x10,
0x10
},
Package
(0x06)
{
0x07CB,
0x8CA0,
0x0A,
0x0A,
0x0F,
0x0F
},
Package
(0x06)
{
0x0746,
0x7D00,
0x0A,
0x0A,
0x0E,
0x0E
},
Package
(0x06)
{
0x06C1,
0x61A8,
0x0A,
0x0A,
0x0D,
0x0D
},
Package
(0x06)
{
0x063C,
0x55F0,
0x0A,
0x0A,
0x0C,
0x0C
},
Package
(0x06)
{
0x05B7,
0x4268,
0x0A,
0x0A,
0x0B,
0x0B
},
Package
(0x06)
{
0x0532,
0x3A98,
0x0A,
0x0A,
0x0A,
0x0A
},
Package
(0x06)
{
0x04AD,
0x2AF8,
0x0A,
0x0A,
0x09,
0x09
}
})
}
Method
(_PSD, 0, NotSerialized)
{
Return (Package
(0x05)
{
0x05,
Zero,
Zero,
0xFC,
0x04
})
}
Method
(_CST, 0, NotSerialized)
{
Return (Package
(0x02)
{
One,
Package
(0x04)
{
ResourceTemplate
()
{
Register (FFixedHW,
0x01,
0x02,
0x0000000000000000,
0x01,
)
},
One,
0x9D,
0x03E8
}
})
}
}
Scope
(_PR.CPU1)
{
Method (_PSS, 0,
NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (Package
(0x04)
{
0x03,
Package
(0x04)
{
ResourceTemplate
()
{
Register (FFixedHW,
0x01,
0x02,
0x0000000000000000,
,)
},
One,
Zero,
0x03E8
},
Package
(0x04)
{
ResourceTemplate
()
{
Register (FFixedHW,
0x08,
0x00,
0x0000000000000414,
,)
},
0x02,
One,
0x01F4
},
Package
(0x04)
{
ResourceTemplate
()
{
Register (FFixedHW,
0x08,
0x00,
0x0000000000000415,
,)
},
0x03,
0x55,
0xFA
}
})
}
}
Scope
(_PR.CPU2)
{
Method (_PSS, 0,
NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (^^CPU1._CST
())
}
}
Scope (_PR.CPU3)
{
Method
(_PSS, 0, NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (^^CPU1._CST
())
}
}
Scope (_PR.CPU4)
{
Method
(_PSS, 0, NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (^^CPU1._CST
())
}
}
Scope (_PR.CPU5)
{
Method
(_PSS, 0, NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (^^CPU1._CST
())
}
}
Scope (_PR.CPU6)
{
Method
(_PSS, 0, NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (^^CPU1._CST
())
}
}
Scope (_PR.CPU7)
{
Method
(_PSS, 0, NotSerialized)
{
Return (^^CPU0._PSS
())
}
Method (_PSD, 0,
NotSerialized)
{
Return (^^CPU0._PSD
())
}
Method (_CST, 0,
NotSerialized)
{
Return (^^CPU1._CST
())
}
}
Name (_S0, Package
(0x04)
{
Zero,
Zero,
Zero,
Zero
})
-----------------------------
-->
고맙습니다.