2010년 9월 13일 월요일

1/13. DSDT란 무엇인가?

1/13. DSDT란 무엇인가?




qweasd [2010-08-12 20:59:47]



ACPI와 DSDT, SSDT



ACPI란 컴퓨터의 운영체제가 각종 하드웨어 장치를 인식하고 동작 상태를 제어하며 각각의 장치에 대한 전력 사용 여부를 관리 할 수 있도록 고안된 표준 기술 규격 입니다.

OS X, Wilndows, Linux 등의 운영체제는 모두 이 ACPI 정보를 기본으로하여 하드웨어 장치들을 관리합니다.



ACPI는 몇가지 테이블로 이루어져 있는데, 그 중에 DSDT와 SSDT라는 테이블이 있습니다.

DSDT 테이블은 메인보드의 하드웨어 장치 전반에 관한 정보를 담당하고, SSDT 테이블은 CPU의 전력 제어에 관련된 정보를 집중적으로 담당합니다.



PC 메인보드의 BIOS에는 메인보드에 장착되어 있는 하드웨어에 대한 ACPI 정보가 내장되어 있는데,

관련된 소프트웨어를 이용하면 이 ACPI 테이블들을 모두 aml 형식의 파일로 추출할 수 있습니다.





PC - DSDT SSDT - OS X



기본적으로 맥 컴퓨터는 BIOS 대신 EFI라는 좀 더 진화된 방식의 하드웨어 제어 기술을 쓰기 때문에 맥 컴퓨터를 위한 운영체제인 OS X 은 일반 PC의 BIOS를 직접 사용하지 못합니다.

따라서 PC 하드웨어에서 OS X을 사용하기 위해서는 OS X이 PC의 BIOS를 사용하도록 해주는 일련의 작업이 필요한데, 보통 카멜레온 부트로더 등의 각종 부트로더들에 그 기능이 포함되어 있습니다.

카멜레온 부트로더 등을 매개로 하여 OS X을 PC 하드웨어에 설치하게 되면, OS X 역시 PC의 BIOS의 ACPI 테이블들을 (ACPI는 모든 운영체제가 사용하는 표준화된 규격이기 때문에) 사용할 수 있게 됩니다.



그런데, ACPI의 내용 자체는 표준화된 규격으로 동일합니다만, 그 구조는 각각의 운영체제에 특화된 방식으로 구성할 수 있습니다.

일반 PC 운영체제가 PC 하드웨어를 처리하는 방식과, OS X이 맥 컴퓨터 하드웨어를 처리하는 방식은 조금 다르기 때문에

OS X은 OS X에 특화된 구조로 구성된 ACPI 테이블들을 요구합니다.

따라서, 일반 PC의 BIOS에 내장되어있는, PC용 운영체제를 위한 구조로 구성된 ACPI 테이블들은 OS X에서는 완벽히 동작하지 않는 부분이 생겨납니다.



그렇다면, 일반 PC-BIOS의 ACPI 테이블의 구조를 OS X을 위한 구조로 변경해주면 (내용 자체는 표준 규격으로 동일하므로) OS X이 오류 없이 사용할수 있게 될 것입니다.

ACPI 테이블 중에서도 메인보드의 하드웨어 정보를 담당하는 DSDT 테이블의 구조를 OS X을 위한 구조로 변경해주면

OS X이 이를 통해 메인보드의 하드웨어를 모두 에러 없이 사용할 수 있게 될 것입니다.

이를 위해서 메인보드의 BIOS를 바로 개조해도 되고,

BIOS-ACPI-DSDT 테이블을 aml 파일로 추출해서 이 aml 파일을 수정한 다음에, OS X이 실제 BIOS-ACPI-DSDT 테이블 대신에 우리가 수정한 이 aml 파일을 사용하게 해도 됩니다.

이러한 aml 파일을 통한 DSDT 테이블 바꿔치기 기능을 카멜레온등의 부트로더들이 구현하고 있습니다.



정리하자면,

PC의 BIOS에 포함되어 있는 ACPI 정보 중에서 하드웨어 전반의 정보를 담당하는 DSDT 테이블을 DSDT.aml 파일로 추출해서,

PC 운영체제를 위한 구조로 되어있는 DSDT.aml 파일의 내용을 OS X을 위한 구조로 수정한 다음,

카멜레온 부트로더 등이 제공하는 기능을 통해서 OS X이 우리가 수정한 DSDT.aml 파일을 실제 PC-BIOS-ACPI-DSDT 테이블 대신에 사용하게끔 설정해주면,

OS X은 이제 자신의 입맛에 딱 맞게 요리된 DSDT.aml의 ACPI 정보를 바탕으로 직접 PC의 하드웨어를 오류없이 모두 제어할 수 있게 되는 것입니다.



