oyogupenguin blog

2019/01/31

Ubuntu でカーネルコンパイルを行う手順

general
Ubuntu でカーネルコンパイルを行う手順

1.はじめに

このドキュメントではUbuntuでカーネルコンパイルを行う手順を備忘録的にまとめたものです。

このサイトを参考にして実際に動作させながら作成しています。

筆者の実証環境はMacBookPro2018のVM上

  • OS:Ubuntu 18.04.1
  • CPU:Intel Corei9 2.9GHz
  • Memory:8GB
  • HDD:30GB

で行いました。

2. カーネルをコンパイルする準備

カーネルソースコード

カーネルコンパイルを行うにはカーネルのソースコードが必要である。

Linux Kernel Archive(https://www.kernel.org/)に、カーネルのソースコードがあるので、ダウンロードしてきます。

ダウンロードしてきたカーネルは圧縮されていると思うので、あらかじめ解凍しておきましょう。 (こういうと料理番組みたい)

ソフトウェアリポジトリの追加

Ubuntuにインストールできるソフトウェアはapt apt-getでインストールできますが、これらが、コマンドのソースコードをダウンロードできるようにしてあげます。そうすることでdpkg-devが’使えるようになります。

3.カーネルをコンパイルしよう!

まずはパッケージをインストール

カーネルビルドに必要なパッケージ類をインストールします

sudo apt install git ccache fakeroot libncurses5-dev
sudo apt build-dep linux
  • git :ソースコード取得などに使う。パージョン管理つーる
  • Cache ビルドの高速化を行うパッケージ
  • fakeroot:カーネルパッケージ作成時に使用
  • libncurses5-dev:カーネルコンフィグ時のUIをビルドする際に必要
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ファイルが作成されていれば成功です!

お疲れ様でした。

profile

Gravatar for oyogupenguin@gmail.com

Name : oyopen

Working in Omotesando, Tokyo.
as a Software Engineer

Links

  • x (ex:Twitter)
  • GitHub