CentOS 7でカーネルのビルドに挑む(その3)

Pocket

ええと、前回の記事でmake oldconfigをようやく終えたのですが、ひとつ非常に重要なことを忘れていまして、仮想マシンを立て直すことになってしまいました。それは、仮想マシンを立てる時の記事にも追記しましたが、VMXファイルに「firmware=”efi”」という項目を追記して、仮想マシンをUEFIモードにしてからOSをインストールしなければならなかったことです。でないと、イメージを吸い出してもUEFIのみ対応のLIVAには移植できませんから。

じゃあ、あれだけ苦労したmake oldconfigの結果は無に帰してしまうのか? いえいえ、出来上がった.configはしっかり退避させておりますので、これをつかってmake menuconfigを実行したいと思います。

で、make menuconfigを実行したのですが、半分GUIみたいなものですがら、もちろんその過程を全部記録できるわけではありません。無事ビルドが完了したら、.configファイルを公開できればいいかな、と思っています。とりあえず気をつけたのは、Bay Trail-MのeMMCの認識に必要なモジュールである

mmc_core
mmc_block
sdhci
sdhci-acpi
acpi_lpss
pinctrl
pinctrl-baytrail

これらがすべてカーネルに取り込まれるようにしたこと。モジュール名を頼りにサーチをかけながら、どうにか設定できたと思っています。

それにしても、menuconfigは複雑ですね。あれとあれを有効化しないとこれはメニューに出てこないとか、これがモジュールになっているからあれもモジュールにしかできないとか、罠だらけです。必要なモジュール名でサーチをかけながらひとつずつ探して設定していくとい作業は、慣れるまでかなり戸惑いました。こればかりは場数を踏むしかないんでしょうね。

私はPCやらプログラミングやら計算機科学やらの知識があったから何とかついていけたのだと思いますが、ユーザーレベルのLinux経験者とかにとっては、カーネル構築はかなり高いハードルだと思います。まあ、何のかんの言って、私もここまでの作業を面白がってやっていましたから、もはやユーザーレベルは超えているんでしょうね(笑)。というか、この過程を楽しいと思えなきゃ、やってられないとは思いますが。

と、いろいろ書いている横で、実はmake rpmがすでに進行していたりします。今のところ順調にコンパイルできているようなので、多分それなりのカーネルができるのではないかと楽観しておりますが、さて、どうなりますやら。

(実は、一度makeを行なった際にエラーがでて失敗したことがありました。原因は、/usr/bin/bcがインストールされていなかったからなのですが、makeにbcを使っているとはつゆ知らず、カーネル構築の奥深さを思い知らされました。)

……うわ、またmake失敗した。こんどはlz4cが無いと言われた……せっかく最新バージョンだからとカーネルをlz4で圧縮しようとしたのは間違いだったかな? まあ、インストールすればいいか……yumで見つからない?(汗) 調べたら、epelにあるらしいんですけど、CentOS 7にはデフォルトではepel.repoが入っていないらしいです。ということで、

# yum install epel-release

でリポジトリをインストールしてから、

# yum install lz4 lz4-devel

でインストール完了。よし、もう一回make rpm。

(……1時間経過……)

をを、make完走! RPMとSRPMが無事に作成されました!!

……一点だけ気になることが。

コンパイルの途中で、

./usr/include/linux/kexec.h:61: userspace cannot reference function or variable defined in the kernel

というメッセージが出たこと。ただ、ネットで調べてみると昔から取りざたされている問題らしく、動作させる分には気にしなくてもいいらしいです。

ともかく、無事にパッケージができたので、今度はこのカーネルを仮想マシン上で動かしてみたいと思います。ちゃんと動いてくれよ~!

(以下、完結編へつづく

Pocket

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)