@wikiメニュー編集表示ツールヘルプブックマーク登録RSS登録
このウィキに参加ログイン
新規ページ作成
すでにあるページをコピーして新規ページを作成 スレッドフロート型掲示板から引用して新規ページ作成(α版) ブログの内容から引用して新規ページ作成(α版) ファイルをアップロードして新規ページ作成(α版) 他のホームページから引用して新規ページ作成(α版)
[PR] 無料ホームページ @PAGES [PR] オークション@pedia [PR] 2ch型無料レンタル掲示板 @chs
@wikiで新規wikiを作成
このページを編集 このページを編集(メニュー非表示編集;α) このページをコピーして新規ページを作成 このページのページ名を変更 このページの編集モードを変更 このページの閲覧/編集権限の変更
このページにファイルをアップロード
このウィキにファイルをアップロード(FTP機能/管理者のみ利用可)
メニューを編集(メニュー部分は非表示で編集) 右メニューを編集(メニュー部分は非表示で編集)
このページの最新版変更点 このページの編集履歴(バックアップ) このページへのリンク元 このページへのトラックバック
このページをPDFで表示(α版)
関連ページ(α版) 関連ホットワード(α版)
このwikiのページ一覧 編集履歴(バックアップ)のあるページ一覧 このwikiのタグ一覧 このwikiの更新情報RSSこのwikiの更新情報RSS このwikiの新着ページRSSこのwikiの新着ページRSS
このwiki内を検索 @wikiパーツ▶  @wiki便利ツール▶  このwikiの管理者に連絡
@wiki助け合いコミュニティ @wiki助け合い掲示板
wiki(ウィキ)って何?
初心者ガイド
ご利用ガイド 良くある質問 プラグイン一覧 編集モードの違いについて 不具合や障害を見つけたら 管理・設定マニュアル
はてなブックマークする FC2ブックマークに追加 Livedoor クリップに追加 Yahoo!ブックマークに登録 del.icio.usに追加
はてなRSSに追加 livedoor ReaderにRSSフィードを登録 Yahoo!にRSSフィードを登録 BloglinesにRSSフィードを登録 NewsGator OnlineにRSSフィードを登録 iGoogleにRSSを追加
@wikiパーツ:あなたのサイトにWikiデータを簡単表示!
最近更新したページの一覧を表示する 最近作成したページの一覧を表示する このwiki内を検索するフォームを表示する このwikiのタグクラウドを表示する 自動リンク辞書を利用する
@wiki便利ツール:トップページ
まとめサイト作成支援ツール RSSかんたん作成 興味キーワードをチェック!!(RSSナビ) いろんなblogのRSSかんたん作成ページ アマゾン商品検索(簡単アフィリエイト) wikiに株式情報(日本)を表示 wikiに株式情報(中国)を表示 かんたんHTML直接入力 Q&Aサイトかんたん連携作成 wikiに為替情報を表示 はてなアンテナと簡単連携
Intel Mac mini (Early 2009) @ 私的ウィキ(blog)

Snow Leopard について

■ Snow Leopardを64bitカーネルで動作させる

 Snow Leopardの機能強化の目玉の一つとしてはカーネルの64bit化が挙げられる。概要は、「やっぱりスゴい! Snow Leopardの「64bit対応」で纏められている。

 しかしながら売りであるカーネルの64bit化だが、下記記事の通り、従来のデバイスやアプリケーションの互換性を重視して、現状では多くの機種においてデフォルトで32bitカーネルがロードされる。


64bitカーネルが動作する為の必要条件は、
  1. CPUが64bitに対応している
  2. EFIが64bitに対応している(参考情報)
の2点である。
  • Mac mini(Early 2009)のハードウエア情報

bash-3.2# system_profiler SPHardwareDataType -detailLevel mini
Hardware:

Hardware Overview:

Model Name: Mac mini
Model Identifier: Macmini3,1
Processor Name: Intel Core 2 Duo
Processor Speed: 2 GHz
Number Of Processors: 1
Total Number Of Cores: 2
L2 Cache: 3 MB
Memory: 4 GB
Bus Speed: 1.07 GHz
Boot ROM Version: MM31.0081.B06
SMC Version (system): 1.35f0

