OSx86 Project

1. Windows PCでのOSX起動の仕組み

1.1. EFIエミュレーションとカーネルの読込み

 Windows PCではOSXは起動しないが、OSx86 Projectの取り組みの一環でIntel Mac同様に起動するようになった。もちろん、Appleの保障は無く、また、正規にOSメディアを購入していても、Appleが認めたコンピュータ以外へインストールすることになるので、ライセンス条項を遵守しているとはいい難い(悪い例:公衆の面前でギリギリのことをしている某CPU大手企業)。その為、本項で述べることはあくまで技術的な観点での話しであり、全ての行為は自己責任の前提で記述する。

 HDDが第一起動デバイスとして指定された場合の起動シーケンス概要は下図となり、Boot CampでWindowsを起動させた場合と逆のアプローチで、EFIエミュレーションとカーネルの起動を行うブートローダ(Chameleon)から構成される。

  • PCでのOSX起動の仕組み

 参考情報:
 ・ブート (Wikipedia)
 ・Mac OS Xシステム管理 (Chapter 2 システムの起動と常駐プロセスの管理)
 ・次世代BIOS「EFI」の仕組を探る

・参考情報 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実装の問題点

 PCにおける電源管理(パワーマネージメント)は、従来BIOSによるAPM(Advanced Power Management)で行っていたが、現在ではIntel、東芝、Microsoftが提唱(後に、Compaq現HP、Phoenixが参加)したOSが主体となってより細かな管理を行うACPI(Advanced Configuration and Power Interface)に移行した。

 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を保存する機能の追加をお願いした所、快く対応してくれたので紹介する。

  • ACPIVIEW(HPの表示はブラウザのエンコーディングを日本語EUCに設定)

 iasl.exeと組み合わせれば、Windows環境のみで事前にDSDTの取得、修正まで行えるので、導入前の作業が非常に楽になる。

1.3. DSDT定義修正

 DSDTの本格的な修正には別途ACPIの仕様書を熟読する必要があるが、以下3カ所の修正が基本となる。

 1. Proccessor定義のAlias削除
 2. パワーマネージメントが働くようHPET定義の修正
 3. CMOSが毎回クリアされないようRTC定義の修正

 DSDT定義修正詳細 (2010/03/31修正)
 DSDT定義修正最小ガイド (2010/09/09追記)

■結論

 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を追加する

 詳細な手順は、Installing Snow Leopard for OSX86でも詳しく解説されているので熟読すること。

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も出荷開始された模様である。

 MAC OS X 10.6.3 SNOW LEOPARD(発売日2010/4/21)の出荷を確認。(2010/04/18追記)



戻る 
最終更新:2012年07月16日 23:59