Snow Leopard な MacBook を 64bit カーネルで起動する
完全 64bit 対応 をうたっている Snow Leopard ですが、現時点では 64bit カーネルで起動するのは XServe だけであり、その他 MacBook 等々は 32bit カーネルで起動します。この辺りの事情は マイコミジャーナルの記事 に詳しいのですが、大方の推測は「64bit のドライバ不足により、とりあえずは XServe のみ、64bit カーネルへ移行」というもののようです。
OS X:32 ビットまたは 64 ビットカーネルで起動する - Apple サポート に記載されていますが、MacBook Pro のように 64bit カーネル対応機種であれば、OS 起動時に「6」と「4」のキーを押していれば、64bit カーネルで起動してくるそうです(手元に MacBook Pro が無い為、未確認です)。しかし、最近の MacBook はハードウェア的には 64bit カーネルに対応しているものの、ソフトウェア的な制限により、64bit で起動させないようにしてあるそうです。理由ですが、前述したマイコミジャーナルの記事によると、「MacBook Pro などの上位機種と差別化を図る為」だそうです。
しかし、Apple から発表されている方法ではありませんが、以下の方法により MacBook でも 64bit カーネルで起動させることが出来ました。ただし、USB シリアル変換ケーブルやイーモバイルが認識されず、結果的に 32bit カーネルに戻すことになりました。
EFI が 64bit 対応であることを確認する¶
EFI が 64bit 対応であることを確認します。EFI が 32bit 対応だと、そもそも 64bit カーネルをロードすることは出来ません。
1 2 |
|
ちなみに 32bit カーネルで起動している状態で uname コマンドを実行した結果は、以下のように表示されました。
1 2 |
|
ブートローダを改造する¶
ブートローダをバイナリエディタで改造し、64bit カーネルをロード出来るようにします。まず、ホームディレクトリにブートローダのコピーを取得します。
1 |
|
次に、バイナリエディタを使ってコピーしたブーロローダを改造します。今回はバイナリエディタにフリーウェアの 0xED を使いました。0xED を起動し、メニューから File → Open を選び、ホームディレクトリにコピーした boot-k64.efi ファイルを選択して開きます。
MacBook の場合、オフセット位置 0x266e8 を 00 から 04 に書き換えることになりますので、まず該当のオフセット位置へジャンプする為に、メニューの Edit → Find → Go to Offset を選択します。
表示されたダイアログに 266e8 と入力して OK を押します。
該当のオフセット位置へジャンプしたら、そのまま「04」(ゼロ・ヨン)と入力して、オフセット位置を書き換えます。
最後に、メニューの File → Save を選択して変更を保存したら、ファイルの改造は終了です。
64bit 対応ブートローダの配置と起動設定¶
次に、先ほど改造した 64bit 対応ブートローダを適切な位置(/System/Library/CoreServices)に配置し、chflags でロックします。
1 2 |
|
続いて、OS の起動時に自動的に 64bit 対応ブートローダが読み込まれるようにします。先ほど、改造&配置した 64bit 対応ブートローダを bless して OS のブートメニューに登録した後、systemsetup で起動時に 64bit カーネルが起動されるよう、設定変更します。
1 2 |
|
起動するカーネル種別は、実際には /Library/Preferences/SystemConfiguration/com.apple.Boot.plist ファイルに保存されています。systemsetup により 64bit カーネルで起動するように設定した場合、以下の内容になっていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
32bit カーネルで起動するように戻す場合は、以下を実行します。
1 2 |
|
上記の設定変更を実施した後、/Library/Preferences/SystemConfiguration/com.apple.Boot.plist は以下のような内容になっていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
これで再起動以降、MacBook が 64bit カーネルで起動するようになるはずです。再起動後、uname すると以下のように表示されていました。
1 2 |
|
ただし、冒頭に記載した通り、USB シリアル変換ケーブルやイーモバイルが 64bit カーネルでは認識されず、利用出来ない為、結果的に 32bit カーネルに戻すことになってしまいました。今後、各種デバイス向け 64bit ドライバーが出揃うことに期待します。