bash-3.2# uname -a
Darwin mac-mini.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

bash-3.2# ioreg -l -p IODeviceTree | grep firmware-abi
| | "firmware-abi" = <"EFI64">

 カーネルは起動時に32bit/64bitが選択できるのだが、Mac mini, Mac Book, Mac Book Airにおいては、Appleは上位機種との差別化の為、EFIが64bitに対応していても64bitカーネルがロードできないよう意図的に制限をかけている。32bitカーネルでも32GBまでのメモリを扱える為、実用的には問題ないのだが、これはユーザをがっかりさせる結果を招いた。

 64bitカーネルのロードを制限する条件として、SMBIOSの機種情報を疑ってみたが、SMBIOSをMac miniと同等のものに書き換えても64bitカーネルがロードできることが確認でき、SMBIOSの内容は制限の条件ではなかった。


bash-3.2# uname -a
Darwin Mac-Pro.local 10.0.0 Darwin Kernel Version 10.0.0: Fri Jul 31 22:46:25 PDT 2009; root:xnu-1456.1.25~1/RELEASE_X86_64 x86_64

bash-3.2# system_profiler SPHardwareDataType -detailLevel mini
Hardware:

Hardware Overview:

Model Name: Mac mini
Model Identifier: Macmini3,1
Processor Speed: 3 GHz
Number Of Processors: 1
Total Number Of Cores: 2
L2 Cache: 6 MB
Memory: 8 GB
Bus Speed: 1.33 GHz
Boot ROM Version: MM31.00C1.B00
SMC Version (system): 1.30f3

 ところが、海外のサイトをみていた所、Mac Bookで64bitカーネルをロードすることに成功した事例がみつかり、64bitカーネルのロードを制限している条件が判明した。

 詳細はこちらに記載されているが、EFI boot loader(boot.efi)でカーネルロード時に機種を判別して制限しており、下記の通り該当アドレスの値をバイナリエディタで書き換えれば、64bitカーネルがロードできるようになる(boot.efiは誤って削除されないようにuchgフラグが立っているのでchflagsコマンドで解除する必要あり)。
Model (with 64-bit EFI) Byte Position in boot.efi Old Value New Value
Mac mini 0x266D8 0x266DB 0x00 0x04 0x80
MacBook 0x266E8 0x00 0x04
MacBook Air 0x266F8 0x266FB 0x00 0x04 0x80
iMac 0x26718 0x2671B 0x00 0x0c 0x80
注. 引用元の情報はMac Bookでの確認であり、macbook4,1, macbook5,1でしか動作しなかった。実機で確認した所、macmini3,1では0x266DBの値を0x00から0x080に修正が必要。 2009/09/09修正

 上記の修正は、もちろんAppleの保障外であるが、この修正により64bitEFIを搭載する全てのIntel Macで Snow Leopardが64bitカーネルで起動 するようになる。 ただし、グラフィックスアダプタとしてIntelチップセットのGMA950を採用している前モデルのMac miniなどは、GMA950用のKEXTが32bitのままの為、QE/CI/OpenGLのアクセラレーションは働かず、ソフトウエアによるエミュレーション動作になる。 前モデルMac mini (Mid 2007)は、CPUは64bit対応しているが、EFIが32bitのままの為、グラフィックスアダプタのソフトウエアエミュレーション動作以前に、64bitカーネルはロードできない。

bash-3.2# file/System/Library/Extensions/AppleIntelGMA950.kext/Contents/MacOS/AppleIntelGMA950
/System/Library/Extensions/AppleIntelGMA950.kext/Contents/MacOS/AppleIntelGMA950: Mach-O object i386

 なお、boot.efiを直接修正した場合は、OSのアップデートパッチで上書きされ、ファイルの内容が元に戻る可能性がある。その為、実際は直接boot.efiを修正するのではなく、修正したものをboot64.efiなどと別の名前で保存し、元のboot.efiの代わりにboot64.efiを使うようにblessし直すと良い。


