本家Linux カーネルをコンパイルして仮想PCで起動する

こんにちは、JWordのゲーム開発エンジニア カネテックです。

みなさんカーネルコンパイルしてますか?kernel.orgからソースコードをダウンロードしても
使い方がよくわからない、なんて思ったことはないですか?
今回は本家Linuxカーネル(kernel.orgで公開されているもの)をダウンロードして
仮想PC上で起動させる手順を共有いたします。

概要

  • ソースコードの入手、展開
  • カーネルコンパイル
  • 仮想イメージの作成
  • カーネルの設置
  • ブートローダのインストール
  • 起動

ソースコードの入手、展開

何はともあれ、ソースを入手して展開しないことには始まりません。
ちょうど執筆時点(2016/05/31現在)では4.7-rc1というリリース候補版がありますので、
これを仮想PCで動作させて動作確認する、というシナリオにします。

kernelorg

日付の右にある[tar.xz]というリンクをクリックしてソースコードをダウンロードします。
ダウンロードしたファイルはtarコマンドを使って展開しておきます。

 

カーネルコンパイル

x86の64bitアーキテクチャ向け(amd64)のカーネルを作ります。

コンパイルオプションをx86_64のデフォルトで設定

カーネルイメージのタイプとしてbzImageを指定してコンパイル実行

 

コンパイルがうまくいくと、以下のようにカーネルイメージファイルが得られます。

 

仮想イメージの作成

今回はVirtualBoxで起動させることにします。
ただし、専用の形式であるVDIのファイルは編集しづらいので、rawイメージを作成して
データを全て置いてから、最後にVDIに変換する手順にします。

100MBのrawイメージの作成

 

パーティショニング(プライマリパーティションに全領域を割り当てる)

 

ext3ファイルシステムの構築

 

カーネルの設置

マウントしてカーネルを設置します。ついでに後で必要になるbootディレクトリも
ここで作っておきます。

 

ブートローダのインストール

続いて、作った仮想ディスクにブートローダをインストールしていきます。
これは既存のLinuxが動いている環境に接続した方が簡単なので、CentOSの
インストールディスクに収録されているレスキューモードをVirtualBoxで
動かして、その環境の中でsda.rawにGRUB2をインストールします。

まずはsda.rawをVirtualBoxで認識させるために、VDI形式にコンバートします。

 

続いて、VirtualBoxで新規仮想PCを作成し、CentOSのISOイメージとsda.vdiを
接続した状態で立ち上げます。

ストレージ設定

スクリーンショット 2016-05-31 11.15.12

インストールディスクが起動したら、「Troubleshooting」を選択し「Rescure a CentOS system」
を選択します。(CentOS7の場合)

スクリーンショット 2016-05-31 11.18.49

起動が完了すると以下のメニューが表示されるので、「3) Skip to shell」を選択してシェルを
起動します。

スクリーンショット 2016-05-31 11.22.57

接続した仮想ディスク(sda.vdi)にGRUB2をインストールします。

 

ここまでできたら、いったん仮想PCはシャットダウンしておきます。

起動

VirtualBoxのストレージ設定を開き、CentOSのISOイメージを取り除きます。

スクリーンショット 2016-05-31 12.13.14

仮想PCを再度起動します。うまくいくと、以下のようにGRUBのプロンプトが表示されます。

スクリーンショット 2016-05-31 12.14.29

以下のようにカーネルの場所をGRUB2に教えて、起動してみます。

 

長かったですね、お疲れ様でした。無事起動することができました。

スクリーンショット 2016-05-31 12.16.45

起動に要した時間は0.98秒!速いですね!
カーネルは起動完了後に/sbin/initを実行しますが、まだ/sbin/initを用意していないため
カーネルパニックで停止しています。

もちろん、sda.rawの中にinitを置くことでこの先の動作をさせることも可能です。
余力がある人は是非チャレンジしてみてください!