linuxでUEFIのプラットフォームサイズを確認する覚書
※本文は前記事からの補足的なものです。
こんにちは。
前記事では32bit版UEFIから起動できるISOファイルの作成手順についてご紹介しました。では、すでに動作しているlinuxからUEFIが64bit版か32bit版かを知りたい場合は、どうすればいいでしょうか?
今回はどちらかというと開発者の目線からとなりますが、
/sys/firmware/efi/fw_platform_sizeファイルを使ってUEFIのプラットフォームサイズを確認する方法をご紹介します。
UEFIには64bit版と32bit版がありますが、どちらを使っているかはlinux上からでも確認できます。私の知るもっとも簡単な方法が、
/sys/firmware/efi/fw_platform_sizeファイルを参照することです。
/sys/firmware/efi/fw_platform_sizeファイルは、linuxが起動する際にefivarsモジュールによって作成されます。このファイルには、UEFIのプラットフォームサイズが書かれています。例えば64bit版のUEFIなら「64」という文字列が、32bit版のUEFIなら「32」という文字列が入っています。
このファイルをcatコマンドで表示すれば、UEFIのバージョンがわかります。以下は64bit版のUEFIを使っている場合の例です。
$ cat /sys/firmware/efi/fw_platform_size
64
この方法は、linuxカーネルがefivarsモジュールをサポートしていることが前提です。またlinuxがUEFIモードで起動していることも必要です。なお古いBIOSモードで起動している場合は、そもそも/sys/firmware/efiディレクトリ自体が存在しません。
まとめます。
/sys/firmware/efiディレクトリが存在するか?
/sys/firmware/efi/fw_platform_sizeに格納されている文字列が「32」or「64」のどちらか?
このようなロジックで、現在動作しているPCプラットフォームが32bit版 UEFIか、あるいは64bit版 UEFIか、そもそもUEFIでない古いBIOSなのかを判定することができます。
もしあなたがLinuxディストリビューションの開発者であれば、これらの情報を元に適切な起動用Grubファイルを生成することは、それほど難しくないと思います。いかがでしょうか?
なお本記事もBingで生成した内容を、そときせひろが手直ししたものとなります。Bing偉い。