NVRAMのエミュレーション

NVRAMは不揮発性メモリの意味で、電源を落としても記憶が消えないメモリーのことです。マザーボード上にもありボタン電池などでバックアップされています。コンピュータ機器では、音量とか起動ディスクなどの情報が記憶されています。昔のMacではPRAM (パラメータRAM) と呼ばれていたこともありますが、NVRAMと同じものです。

本物のMacのハードウェアにも、ATXマザーボード上にも、どちらにもNVRAMはあります。しかしHackintoshでは、macOSからATXマザーボード上のNVRAMがうまく読めないこともあるようです。

そこで使われるのがEmuVariableUefi-64.efiです。Cloverのdriver64UEFIフォルダに入れておくと、NVRAMのふり(エミュレーション)をしてくれます。NVRAMが覚えておくべき情報を、おそらくSSD/HDDなどの上で記憶しておいてくるのだと思います。マザーボード上のNVRAMがmacOSから利用できていればEmuVariableUefi-64.efiは不要です(あっても構わないです)。利用できていなければ、後述するNvidia Webドライバの利用などで必要になります。

NVRAMの内容を見る

NVRAMはterminalからnvramコマンドで読み書きできます。man nvramとすると使い方が表示されます。それを見ると:

nvram [ -p ] [ -f filename ] [ -d name ] [ -c ] [ name [= value ]] ...
OPTIONS
-d name
Deletes the named firmware variable.
-f filename
Set firmware variables from a text file. The file must be a list of "name
value" statements. The first space on each line is taken to be the separator
between "name" and "value". If the last character of a line is \, the value
extends to the next line.
-x Use XML format for reading and writing variables. This option must be used
before the -p or -f options, since arguments are processed in order.
-c Delete all of the firmware variables.
-p Print all of the firmware variables.

のように、いろいろなことができるようです。例えば-pxオプションでNVRAMの内容をXML風に見ることができます。長いのでlessにパイプすれば、スクロールや検索もできて便利かもしれません。

nvram -xp | less

-xpオプションでわかるように、NVRAMにはキーとデータの対でデータが保存されています。Hackintoshで重要なキーの一つがNVIDIAのWebドライバを使うかどうかを記憶するキー、nvda_drvです。Webドライバが機能しているならば、以下のコマンド

nvram nvda_drv

で1%00というデータが返ってくるはずです。16進数で表すと0x3100というデータで、アスキーコードの1と、数値のゼロの2バイトです。C言語などの文字列は、文字列の最後を0x00で表しますので、1を表す文字列だと思われます。使用中ということでtrueを表す1になっていると思われます。このキーが無い場合はドライバが動かないため、低解像度表示になったり、画面表示されない可能性もあります。

NVRAMの機能を確認する

NVRAMが機能しているかどうかを確認するためには、適当なキー・データ対を作って電源を切っても保存されているかどうか調べれば良いです。例えば、

sudo nvram hogehoge=HelloWorld

とすると、hogehogeというなんの意味もないキーが作られて、それにHelloWorldという文字が割り当てられます。

nvram hogehoge

で確認することができます。ここで、マシンを再起動してもこのデータが残っていればNVRAMが働いていることになります。確認ができたら、以下のようにして消しておきます。

sudo nvram -d hogehoge

手元の3台のマシンで調べたところ、2台はNVRAMを保持してくれていました。hogehogeも残っていました。一方で、1台はNVRAMが消えてしまいました。hogehogeが消えるだけではなく、nvramコマンドが返してくれるキーの数も6個しかありません。

nvram -xp | grep key
<key>EFIBluetoothDelay</key>
<key>LocationServicesEnabled</key>
<key>SystemAudioVolume</key>
<key>SystemAudioVolumeDB</key>
<key>bluetoothActiveControllerInfo</key>
<key>bluetoothInternalControllerInfo</key>

NVRAMが消えてしまうマシンでも、EmuVariableUefi-64.efiを入れておけば、NVRAMが消えなくなります。