bash-3.2# shasum boot64.efi
0f615922c4dde555e38f203caa28ce56f76212d6 boot64.efi
bash-3.2# hexdump boot.efi > boot_efi.txt
bash-3.2# hexdump boot64.efi > boot64_efi.txt
bash-3.2# diff boot_efi.txt boot64_efi.txt
9235c9235
< 00266d0 30 47 01 00 00 00 00 00 00 00 00 00 00 00 00 00
---
> 00266d0 30 47 01 00 00 00 00 00 00 00 00 80 00 00 00 00

・boot.efiの置き換え手順

  • Step 1. ダウンロードしたboot64.efiを/System/Library/CoreServicesに置く

bash-3.2# cp boot64.efi /System/Library/CoreServices

  • Step 2. boot64.efiのパーミッションを変更

bash-3.2# chown 0:0 boot64.efi
bach-3.2# chflags uchg boot64.efi

  • Step 3. boot64.efiをオリジナルのboot.efiの代わりに使うようにblessする

bash-3.2# bless --info
finderinfo[0]: 133 => Blessed System Folder is /System/Library/CoreServices
finderinfo[1]: 203585 => Blessed System File is /System/Library/CoreServices/boot.efi
finderinfo[2]: 0 => Open-folder linked list empty
finderinfo[3]: 0 => No OS 9 + X blessed 9 folder
finderinfo[4]: 0 => Unused field unset
finderinfo[5]: 133 => OS X blessed folder is /System/Library/CoreServices
64-bit VSDB volume id: 0xA4E143A7BD6DA256
bash-3.2# bless --folder /System/Library/CoreServices --file /System/Library/CoreServices/boot64.efi
bash-3.2# bless --info
finderinfo[0]: 133 => Blessed System Folder is /System/Library/CoreServices
finderinfo[1]: 218968 => Blessed System File is /System/Library/CoreServices/boot64.efi
finderinfo[2]: 0 => Open-folder linked list empty
finderinfo[3]: 0 => No OS 9 + X blessed 9 folder
finderinfo[4]: 0 => Unused field unset
finderinfo[5]: 133 => OS X blessed folder is /System/Library/CoreServices
64-bit VSDB volume id: 0xA4E143A7BD6DA256

  • Step 4. 64bitモードで起動するように変更し、再起動

bash-3.2# nvram boot-args="arch=x86_64"
bash-3.2# nvram boot-args
boot-args arch=x86_64
bash-3.2# reboot

  • Mac miniで64bitカーネルのロードに成功

  • 64bit起動時のメッセージ(Kernel is LP64)

bash-3.2# dmesg
npvhash=4095
Darwin Kernel Version 10.0.0: Fri Jul 31 22:46:25 PDT 2009; root:xnu-1456.1.25~1/RELEASE_X86_64
vm_page_bootstrap: 899025 free pages and 84015 wired pages
kext submap [0xffffff7f80600000 - 0xffffff8000000000], kernel text [0xffffff8000200000 - 0xffffff8000600000]
standard timeslicing quantum is 10000 us
mig_table_max_displ = 73
AppleACPICPU: ProcessorId=0 LocalApicId=0 Enabled
AppleACPICPU: ProcessorId=1 LocalApicId=1 Enabled
calling mpo_policy_init for Quarantine
Security policy loaded: Quarantine policy (Quarantine)
calling mpo_policy_init for Sandbox
Security policy loaded: Seatbelt sandbox policy (Sandbox)
calling mpo_policy_init for TMSafetyNet
Security policy loaded: Safety net for Time Machine (TMSafetyNet)
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

