Intel NUC Next Unit of Computing

Intel NUC へのインストール方法

  • DC3217IYEにOSX86をインストールした覚え書きです。DC3217BYでもこれで可能だと思います。
  • http://www37.atwiki.jp/osx86/pages/37.html に書いてある方法を参考にしました。というかDSDTの作り方はそのままです。感謝します。
  • DSDTの編集などで説明や手順が間違っているところありましたら訂正お願いします。

NUCについて

現在(2012.12)、インタフェースの違う2種類のバリエーションがあります。それぞれが、マザーボードだけの製品と、ケースに入ってACアダプタがセットになったべアボーンの製品の2種類で販売されています。以下では、DC3217IYEにインストールしていますがDC3217BYでも可能だと思います。

  • DC3217IYE はギガビットイーサネットあり、HDMI出力 x2、(Thunderbolt なし)。本体色ブラック。
  • DC3217BY はThunderbolt あり、HDMI出力 x1 (ギガビットイーサネットなし)。本体色はブラック+天板がレッド。

BIOSをアップデートする

現在(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ファイルを選択してアップデートできます。

DSDTを取り出す

NUCの素のDSDT(いわゆるvanilla)を取り出します。そのためには、

  1. NUCをDOSやLinuxで起動できるUSBメモリを作りこれでNUCをブートする
  2. その状態でDSDTを取り出すプログラムを走らせる

という手順が必要です。上記私的Wikiに書いてあるリンク先を参考に、DOSで起動するUSBメモリーを作成して、ACPIVIEWでDSDT.BINを取得しました。DSDT.BINはDSDT.amlと同じものです。

DSDTを編集する

次にこの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をこのページに添付しておきます。

UniBeastでMac OS X 10.8.2をインストールする

ここからは通常のtonymac osx86の方法です。UniBeastで起動して、SSDをフォーマットしてOS Xをインストールします。

MultiBeastでChimeraインストールとkext類設定する

次にUniBeastで起動して、ブートの選択でSSDを選んで起動します。つぎにMultiBeast 5.2.1を起動して以下にチェックマーク入れます。

  • UserDSDT or DSDT-Free Installation (上記で作ったDSDT.amlをデスクトップに置いておきます)
  • Intel - Hnak's AppleIntelE1000e
  • Patched AppleIntelCPUPowerManagement
  • Mac mini 5,1
  • 10.8.1+ TRIM Patch これでeterhnet, sleep, 音(HDMI 2のみ), WiFi(5GHzもok)など問題なく動作します。 パッチ当てればHDMI 1も音が出るようです。詳しくは上記の私的Wikiをみてください。 BIOSの設定はほぼデフォルトで良いですが、ビデオメモリの設定だけは128Mにします。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年04月03日 15:23
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。