Linuxカーネル

仮想マシン上でカーネルソースをコンパイルしてみる

ダウンロードしたカーネルソースをコンパイルする方法

まずはmenuconfigコマンドでカーネルパラメータを設定する

カーネルパラメータの設定を行うためのコマンドを調べたんですが、幾つか種類があるようです。

 

この度参考にさせてもらったのはコチラなんですが、ここでは「menuconfig」というコマンドを推奨している様子なのでここは従ってみます。

 

CUIで設定できるということで、リモートでもローカルでも同じように使用できるということなので便利そうですね。使う前にソースを展開したディレクトリへ移動せよ!ということなのでcdコマンドで移動してから早速実行してみます。

 

# cd /usr/src/

# make menuconfig

 

するとどうやら「makeコマンドがねーじゃねーか!」と怒っているご様子。なので「apt-get install make」にてインストールした後再び「make menuconfig」と入力すると・・・

 

今度は「ncursesをインストールしろ」とのこと。こちらも「apt-get install ncurses-dev」にてインストールします。

 

カーネルのコンパイルを行うには必要なソフトやライブラリを揃えないといけない的なことが書かれていたのを見かけてはいたんですが、なんだか色々とめんどくさくて既に心が折れそうですがめげずに頑張ります。

 

実行してみると↓みたいな画面になりました。

 

menuconfig

 

なるほど、画面上で「yes」「no」「modules」を選択して設定していくわけですね。パッと見でなんとなく分かる項目もあるんですが、殆どが訳わかりません。。。

 

動くかどうかは分かりませんが、まずはこのままの状態で.configファイルを作成してコンパイルを進めてみることにします。動かなきゃ古いカーネルで起動しなおして設定すればよさそうですし、初めてのコンパイルで上手く動くとも思えませんし。

 

カーネルパラメータに基づいてコンパイルする

先ほどの動作で/usr/src/.configというファイルが作成されたようですので、いよいよコンパイルへと進みます。

 

大雑把な流れを先に纏めると

 

  1. コンパイルを実行
  2. モジュールをコンパイル
  3. GRUBに設定して新しいカーネルから起動できるよう登録
  4. モジュール類もGRUBに登録する

 

といった具合のようですので、ターミナルで一気に進めていきます。

 

並列処理(以下の場合多重度:3)でコンパイル実施。時間短縮のため
# make -j 3

モジュール類をコンパイル
# make modules

コンパイルしたカーネルをGRUBに登録
# make install

モジュール類もGRUBへ追加登録
# make modules_install

 

サラッと書きましたが、非力なマシン上に作成した仮想マシンでは最初のコンパイルで軽く1時間以上(力尽きて寝てしまい、朝起きたら終わっていた)。次とその次は数十分で終わったのですが、最後の「make modules_install」がまた長かった・・・。気が付いたら朝になってたのでこれもどのくらいかかったか不明です。

 

さぁ、無事起動するかな?

 

仮想マシンを再起動してみる

いよいよ再起動を実施してみます。

 

起動時に、コンパイルを行ったLinux-3.16.5がちゃんと表示されています。よしよし。

 

このまま待ってみると…‥・

 

起動しません。。。

 

やっぱりパラメータの設定をきちんと行わないとダメ!ということなのでしょう。

 

今日のまとめ

さて、久しぶりの投稿で気合を入れて挑んだはずの「カーネルのコンパイル」ですが、流れを纏めるとおよそ以下のとおりとなります。

 

  • カーネルパラメータの設定を行う方法の一つとして「menuconfig」というコマンドがある
  • 上記のmenuconfigで設定を行った結果「.config」という設定ファイルが作成される
  • .configファイルの無いように基づいてmakeコマンドでコンパイルを実施
  • make installにてGRUBへ新しいカーネルを追加登録
  • 再起動して無事動けば万歳!

 

といったところでしょうか。

 

久しぶりの投稿だったので気合を入れて臨んだはずの作業だったんですが、結果は見事なまでに失敗でした。

 

気合を・・・といいつつ細かい設定もせずになすがままに進めてしまったのですから当然かもしれませんね。

 

やはり少しずつでもカーネルパラメータを理解しないことには始まらないようです。

オススメの記事

-Linuxカーネル
-,