MAC Framework successfully initialized
using 16384 buffer headers and 4096 cluster IO buffer headers
IOAPIC: Version 0x11 Vectors 64:87
ACPI: System State [S0 S3 S4 S5] (S3)
mbinit: done (64 MB memory set for mbuf pool)
rooting via boot-uuid from /chosen: BDF77677-73B7-357E-B72D-7568A902D286
Waiting on <dict ID="0"><key>IOProviderClass</key><string ID="1">IOResources</string><key>IOResourceMatch</key><string ID="2">boot-uuid-media</string></dict>
com.apple.AppleFSCompressionTypeZlib load succeeded
AppleIntelCPUPowerManagementClient: ready
Got boot device = IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/SATA@B/AppleMCP79AHCI/PRT0@0/IOAHCIDevice@0/AppleAHCIDiskDriver/IOAHCIBlockStorageDevice/IOBlockStorageDriver/SAMSUNG MMDOE56G5MXP-0VB Media/IOGUIDPartitionScheme/Untitled@2
BSD root: disk0s2, major 14, minor 2
Kernel is LP64
FireWire (OHCI) Lucent ID 5901 built-in now active, GUID 002500fffed159ce; max speed s800.
systemShutdown false
BootCache: hit rate below threshold (892 hits on 1793 lookups)
AppleIntelCPUPowerManagement: initialization complete
Waiting for DSMOS...
NTFS driver 3.0 [Flags: R/W].
NTFS volume name Windows XP, version 3.1.
NVDANV50HAL loaded and registered.
Previous Shutdown Cause: 0
BTCOEXIST on
wl0: Broadcom BCM4328 802.11 Wireless Controller
5.10.91.19
DSMOS has arrived
NVEthernet: Ethernet address 00:25:00:d1:59:ce
AirPort_Brcm43xx: Ethernet address 00:24:36:f0:52:3f
IO80211Controller::dataLinkLayerAttachComplete(): adding AppleEFINVRAM notification
IO80211Interface::efiNVRAMPublished():
NVEthernet::setLinkStatus - Valid but not Active
NVEthernet::mediaChanged - Link is down
NVEthernet::setLinkStatus - Valid but not Active
AirPort: Link Down on en1. Reason 1 (Unspecified).
Auth result for: 00:0d:02:76:2a:fe MAC AUTH succeeded
AirPort: Link Up on en1
bash-3.2# uname -a
Darwin Mac-mini.local 10.0.0 Darwin Kernel Version 10.0.0: Fri Jul 31 22:46:25 PDT 2009; root:xnu-1456.1.25~1/RELEASE_X86_64 x86_64

 万一、起動しなくなったり、不安定な状態になってしまった場合は、メディアブート後、元のboot.efiでblessし直せば環境の修復が可能である。

 最後に、Mac mini Early 2006, Late 2006は、CPUが32bitのCore Solo/Duoの為、そもそも64bitカーネル自体実行できない。

  • おまけ. 32bitモードに戻す方法は以下の通りで、起動時の引数指定を無くせばよい。

bash-3.2# nvram -d boot-args
bash-3.2# reboot

■追記1. (2009/09/11)

 2009/09/11に10.6.1のアップデートが配布されたが、boot.efiは更新対象とはなっていなかった。その為、バイナリエディタで直接上書更新していても問題ない。なお、boot.efiはカーネルをロードする為のブートローダという役割から、頻繁に更新される可能性は低く、アップルが64bitカーネルの使用を再度無効にする意図がない限りは、修正が入る可能性は低いと思われる。

 また、EFIファームウエアアップデートを実行し、ファームウエアのバージョンを1.2に上げた所、10.6においてカーネルが32bit/64bitに関わらずメモリを8GB(4GBx2)搭載しても、安定動作するようになった。


■追記2. (2009/10/09)

 10.6.2のベータアップデートプログラムには、インテルチップセットの内蔵GPU(GMA950、GMAX3100)用64bitドライバが含まれており、インテルGPU搭載機でもEFIが64bitなら64bitカーネルでCI/QE/OpenGLのアクセラレーションが働くようになる。

 Mac mini(Eary 2009)での64bitカーネル解禁に繋がるとは思えないが、CPU、EFI共に64bitに対応しているが、グラフィックスアダプタのドライバが32bitしか用意されていなかったIntel GPU搭載のMac Book(Late 2007, Early 2008、Late 2008)、Mac Book Air (Early 2008)などには朗報であろう。

 ただし、前モデルのmini (Mid 2007)はEFIが32bitなので、GMA 950用の64bitドライバが提供されても残念ながら使用できない。

