現在(2012.12)、インタフェースの違う2種類のバリエーションがあります。それぞれが、マザーボードだけの製品と、ケースに入ってACアダプタがセットになったべアボーンの製品の2種類で販売されています。以下では、DC3217IYEにインストールしていますがDC3217BYでも可能だと思います。
現在(2013.1)、NUCのBIOSには、Version 0020, 0025, 0028, 0032, 0036の5種類が公開されているようです。Update Release Notesによるとかなりいろいろな不具合に対応している様子なのでできるだけ最新版にした方がよいと思われます。Intelのサイトで型番でBIOSを検索すると入手できます。それぞれのBIOSはいくつかの形式で配布されていますがRecovery BIOS Updateという形式のものが一番簡単かと思います。このBIOSファイルをFAT32などでフォーマットしたUSBメモリーに入れて、NUCにさして、F7キーを押しながら起動すると、BIOSファイルを選択してアップデートできます。
NUCの素のDSDT(いわゆるvanilla)を取り出します。そのためには、
という手順が必要です。上記私的Wikiに書いてあるリンク先を参考に、DOSで起動するUSBメモリーを作成して、ACPIVIEWでDSDT.BINを取得しました。DSDT.BINはDSDT.amlと同じものです。
次にこのDSDT.amlを読みやすくテキストに変換し(逆アセンブル、逆コンパイル:正確な表現じゃないかもしれないけど)、これを編集して、またDSDT.amlに変換(コンパイル?)します。 このツールもいろいろあるようですが、たとえばEVOSX86 TeamのDSDTSEが使えます。
とりあえず何も手を加えない状態でコンパイルしてみます。いくつかWarningが出ます。そのままでも問題無いようですが念のためにWarningも出ないようにしておきます。DSDTSEのDSDT fixesに書いてあるWarning対処方法をみると、_T_0という変数名をT_0に書き換えて、_T_1という変数名をT_1に書き換えればよいようです。これでWarningは1個のみになります。最後のWarningはAcquire (MUT0, 0x0FFF)という箇所をAcquire (MUT0, 0xFFFF)に変えればよいようです。これでWarning なしでコンパイルできるようになります。
次に、Device (HDEF)というセクションに、私的Wikiで紹介されているメソッドを追加します。具体的には、
Device (HDEF) { Name (_ADR, 0x001B0000) OperationRegion (HDAR, PCI_Config, 0x4C, 0x10) Field (HDAR, WordAcc, NoLock, Preserve) { DCKA, 1, Offset (0x01), DCKM, 1, , 6, DCKS, 1, Offset (0x08), , 15, PMES, 1 } Method (_PRW, 0, NotSerialized) { Return (GPRW (0x0D, 0x04)) }
の後に、以下を追加します。( Device (HDEF)の最後のMethodとして追加)
Method (_DSM, 4, NotSerialized) { Store (Package (0x06) { "hda-gfx", Buffer (0x0A) { "onboard-1" }, "layout-id", Buffer (0x04) { 0x01, 0x00, 0x00, 0x00 }, "PinConfigurations", Buffer (Zero) {} }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }
次にDevice (GFX0)のセクションにも私的Wikiで紹介されているメソッドに変更します。具体的には、
Scope (_SB.PCI0) { Device (GFX0) {
の中の最後のメソッド
Method (_DSM, 4, Serialized) { Name (DRET, Buffer (0x04) { 0x00 }) If (LEqual (Arg0, Buffer (0x10) { /* 0000 */ 0xE1, 0x75, 0x39, 0x6F, 0x82, 0x7A, 0x67, 0x4F, /* 0008 */ 0x8B, 0x97, 0x15, 0xBE, 0xE0, 0x60, 0xBE, 0xDF })) { If (LEqual (Arg2, Zero)) { CreateWordField (DRET, Zero, F0SS) Store (0x02, F0SS) Return (DRET) } If (LEqual (Arg2, One)) { If (LEqual (^^PEG0.PEGP.LNKV, 0x03)) { Return (Zero) } Return (One) } } Return (DRET) }
を以下に置き換えます。ただし0036のBIOSには上記のメソッドはありませんでした。その場合は単に以下を追加します。
Method (_DSM, 4, NotSerialized) { Store (Package (0x08) { "AAPL,ig-platform-id", Buffer (0x04) { 0x0A, 0x00, 0x66, 0x01 }, "device-id", Buffer (0x04) { 0x66, 0x01, 0x00, 0x00 }, "model", Buffer (0x17) { "Intel HD Graphics 4000" }, "hda-gfx", Buffer (0x0A) { "onboard-1" } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }
このままコンパイルするとここで追加したメソッドで使っているDTGPというメソッドが無いというエラーが出ます。そこでこれを追加しておきます。両方のメソッドから見える場所ならどこに書いてもよいようですが、わかりやすくすべてのメソッドからみられる場所に書いておきます。具体的には、一番最後の
Method (WAK, 1, NotSerialized) { \_SB.PCI0.LPCB.SWAK (Arg0) \_SB.PCI0.NWAK (Arg0) \_SB.PCI0.LPCB.SIOW (Arg0) } //ここ }
に以下のメソッドを追加しておきます。
Method (DTGP, 5, NotSerialized) { If (LEqual (Arg0, Buffer (0x10) { /* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, /* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B })) { If (LEqual (Arg1, One)) { If (LEqual (Arg2, Zero)) { Store (Buffer (One) { 0x03 }, Arg4) Return (One) } If (LEqual (Arg2, One)) { Return (One) } } } Store (Buffer (One) { 0x00 }, Arg4) Return (Zero) }
以上の手順がかったるいという人のためにBIOS ver. 32に対して上記の手順を行い、コンパイルしたDSDT.amlを以下に置いておきます。
http://www29.atwiki.jp/osx86jp?cmd=upload&act=open&pageid=37&file=dsdt_intel_nuc_32.aml.zip
またBIOS ver. 36に対して上記の手順を行い、コンパイルしたDSDT.amlをこのページに添付しておきます。
ここからは通常のtonymac osx86の方法です。UniBeastで起動して、SSDをフォーマットしてOS Xをインストールします。
次にUniBeastで起動して、ブートの選択でSSDを選んで起動します。つぎにMultiBeast 5.2.1を起動して以下にチェックマーク入れます。