先日、といってももう2018年8月のことですが、Jumper Computer Technology社のEZbook X4というラップトップを購入しました。愛用していたNEC LaVie Zのバッテリ持ちがかなり悪くなってしまったので、その代替機という位置づけです。

LaVie Zでもそうしていたように、オープンソースのChromium OSをビルドして、自家製Chromebook (正確にはChromiumbookとでもいうべきでしょうか)にして使うつもりでした。しかし、当時は(調査不足のため)USBメモリからの起動ができず、Chromebook化を一時的に断念せざるを得ませんでした。

なんとかEZbook X4でChromium OSが使えないものかと、その後も調査を続けていました。そんななか、Chromium OSのカスタマイズ版として有名なNeverware社CloudReadyでの起動を試してみたところ、ブートが成功し初期設定画面に進めることがわかりました。

こうなると、自前ビルドしたUSBメモリでの起動ができないのは、ビルド段階で何らかのミスをしている、あるいはビルド手順に何か過不足がある可能性が高くなってきます。ブート実績ができたことに断然勇気づけられて、さらに調査を進めました。その結果、EZbook X4で自前ビルドのChromium OSを起動することに成功しました!!

本記事では、調査の結果判明した、起動に失敗していた原因を報告します。

なお、本記事(および次回記事)で述べる内容はEZbook X4のみで確認していますが、Intel社のGemini Lake世代CPUを搭載したマシンならば同様に適用できる可能性があります。(EZbook X4はGemini Lake世代のCeleron N4100を搭載)

さて、ブートできない原因は何だったのか、結論は以下の二点です。

GRUBのバグ

GRUB (Grand Unified Boot Loader)は、主要なLinuxディストリビューションでOSの起動に用いられているブートローダであり、Chromium OSでも使用されます。ブートローダは、大まかにいうとBIOSやUEFIから制御を受け取った後に、実際にOS(カーネル)を起動する役割を持ちます。GRUBの詳細については以下の各記事をご参照ください。

GRUBの最新リリースは現在バージョン2.02ですが、本版にはバグがあります。Gemini Lake世代のCPUを搭載したマシンでは、GRUBがフリーズしてしまい、OSを起動するに至りません。以下の記事に本バグの詳しい説明があります。(記事ではApollo Lake世代のPentium N4200で問題が発生するとのことですが、Gemini Lake世代のCeleron N4100でもまったく同様です。)

さいわいなことに、本問題を解消するパッチがすでに存在し、GRUBのGitリポジトリに取り込まれています。したがって、リポジトリから先端のソースコードをチェックアウト、ビルドすることで解決可能です。上記記事の著者であるPawitさんのGitHubリポジトリにパッチ、ビルド手順、さらにビルド済みのファイルがまとめられていますので、次回記事では本リポジトリの内容を参考に作業を進めることにします。

グラフィックスファームウェアのインストール不備

手もとでLinuxをお使いでしたら/lib/firmware以下をのぞいてみてください。さまざまなファイルが格納されていることがわかると思います。これらはバイナリ・ブロブなんです。メーカーがバイナリ形式のみでリリースしているファームウェアやマイクロコードがこのディレクトリにまとめられているのですね。

一般的なLinuxディストリビューションにはlinux-firmwareというパッケージがあり、OSのインストール時に本パッケージもインストールされます。これにより、特定のハードウェアの動作にバイナリ・ブロブが必要であることをユーザが意識することは通常ありません。各Linuxディストロのlinux-firmwareパッケージについては、たとえば以下を参照してください。

ちなみに、上記パッケージのおおもととなるファイル群は、以下のGitリポジトリで管理されています。

一般的なLinuxディストリビューションでは、インストール対象となるマシンのハードウェア構成は事前にわかりません。構成に含まれるパーツにはさまざまなものがありえます。したがって、linux-firmwareパッケージを作成・管理する立場としては、多様なハードウェアに対応できるよう、可能な限り多くのバイナリ・ブロブを含めることになります。

いっぽう、Chrome OSはChromebookの機種ごとにカスタマイズしてビルドされます。ハードウェア構成は事前にわかっているので、本構成のみを満たせばOKです。したがって、バイナリ・ブロブについても必要最小限のファイルのみをインストールする、という考え方になっているようです。

EZbook X4はChromebookではありませんので、Intel/AMD 64bit CPU搭載機向けの一般的なハードウェア(ボード)定義amd64-genericを用いてビルドを行なうのですが、この指定だけでは必要なバイナリ・ブロブがインストールされないということがわかりました。(Gemini Lake世代CPUでは、内蔵グラフィックスハードウェアの一部機能の使用にバイナリ・ブロブが必要ですが、これがインストールされません。)

本問題への対応は、「必要なバイナリ・ブロブがインストールされるようビルド時に指定を追加する」ことです。具体的な指定内容については次回記事で述べます。

以上、EZbook X4でChromium OSが起動しなかった原因が判明しました。次回記事では、本調査結果をふまえたビルド手順、およびインストール手順を説明します。

参考文献

  1. GNU GRUB, https://www.gnu.org/software/grub/
  2. GNU GRUB, https://ja.wikipedia.org/wiki/GNU_GRUB
  3. Grub 2 issue on Intel N4200, https://medium.com/@pawitp/grub-2-issue-on-intel-n4200-97c12d4db8af
  4. Compile of Grub 2 compatible with N4200 CPU, https://github.com/pawitp/grub2-chromiumos-n4200/
  5. バイナリ・ブロブ, https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%BB%E3%83%96%E3%83%AD%E3%83%96