■追記3. (2009/10/29)

 Late 2009 iMacのプレインストールSnow Leopardの情報を確認したが、OSは10.6.1であるものの、カーネルは10.1.2とアップデートがされていた(Late 2009 Mac miniのカーネルは10.0.0のまま)。

 更にLate 2009 iMacのkext情報を確認してみると、10.6.2のベータアップデートプログラムで確認できた内容を取り込んでおり、10.6.1.5とも呼べる内容になっていた。


$ uname -a
Darwin localhost 10.1.2 Darwin Kernel Version 10.1.2: Wed Sep 9
$ file /System/Libray/Extensions/AppleIntelGMA950.kext/Contents/MacOS/AppleIntelGMA950
/System/Library/Extensions/AppleIntelGMA950.kext/Contents/MacOS/AppleIntelGMA950: Mach-O universal binary with 2 architectures
/System/Library/Extensions/AppleIntelGMA950.kext/Contents/MacOS/AppleIntelGMA950 (for architecture x86_64): Mach-O 64-bit kext bundle x86_64
/System/Library/Extensions/AppleIntelGMA950.kext/Contents/MacOS/AppleIntelGMA950 (for architecture i386): Mach-O object i386
$ file /System/Library/Extensions/AppleIntelGMAX3100.kext/Contents/MacOS/AppleIntelGMAX3100
/System/Library/Extensions/AppleIntelGMAX3100.kext/Contents/MacOS/AppleIntelGMAX3100: Mach-O universal binary with 2 architectures
/System/Library/Extensions/AppleIntelGMAX3100.kext/Contents/MacOS/AppleIntelGMAX3100 (for architecture x86_64): Mach-O 64-bit kext bundle x86_64
/System/Library/Extensions/AppleIntelGMAX3100.kext/Contents/MacOS/AppleIntelGMAX3100 (for architecture i386): Mach-O object i386
$ ls /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/
AirPortAtheros.kext/ AppleAirPortBrcm4311.kext/ IO80211NetBooter.kext/
AirPortAtheros21.kext/ AppleAirPortBrcm43224.kext/
$ file /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros.kext/Contents/MacOS/AirPortAtheros
/System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros.kext/Contents/MacOS/AirPortAtheros: Mach-O object i386
$ file /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros21.kext/Contents/MacOS/AirPortAtheros21
/System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros21.kext/Contents/MacOS/AirPortAtheros21: Mach-O universal binary with 2 architectures
/System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros21.kext/Contents/MacOS/AirPortAtheros21 (for architecture x86_64): Mach-O 64-bit kext bundle x86_64
/System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros21.kext/Contents/MacOS/AirPortAtheros21 (for architecture i386): Mach-O object i386

 最後に一点気になることだが、boot.efiのハッシュ値が従来と異なっており、10.6.2では内容が更新されることが予想される。本項で記載した64bitカーネルロード手法は、10.6.2以降では対応できない可能性が懸念され、正式リリース後に再度確認する必要がある。

■追記4. (2009/11/10)

 2009/11/09の深夜にMac OS X 10.6.2 Updateがリリースされた。

 一般的には、不具合の修正やアプリケーション互換性の改善を確認するのが重要であるが、このwikiでは以下を確認した(2以降はMac miniには特に影響が無い内容の為、興味の無い人は読み飛ばして良い)。なお、10.6.1までに確認されていた、ゲストアカウントでログイン後に再ログインすると該当アカウントのホームディレクトリがクリアされる深刻なバグは本アップデートで修正された為、極力アップデートすることを推奨する。

1. boot.efiの64bitカーネルロードチェック
 MacOSXUpd10.6.2.pkgの中身を覗いたが、boot.efiの更新は無く、既存のローダーには影響を与えない。また、裏を返せば、10.6.2でもアップルはMac miniにおいて64bitカーネルのサポートをしないということである。