5件のコメント

  1. ノート等は輝度やその他設定をNVRAMに保存しているようでEmuVariableUefi-64.efiを入れると
    起動時に設定をリストアしないことがあるみたいです。ノートに入れるのはおすすめできないとフォーラムにありました

    1. ありがとうございます。必須という記載を訂正しました。ノートならNvidia Webドライバを使うこともないので、macOSから読めなくても問題ないですね。

  2. ども、Boot macOSさん、

    NVRAMっていうのも。さらって話す時はあまり深く考えないですけど、いざいろいろ調べてると、なかなか理解するのがむずいです。。。

    下記の記事からは、Appleのエンジニアからの聞いた情報とのことで、実際には下記のような管理上の構造を取ってるらしです。
    ┌───────┬──────┐
    │ PARAM │ SMC │
    ├───────┴──────┤
    │ NVRAM │
    └──────────────┘

    MACでOS起動の際にアクセスするNVRAMでは一体何を管理しているのか?あまり意味も知らずにMACが起動しない時のトラブルシューティングのPRAMクリアをするのが、何がクリアされるのか心配な人に勇気と解像度を上げる 
    http://www.hachim.jp/mac/nvram-pram-smc-efi.html

    NVRAMコマンドでは、音関連の情報とか以外にも、csr-active-config、Bluetoothの情報、Security-modeなども存在してますね。

    記事にもコメント的に述べられているように「appleなので全てのパラメータをNVRAMコマンドで表示させない遊びゴコロがある」というので、全部がDumpみたいに見えないんで、なんだか謎というか、むずい感じですね。NVRAMの情報をまるはだかにしたいなとか思っても、この先が手詰まりかんでどうやっていいのやら。。。

    Wikiリークの記事にもあるとおり、Boot用の情報が最も重要なんで、ここさえ押さえててたら後は見えない情報も含めて必要に応じてその時に調べるみたいになりますね。

    Important NVRAM Variables and GUIDs.
    https://wikileaks.org/ciav7p1/cms/page_26968084.html

  3. 今これGUID Indexとやらを見つけたんですけど、遊び心でNVRAMに隠蔽隠れてるやつの全貌が分かりそうですね。

    AppleNVRAM
    https://github.com/erikberglund/AppleNVRAM

    This is a collection of Apple-related nvram variables.

    ⭐️GUID Index

    Apple
    7C436110-AB2A-4BBB-A880-FE41995C9F82
    4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14
    AF9FFD67-EC10-488A-9DFC-6CBF5EE22C2E
    8D63D4FE-BD3C-4AAD-881D-86FD974BC1DF
    9EBA2D25-BBE3-4AC2-A2C6-C87F44A1278C
    36C28AB5-6566-4C50-9EBD-CBB920F83843

    EFI
    8BE4DF61-93CA-11D2-AA0D-00E098032B8C

    Undefined
    DFBBAAB-1392-4FDE-ABB8-C41CC5AD7D5D
    79941ECD-ED36-49D0-8124-E4C31AC75CD4
    05299C28-3953-4A5F-B7D8-F6C6A7150B2A
    EB704011-1402-11D3-8E77-00A0C969723B
    FA4CE28D-B62F-4C99-9CC3-6815686E30F9

    Bootloaders
    36D08FA7-CF0B-42F5-8F14-68DF73ED3740
    4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102

    >昔のMacではPRAM (パラメータRAM) と呼ばれていたこともありますが、NVRAMと同じものです。
    簡単にいえば昔のPRAMというのは現在のIntel Macも管理上で分類されるものはあるんだけど、Intel Macになって、GUIDベースで管理されるようになっちゃったんで、ざっくりもう全部まとめてNVRAMと言うようになったんでしょうかね?そんで、管理構造上は昔のPRAMと同じ目的というか内容的に同じな物とIntel Macになって新たに必要になったものなどの分類はできるってこと?っていうことで、今はあたまグルグルな感じです。。。

    1. よくわかっていないのですが、NVRAMっていうのはマザーボードにある不揮発メモリーですよね。なので、同じメモリーに、EFIがデータを保存したり、Windowsが保存したり、マルチブートするLinuxが保存したり、macOSが保存したりするけど、例えばWindowsが保存した値はmacOSから見えてもしょうがないし、むしろ読み書きできないようになっていると思います。その違いが、NVRAMとPRAMの違いなのかなと想像しています。詳しい方いらしたらぜひ教えていただければと思います。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です