oyogupenguin blog
このドキュメントではUbuntuでカーネルコンパイルを行う手順を備忘録的にまとめたものです。
このサイトを参考にして実際に動作させながら作成しています。
筆者の実証環境はMacBookPro2018のVM上
で行いました。
カーネルコンパイルを行うにはカーネルのソースコードが必要である。
Linux Kernel Archive(https://www.kernel.org/)に、カーネルのソースコードがあるので、ダウンロードしてきます。
ダウンロードしてきたカーネルは圧縮されていると思うので、あらかじめ解凍しておきましょう。 (こういうと料理番組みたい)
Ubuntuにインストールできるソフトウェアはapt
やapt-get
でインストールできますが、これらが、コマンドのソースコードをダウンロードできるようにしてあげます。そうすることでdpkg-dev
が’使えるようになります。
カーネルビルドに必要なパッケージ類をインストールします
sudo apt install git ccache fakeroot libncurses5-dev
sudo apt build-dep linux
sudo apt build-dep linux
は指定したパッケージをビルドする際に必要なソフトウェアパッケージをインストールするサブコマンド(第一引数の下にさらにコマンドを入力できるコマンド)です。 この場合、Linuxのパッケージをビルドする際い必要なパッケージをインストールしています。
Ubuntuでは、パッケージのリポジトリを複数保持しており、sudo apt build-dep linux
を実行するには、Linuxソースコードのリポジトリと接続しなければなりません。以下のようにしてください。
デスクトップ環境であれば「ソフトウェアとアップデート」を起動した上で「Ubuntuのソフトウェア」タブの「ソースコード」にチェックを入れてください。
先ほど解凍したカーネルのソースコードがあるディレクトリと同じ階層に、build
ディレクトリを作成しましょう
cd ~/way/to/source/file
mkdir ../build
ディレクトリ構造は次の通りです。
--
|-/linuxカーネルソースコード(dir)
|-/build
|
Linuxカーネルをビルドをする際、そのカーネルの設定が記載された.config
ファイルが必要になります。
マルチコアプロセッサを許可するか、デバッグモードでビルドするかなどの各種機能のON/OFFや、外部モジュールの組み込みなどを設定することができます。
詳細は省きますが、特に設定する項目がない場合、現在使用されているカーネルの設定を利用します。現在の設定ファイルは、/boot
ディレクトリにあるので
cp /boot/config-`uname -r` ../build/.config
でコピーしてきます。
しかし、そのまま利用することはできないので、今回ビルドするカーネルバージョンに合わせて、.config
を設定し直してあげましょう。
make O=../build/ olddefconfig
いよいよカーネルをビルドします!
カーネルをビルドする際、モージュールも一緒にビルドします。
//カーネルのビルド
make -j9 O=../build/ LOCALVERSION=-stock
//モジュールのビルド
make modules -j9 O=../build/ LOCALVERSION=-stock
上のコマンドでは
-j9
: ビルドに使用するコア数を指定LOCALVERSION
: バージョン名をつけます。パッケージ化した時に、名前の最後に付きます。最後にビルドしたカーネルとモジュールをパッケージ化します。
make bindeb-pkg O=../build/ LOCALVERSION=-stock
一つ上のディレクトリ階層に.deb
ファイルが作成されていれば成功です!
お疲れ様でした。
Name : oyopen
Working in Omotesando, Tokyo.
as a Software Engineer