bash-3.2# shasum /System/Library/CoreServices/boot.efi
2fb9fc10e5b4bb06f62c38b01bd9836a433897f8 /System/Library/CoreServices/boot.efi

 なお、アップデートデータをダウンロードし、アップデートを実行すると下記の通りbless指定がクリアされる(ソフトウエア・アップデートから実行した場合はクリアされない)。

bash-3.2# bless --info
finderinfo[0]: 133 => Blessed System Folder is /System/Library/CoreServices
finderinfo[1]: 203585 => Blessed System File is /System/Library/CoreServices/boot.efi
finderinfo[2]: 0 => Open-folder linked list empty
finderinfo[3]: 0 => No OS 9 + X blessed 9 folder
finderinfo[4]: 0 => Unused field unset
finderinfo[5]: 133 => OS X blessed folder is /System/Library/CoreServices
64-bit VSDB volume id: 0xA4E143A7BD6DA256

 その為、boot64.efiを読み込むよう変更していた場合は、再指定が必要。

bash-3.2# bless --folder /System/Library/CoreServices --file /System/Library/CoreServices/boot64.efi
bash-3.2# bless --info
finderinfo[0]: 133 => Blessed System Folder is /System/Library/CoreServices
finderinfo[1]: 218968 => Blessed System File is /System/Library/CoreServices/boot64.efi
finderinfo[2]: 0 => Open-folder linked list empty
finderinfo[3]: 0 => No OS 9 + X blessed 9 folder
finderinfo[4]: 0 => Unused field unset
finderinfo[5]: 133 => OS X blessed folder is /System/Library/CoreServices
64-bit VSDB volume id: 0xA4E143A7BD6DA256

2. Radeon HD43x0-46x0の追加サポート
 ATI4500Controller.kext、ATI4600Controlller.kextの追加を確認。また、Radeon HD4シリーズにおいて、OpenCLの互換性及びパフォーマンスが向上している。

 GeForce 9400MではOpenCLのパフォーマンスについて違いはみられなかった。

3. Intel Atomの非サポート
 かねてから噂があった通り、Intel Atomが動作しないように対策が取られた(症状としては何も出力されずに再起動)。Atomで動作をさせたい場合は、10.6.2のカーネルソース公開後、ブロックしている部分を修正し、ソースから自力でビルドする必要がある。

 また、10.6.2ではEISTが無い場合は、AppleIntelCPUPowerManagement.kextでKernel Panicが発生する (デスクトップ用のAtomはEIST機能が無い為、その対策も兼ねていると推測する)。エラー内容からはCore i5/i7用の実装の結果とも思われるが、Mac miniへの影響はない。

  (追記 2009/11/11)
 カーネル(march_kernel)バイナリを直接編集すればAtom起動不可チェックを回避できる。

4. Core i5/i7のサポート
 Late 2009 iMacでCore i5/i7が採用され、10.6.2で正式にサポートされた(10.6.2以前はカーネル起動時にリブートしてしまい対応していない)。

5. その他
 ・Atherosチッップの64bitサポート(AirPortAtheros21.kextの追加)
 ・Intel内蔵GPUの64bitサポート(AppleIntelGMA950.kext、AppleIntelGMAX3100.kextの64bitバイナリの追加)

■追記5. (2009/11/14)

 Snow Leopard OSX Serverのカーネルローダboot.efiを確認したが、Snow Loepardと全く同一のものであることが確認できた。


bash-3.2# uname -a
Darwin myserver.private 10.0.0 Darwin Kernel Version 10.0.0: Fri Jul 31 22:47:34 PDT 2009; root:xnu-1456.1.25~1/RELEASE_I386 i386
bash-3.2# shasum /System/Library/CoreServices/boot.efi
2fb9fc10e5b4bb06f62c38b01bd9836a433897f8 /System/Library/CoreServices/boot.efi

 サーバ版は、サーバとして提供するサービスをクライアント版に追加し、各種管理コンソールの機能を追加したものなので、カーネルをはじめとした基盤システムはクライアント版と共通である。