1. Windows PCでのOSX起動の仕組み
1.1. EFIエミュレーションとカーネルの読込み
Windows PCではOSXは起動しないが、OSx86 Projectの取り組みの一環でIntel Mac同様に起動するようになった。もちろん、Appleの保障は無く、また、正規にOSメディアを購入していても、Appleが認めたコンピュータ以外へインストールすることになるので、ライセンス条項を遵守しているとはいい難い(悪い例:
公衆の面前でギリギリのことをしている某CPU大手企業)。その為、
本項で述べることはあくまで技術的な観点での話しであり、全ての行為は自己責任の前提で記述する。
・参考情報 Chameleon READMEから抜粋
Normal Install (non-RAID):
--------------------------
Suppose that your installation is on /dev/disk0s2
- Install boot0 to the MBR:
sudo fdisk -f boot0 -u -y /dev/rdisk0
- Install boot1h to the partition's bootsector:
sudo dd if=boot1h of=/dev/rdisk0s2
- Install boot to the partition's root directory:
sudo cp boot /
No need to use startupfiletool anymore!
1.2. OSX実行におけるACPI実装の問題点
ACPIは、電源管理の為の枠組であるのはもちろんだが、プラットホームの構成要素を列挙し管理する統一された枠組でもあり、電源管理を行うAPMのみならず、マザーボード上のリソースを列挙するPnP(PlugAndPlay)BIOS、マルチプロセッサの列挙を行うMP(MulitiProccessor)Table等をも統一した形で置き換えるもので、複数のテーブルの集合体として定義されBIOSに格納されている。
実装としては、BIOSのRSDP(Root System Description Pointer)に、ACPIを定義するテーブルの全ての親となるRSDT(Root System Description Table)へのアドレスが格納されており、RSDTのEntryレコードにはFACP(FADT)、APIC(MADT)、MCFG、SLIC、WDRT、 OEMB、HPET、NVHD(シグネチャーで判別され、定義されるテーブルはM/Bによって異なる)などを定義している。
現在オープンな統一規格となっているが、Microsoftが創設メンバとして参加していることからもわかるように、Windowsで細かな電源制御を行うことを目的として実装されており、Windows以外のOSで使用した場合、(Windowsでは問題ないが)意図しない結果を返すことがある。一例としてOSXではパワーマネージメントのkext(AppleIntelCPUPowerManagement.kext)が予期しないエラーで終了してしまい、回避策としてパワーマネージメント自体を無効にする手段が一般的に取られてきた。
根本的な解決には、ACPIに修正パッチをあてることだが、修正にはBIOSの書き換え行為を伴う。その為、内容が間違っていたり、書き換えが失敗したりするとPC自体が起動しなくなり、大変リスクが高い手段である。
そこで、BIOSを書き換えることはせず、カーネルブートローダがカーネルをメモリにロードする前に、EFIエミュレーションと共にACPIの内容をメモリに展開し、そこでパッチを当てる対策が取られた。
ここで修正対象となるのが、ACPIの中核をなすAML(ACPI Machine Language)によって記述定義された
DSDT(Differentiated System Description Table)である。DSDTはFADTを経由してアクセスすることができ、このDSDTテーブルのAML定義を修正することが、いわゆる「
DSDT.amlファイルを作成し、DSDTテーブルを修正する」ということになる。
この
DSDTテーブルを修正するDSDT.amlファイルを読み込み、カーネルロード前にメモリ上でパッチを当てることで、OSXの動作互換性が更に向するようになった(現在、Chameleonの機能の一つとして取り込まれている)。
(追記:2012/07/16)
DOSプログラムでACPIテーブルを表示し、データ化するプログラムが公開されていたので、DSDTを保存する機能の追加をお願いした所、快く対応してくれたので紹介する。
iasl.exeと組み合わせれば、Windows環境のみで事前にDSDTの取得、修正まで行えるので、導入前の作業が非常に楽になる。
1.3. DSDT定義修正
DSDTの本格的な修正には別途ACPIの仕様書を熟読する必要があるが、以下3カ所の修正が基本となる。
1. Proccessor定義のAlias削除
2. パワーマネージメントが働くようHPET定義の修正
3. CMOSが毎回クリアされないようRTC定義の修正
■結論
Intel Macで採用されているEFI(次世代BIOSとなるもので、H/WとOS間のやり取りをソフトウエア仕様化したもの)をエミュレーションし、OSXカーネルの起動を行うブートローダ(Chameleon)と、暗号化されたモジュールを複合化するkext(PC EFI作成で有名なnetkas氏作成のdsmos.kext/fakesmc.kextやAppleDecrypt.kextなど)を用意することで、WIndows PCでもOSXを起動させることが可能である。ただし、M/BによってBIOSに含まれるACPIの構成がOSXが想定している仕様と異なる為、ACPIのDSDTテーブルの修正が必要となる。
なお、使用できる周辺機器は原則としてAppleに採用実績があるチップとその派生品を用いたものに限定される(ドライバを自力で作成できる場合はその限りではない)。
2. PCへのOSXインストール
下記作業を既に稼働しているMac(PowerPC可)で行う。
Step1. 8GB以上のUSBメモリスティックを用意する
Step2. Loepard又はSnow LeopardのDVDをセットし、ディスクユーティリティでISOイメージを作成する
Step3. 作成したISOイメージをディスクユーティリティでUSBメモリスティックへ復元する
Step4. USBメモリスティックに
Chameleon 2.0を追加する
Step5. USBメモリスティックに
FakeSMC.kextの他、PC起動に必要となる
kextを追加する
2.1. OSX 10.5 Leopard x86インストールDVD作成ツール Plus
OSX 10.5 Leopard インストールDVDからPC起動に不要なファイルを削除し、PC EFI対応ブートローダChameleon及びkext(カーネル拡張:kernel extension)を組み込んでリテールOSX 10.5 Leopard DVDを起動させる。
2.2. Chameleon PreBoot CD for Snow Leopard 10.6
Snow Leopard起動に必要となるEFIエミュレーション及びkextの追加、DSDTの修正をカーネルロード前にメモリ上で行い、リテールOSX 10.6 Snow Leopard DVDを起動させる。
3. OSx86: Creating a Hackintosh (ペーパーバック)
10.6.2 retail discsも
出荷開始された模様である。
最終更新:2012年07月16日 23:59