2.3. カーネルのコンパイル

2.3. カーネルのコンパイル

カーネルは必要な場合はソースコードからコンパイルが可能。
これはカーネルの再構築と呼ばれる。
カーネルの再構築するケースは以下の通り。

  • 必要なデバイスドライバがカーネルに含まれていない
  • 使用しているハードウェアに最適したカーネルを利用したい
  • カーネルの最新機能を使いたい

2.3.1. カーネルコンパイルとインストール

カーネルのコンパイル手順は以下の通り。

  1. カーネルソースを用意する
  2. カーネルコンフィギュレーションの設定
  3. カーネルをコンパイル
  4. カーネルモジュールをコンパイル
  5. カーネルとカーネルモジュールを配置
  6. ブートローダの設定

カーネルソースの準備

カーネルソースコードは/usr/src/linux*に保存される。
カーネルソースコードのディレクトリには以下ディレクトリがある。

ディレクトリ名説明
archアーキテクチャ(i368, x86_64)に依存したコード
configsそれぞれの.config
crypto暗号処理関数
driversデバイスドライバ関連
fs仮想ファイルシステム/システムファイル関連
includeC言語のincludeファイル
init初期化用コード
ipcSystemV互換プロセス間通信関連ファイル
kernel各種カーネル機能
lib各種モジュール関連
mmメモリ管理関連
net各種ネットワークプロトコル関連
scriptsカーネル作成支援コマンド
Documentations各種ドキュメント
ファイル説明
.configカーネルのビルド設定ファイル
Makefilemakeの設定やカーネルバージョンの記載

なおxzファイルで圧縮されたカーネルソースの展開例は以下の通り。

xz -dc ファイル名.xz | tar xvf -

カーネルコンフィギュレーションの設定

カーネルの設定ファイルは.configに記載される。
カーネルの設定を新しい設定に反映させる場合は以下コマンドを実施する。

make oldconfig

このコマンドでは新しいカーネルで付け加えられた機能のみに対して問い合わせを行い、既存設定はそのままとなる。

カーネルの設定

カーネルの設定ではカーネルの機能を直接カーネルに埋め込むか、埋め込まずにローダブルモジュールにするか、組み込まないか設定が可能。

make config # カーネルオプションごとに答える形で設定
make menuconfig # メニュー形式で表示されているオプション項目を選択して設定
make oldconfig # 現在のカーネルの設定を引き継ぐ
make xconfig # KDE上で設定
make gconfig # GNOME上で設定

なおmake configmake menuconfigで行った設定は/usr/src/linux/.configに保存される。

カーネルとカーネルモジュールのコンパイル

makeコマンドを引数なしで実行するとカーネル、カーネルモジュール共にコンパイルされる。

make

カーネルとカーネルモジュールのインストール

カーネルモジュール(.ko)を適切なディレクトリに保存するにはmake modules_installコマンドを実行する。
なお保存先は/lib/modules/カーネル以下に保存される。

またカーネルのインストールはmake installコマンドで行える。
このコマンドは以下処理を行う。

  1. /boot以下にビルドされたカーネルをバージョンをファイル名にしてコピー
  2. 初期RAMディスクが必要な場合は作成
  3. ブートローダの設定ファイルに新しいカーネル用の起動設定を追加

makeコマンド

makeコマンドはソースコマンドをコンパイル、ビルドなどを行うコマンド。

make [ターゲット] 対象
ターゲット説明
clean.config以外のファイルを削除する
allすべてのビルドを実施
modulesカーネルモジュールをすべてビルドする
modules_installカーネルモジュールをインストール
rpmカーネルをビルド後にRPMパッケージを作成
rpm-pkgソースRPMパッケージの作成
defconfigデフォルト状態の設定ファイルを作る
mrproperカーネルツリーの初期化(設定ファイルもクリア可能)

なおカーネルのビルドと再構築はソールから以下のような手順で行う。

  1. 設定の初期化(make mrproper)
  2. 設定を行う(make oldconfig)
  3. ビルドを行う(make all)
  4. モジュールをインストール(make modules_install)
  5. カーネル本体をインストール(make install)

DKMS(Dynamic Kernel Module Support)

カーネルのソースツリー外にあるカーネルモジュールを自動的に生成する仕組み。

DKMSはカーネルアップデートの際に、カーネルとは独立して自動的にカーネルモジュールをコンパイルしインストールする。 現在、多くのディストリビューションがDKMSをパッケージに含んでいる。