まえがきからビルド実行編にわたって、Chromium OSを自分でビルドして、NEC LaVie Zで使ってみようと思い立ったきっかけから、実際に起動するまでの流れを紹介しました。Chromium OS Developer Guideに詳しく手順が紹介されているので、時間はかかったものの、すんなりビルドが完了してUSBメモリから起動できました。

以下の記事を見て、内蔵WiFiが使えないのではないかと心配していましたが、杞憂に終わったようで問題なく使えます。

幸運にも、LaVie Zとstabilize-10443.Bブランチの組み合わせでは、内蔵デバイスが動作しないという問題は起きませんでした。しかし、機種とブランチの組み合わせによっては、やはりデバイスが認識されない、動作しないという問題が出ると思います。

デバイスが動作しない原因としては、デバイスに対応するドライバがない、対応するドライバがビルドされない、などが考えられます。ドライバがない場合には手の打ちようがありませんが、ドライバがビルドされない場合については、Linuxカーネルのコンフィグレーションを調整することで問題が解決できる可能性があります。

そこで本記事では、ドライバがビルドされない場合を想定して、Linuxカーネルのコンフィグレーションを編集する手順を紹介します。(カーネルコンフィグレーションを編集することで、ビルドするドライバを追加、削除したり、カーネルオプションを調整したりできます。) 以下の四つの記事を参考にします。

以下の手順を行なう前に、ビルド環境のセットアップまでを終わらせておきます。

カーネルバージョンとコンフィグ名の確認

カーネルのコンフィグレーションを編集する前に、いくつか確認しておくべきことがあります。

まず、対象のボード(本記事ではamd64-genericを想定)向けにビルドされる、カーネルのバージョンを確認しましょう。Chromium OSのソースコードには複数バージョンのカーネルが含まれています。次のコマンドを実行してみてください。

(cr) ~/trunk/src/scripts $ ls ../third_party/kernel
experimental  v3.10  v3.14  v3.18  v3.8  v4.14  v4.4

3.8系、3.10系、3.14系、3.18系、4.4系、および4.14系と、6系統ものバージョンが含まれていることがわかります。以下のコマンドを実行して、amd64-genericボードの場合にビルドされるカーネルバージョンを確認します。

(cr) ~/trunk/src/scripts $ emerge-${BOARD} -pv virtual/linux-sources
(snip)
[ebuild  N     ] sys-kernel/chromeos-kernel-4_4-4.4.117-r1384::chromiumos to /build/amd64-generic/ USE="(snip)
(snip)

バージョンは4.4系であることがわかりました。

次に、どのカーネルコンフィグファイルを編集すればよいのかを調べます。Kernel Configurationの冒頭の図のように、Chromium OSではファミリー(Family)、アーキテクチャ(Architecture)、およびフレーバー(Flavour)という階層構造を用いて、カーネルのコンフィグレーションを管理しています。ボード一つに対して一つの完全なコンフィグファイルを用意する代わりに、ファイルを分割して共通部分をくくりだし、管理コストの削減を図っているわけですね。

特定の機種(ボード)に対して、ビルドするドライバの追加・削除などを行なう場合には、基本的にフレーバーに対応するファイルを編集することになります。

amd64-genericボードに対応するフレーバーを調べてみましょう。Chromium OS Board Porting Guideによると、CHROMEOS_KERNEL_SPLITCONFIGという設定値にカーネルコンフィグレーション名(フレーバー)が格納されているようです。この値は、overlay-${BOARD}/profiles/base/make.defaultsというファイルに記述があります。

以下のコマンドを実行してCHROMEOS_KERNEL_SPLITCONFIGの値を確認します。amd64-genericボードの場合はchromiumos-x86_64であることがわかりました。

(cr) ~/trunk/src/scripts $ grep CHROMEOS_KERNEL_SPLITCONFIG ../overlays/overlay-amd64-generic/profiles/base/make.defaults
CHROMEOS_KERNEL_SPLITCONFIG="chromiumos-x86_64"

以上で、カーネルバーションとコンフィグファイル名がわかりました。次は、実際にコンフィグファイルを編集します。

カーネルパッケージの編集宣言

カーネルコンフィグレーションを編集する前に、「カーネルパッケージを編集する」という宣言をします。amd64-genericボード向けには4.4系のカーネルがビルドされることがわかっていますので、sys-kernel/chromeos-kernel-4_4を編集状態にします。(参考: Simple developer workflow)

(cr) ~/trunk/src/scripts $ cros_workon --board=${BOARD} start sys-kernel/chromeos-kernel-4_4
21:22:17: INFO: Started working on 'sys-kernel/chromeos-kernel-4_4' for 'amd64-generic'

カーネルコンフィグレーションの編集

カーネルソースのディレクトリに移動して、以下のコマンドを実行します。先ほど確認したchromiumos-x86_64というフレーバー以外のコンフィグレーションについても編集するかを尋ねられますが、chromiumsos-x86_64以外についてはsで編集をスキップします。

(cr) ~/trunk/src/scripts $ cd ../third_party/kernel/v4.4
(cr) ~/trunk/src/third_party/kernel/v4.4 $ ./chromeos/scripts/prepareconfig chromiumos-x86_64
(cr) ~/trunk/src/third_party/kernel/v4.4 $ ./chromeos/scripts/kernelconfig editconfig
running editconfig for x86_64 i386 armel arm64


***************************************
* Processing x86_64 (x86_64) ... 
* x86_64/chromeos-amd-stoneyridge.flavour.config: press <Enter> to edit, S to skip    # sでスキップ
(snip)
* x86_64/chromiumos-x86_64.flavour.config: press <Enter> to edit, S to skip           # エンターで編集

目当てのchromiumos-x86_64フレーバーでエンターキーを押すと、おなじみ(?)のmake menuconfig時の画面になりますので、ドライバの追加などの必要な変更を行なってください。

Chromium OS - カーネル - menuconfig

変更が終わったら以下のコマンドを実行します。

(cr) ~/trunk/src/third_party/kernel/v4.4 $ make mrproper
  CLEAN   .config
(cr) ~/trunk/src/third_party/kernel/v4.4 $ cd ../../../scripts

以上でカーネルコンフィグレーションの編集は終了です。

あとは、ビルド実行編のコンソールユーザのパスワード設定に戻って、以降の作業を行なえばOKです。

参考文献

  1. Chromium OS Developer Guide, https://www.chromium.org/chromium-os/developer-guide
  2. 無料で作るChromebook!インストールの落とし穴……内蔵ネットワークが使用不可で思わぬ出費も。, https://www.makkyon.com/2015/05/04/chromebook-inspiron11z/
  3. Chrome OSを超低スペのPCにインストールしたらこうなった, https://it-media2.net/chromeos/
  4. Chromium OS Board Porting Guide, https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide
  5. Simple developer workflow (The Chromium Projects, https://www.chromium.org/chromium-os/developer-guide/developer-workflow
  6. Kernel Configuration, https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/kernel-configuration
  7. Chromium OSのカーネルをVAIO Type P向けに再構築する, http://pcmemo.take-uma.net/chromium%20os/kernel_config_vaiop