또한, PC 운영체제를 위해 구성된 "SSDT" 테이블의 내용 중에서, 그 구조가 OS X이 요구하는 구조와 맞지 않아 OS X이 사용하지 못하는 부분을 발췌해서,

OS X을 위한 구조로 수정한 다음에 DSDT.aml 파일에 추가해주면, OS X이 DSDT.aml 파일을 사용하면서 해당 정보도 함께 사용할 수 있게 되므로

OS X이 직접 CPU의 전력 제어 기술-스피드스텝-을 활용할 수 있게 됩니다.





OS X의 내장 드라이버들



애플은 컴퓨터 하드웨어(맥)와 그 하드웨어를 위한 운영체제(OS X)를 동시에 생산하는 회사입니다.

따라서 별도의 제3의 하드웨어 드라이버 없이도 운영체제 OS X 자체만으로 맥 하드웨어를 완벽하게 제어할 수 있는 환경이 성립하고,

실제로 OS X은 맥 하드웨어를 위한 모든 드라이버를 포함하고 있습니다.



여기서 해킨의 난관이 생겨 납니다.

애플에서 생산하는 맥 컴퓨터에 탑재된 하드웨어와 내가 가진 PC 하드웨어의 종류는 다를 수 있기 때문에,

OS X 안에 내 PC의 하드웨어를 제어할 수 있는 드라이버가 이미 포함 되어 있는 경우라면 문제가 없지만,

OS X 안에 내 PC의 하드웨어를 제어할 수 있는 드라이버가 없다면 해당 하드웨어는 OS X에서 사용할 수 없게 됩니다.

이 경우 해당 하드웨어를 작동시키기 위한 제3의 드라이버가 필요하게 되며, 이것이 해킨용으로 개발되고 있는 kext 파일들입니다.

가장 대표적인 예가 PS/2 키보드와 마우스 입니다.

맥 하드웨어는 PS/2 장치를 사용하지 않기 때문에 OS X이 PS/2 드라이버를 가지고 있을 이유가 없습니다. 따라서 PS/2 장치를 OS X에서 사용하기 위해서는 PS/2를 위한 별도의 드라이버를 개발해서 설치해야만 하는 것입니다.



DSDT.aml - OS X의 경우도 마찬가지 입니다.

DSDT.aml에 담겨있는 내용은 하드웨어에 대한 드라이버가 아니라 하드웨어에 관한 "정보" 그 자체일 뿐이기 때문에, DSDT.aml에서 제아무리 하드웨어 정보를 OS X의 입맛에 맞게 넘겨준다 하더라도 OS X 내부에 해당 하드웨어에 대한 드라이버가 애초에 존재하지 않는 경우라면 해당 하드웨어를 사용하지 못합니다.

가장 대표적인 것이 리얼텍 내장 사운드 입니다. 889a 이외의 리얼텍 사운드 칩은 OS X 내부에 해당 칩을 제어할 수 있는 드라이버가 존재하지 않기 때문에, DSDT.aml에서 정보를 넘겨주는 것만으로는 사운드가 작동되지 않고 제3의 해킨용 드라이버가 필요합니다.





DSDT.aml의 융통성



하지만 DSDT.aml은 때때로 융통성을 발휘하기도 합니다.

예를 들어, LPC 드라이버의 경우에,

OS X 내부에는 ICH10에 관련된 LPC 드라이버의 정보는 존재하지만 ICH10R에 대한 정보는 없습니다.

하지만, 내 메인보드가 ICH10R 이라 하더라도, DSDT.aml 상의 코드를 변형해서 내 메인보드는 ICH10이다, 라고 지정해주면 OS X은 ICH10 이구나, 하고 인식해서 아무런 문제 없이 LPC 드라이버를 로드시킵니다.

이처럼 OS X 내부에 내 하드웨어에 관련된 드라이버가 존재하지 않는다 하더라도, DSDT.aml의 융통성을 이용하면 비슷한 다른 하드웨어의 드라이버를 빌려와서 쓸 수 있습니다.

그리고 비슷한 다른 드라이버를 빌려온다 하더라도 OS X 드라이버의 구조상 그 기능은 대부분의 경우 100% 동일하게 작동됩니다.



또한 DSDT.aml의 내용을 OS X이 요구하는 ACPI 구조로 제대로 맞춰주면 제3의 하드웨어 장치와 관련 없는 트러블들 - 잠자기, 재부팅 등 - 을 쉽게 해결할 수 있습니다.

또한 DSDT.aml의 최적화를 진행하면 내 시스템의 성능을 (다른 해킨용 드라이버를 사용하는 경우보다) 체감할 정도로 끌어올릴 수 있습니다. 이는 OS X이 자신의 입맛에 맞게 최적화 된 DSDT.aml을 통해 시스템을 직접 제어하는 것이므로 어찌보면 너무나 당연한 결과일 것입니다.



그리고, DSDT.aml을 수정해서 문제를 해결 했다면, 그 문제 때문에 지금까지 써왔던 해킨용 kext 파일들은 이제 필요 없게 됩니다.

DSDT.aml의 역할은 별도의 해킨용 kext 없이 OS X이 직접 내 컴퓨터를 제어하게끔 하는 것이므로 이 또한 당연한 일이겠지요.









자, 그렇다면, 필요한건 나의 원본 DSDT.aml 파일 입니다.



DSDT.aml 원본 파일을 추출하는 방법은 크게 3가지가 있습니다.





0. 사전 작업

메인보드의 CMOS 로 집입해서 세팅을 완료합니다.

이 세팅 값에 따라 추출되는 ACPI테이블의 내용이 달라집니다.

실제 사용하는 값으로 설정 완료하세요.





1. 윈도우

EVEREST 등의 프로그램으로 추출할 수 있습니다.

EVEREST 사용 장면 :

http://www.projectosx.com/forum/index.php?s=&showtopic=359&view=findpost&p=1343



2. 리눅스

가장 정석적인 방법입니다. 인터넷에 연결 되어 있어야 합니다.

우분투 9.04버전 (64비트 추천)

http://releases.ubuntu.com/jaunty/ 을 다운받아

CD로 굽거나 USB메모리에 세팅 (UNetbootin 사용 :

http://unetbootin.sourceforge.net/) 하고,

CD나 USB메모리로 부팅하면 우분투 9.04 버전이 실행 됩니다.

상단의 메뉴에서 System -> Administration -> Software Sources 로 가서

Community maintained Open Source Software (universe) 에 체크하고 마무리하면 필요한 컴퍼넌트가 설치됩니다.

그 후 터미널에서 sudo -s 로 관리자 권한을 얻고

apt-get install acpidump 를 입력하면 acpidump 라는 것이 설치됩니다.

그 다음

http://www.projectosx.com/forum/index.php?showtopic=359 에 접속해서

mkdir ACPI 로 시작하는 긴 코드를 복사해서 터미널에 붙여넣고 실행하면 ACPI라는 폴더와 zip 파일이 생성 됩니다.

이 폴더와 zip 파일에는 모든 ACPI 테이블이 추출되어 있습니다.

이 추출된 파일들을 메일로 보내거나 다른 하드디스크에 복사해서 가져다 쓰면 됩니다.



3. OS X

OS X 상에서 DSDT.aml 파일을 추출하기 위해서는 현재 DSDT.aml이 설치/로드 되어있지 않아야 합니다.

이미 DSDT.aml이 설치/로드 된 경우라면 그 설치/로드 된 DSDT를 가져와버립니다.

당연한 일입니다. OS X은 이 DSDT.aml이 진짜 원본 DSDT라고 철썩같이 믿고 있으니까요.

따라서, DSDT.aml 없이 OS X에 진입해서 추출해야 합니다.

fakesmc.kext, NullCPUPowerManagement.kext, ElliottForceLegacyRTC.kext 정도를 사용해서 DSDT.aml 없이 OS X에 진입한 뒤

프로그램은 DSDTSE 등을 사용하면 됩니다.









디컴파일 - 수정 - 컴파일 - 적용



원본 DSDT.aml을 추출했으면 이걸 DSDT.dsl 로 변환 시켜야 합니다.

DSDT.aml 파일은 컴퓨터가 사용하는 언어로 이루어져 있어서 사람이 직접 읽기가 힘듭니다.

DSDT.aml 을 DSDTSE 나 iASLMe 를 이용해서 DSDT.dsl로 변환시키면 이제 사람이 읽을 수 있는 글자로 파일 내용이 변합니다.

이것을 "디컴파일" 이라고 합니다.



변환한 DSDT.dsl 파일을 텍스트편집기나 DSDTSE 등의 프로그램으로 열면 쉽게 편집 가능한 문서 형태로 열립니다.

이 DSDT.dsl 파일을 입맛대로 편집 한 다음에,

이 DSDT.dsl을 이제 다시 DSDTSE 나 iASLMe 를 이용해서 컴퓨터가 읽을 수 있는 DSDT.aml 파일로 변환시켜 줍니다.

이것을 "컴파일" 이라고 합니다.



이렇게 디컴파일 해서 수정하고 다시 컴파일 해서 완성한 DSDT.aml 파일을 부트로더들이 제공하는 방법 - 보통 /Extra 폴더 안에 넣기- 에 따라 설치해주고 재부팅 하면 됩니다.

댓글 1개:

  1. 잘 읽고 갑니다. 감사합니다. 많은 도움이 되었습니다^^

    답글삭제