2.3. カーネルのコンパイル
カーネルは必要な場合はソースコードからコンパイルが可能。
これはカーネルの再構築と呼ばれる。
カーネルの再構築するケースは以下の通り。
- 必要なデバイスドライバがカーネルに含まれていない
- 使用しているハードウェアに最適したカーネルを利用したい
- カーネルの最新機能を使いたい
2.3.1. カーネルコンパイルとインストール
カーネルのコンパイル手順は以下の通り。
- カーネルソースを用意する
- カーネルコンフィギュレーションの設定
- カーネルをコンパイル
- カーネルモジュールをコンパイル
- カーネルとカーネルモジュールを配置
- ブートローダの設定
カーネルソースの準備
カーネルソースコードは/usr/src/linux*に保存される。
カーネルソースコードのディレクトリには以下ディレクトリがある。
| ディレクトリ名 | 説明 | 
|---|---|
| arch | アーキテクチャ(i368, x86_64)に依存したコード | 
| configs | それぞれの.config | 
| crypto | 暗号処理関数 | 
| drivers | デバイスドライバ関連 | 
| fs | 仮想ファイルシステム/システムファイル関連 | 
| include | C言語のincludeファイル | 
| init | 初期化用コード | 
| ipc | SystemV互換プロセス間通信関連ファイル | 
| kernel | 各種カーネル機能 | 
| lib | 各種モジュール関連 | 
| mm | メモリ管理関連 | 
| net | 各種ネットワークプロトコル関連 | 
| scripts | カーネル作成支援コマンド | 
| Documentations | 各種ドキュメント | 
| ファイル | 説明 | 
|---|---|
| .config | カーネルのビルド設定ファイル | 
| Makefile | makeの設定やカーネルバージョンの記載 | 
なおxzファイルで圧縮されたカーネルソースの展開例は以下の通り。
xz -dc ファイル名.xz | tar xvf -カーネルコンフィギュレーションの設定
カーネルの設定ファイルは.configに記載される。
カーネルの設定を新しい設定に反映させる場合は以下コマンドを実施する。
make oldconfigこのコマンドでは新しいカーネルで付け加えられた機能のみに対して問い合わせを行い、既存設定はそのままとなる。
カーネルの設定
カーネルの設定ではカーネルの機能を直接カーネルに埋め込むか、埋め込まずにローダブルモジュールにするか、組み込まないか設定が可能。
make config # カーネルオプションごとに答える形で設定
make menuconfig # メニュー形式で表示されているオプション項目を選択して設定
make oldconfig # 現在のカーネルの設定を引き継ぐ
make xconfig # KDE上で設定
make gconfig # GNOME上で設定なおmake configやmake menuconfigで行った設定は/usr/src/linux/.configに保存される。
カーネルとカーネルモジュールのコンパイル
makeコマンドを引数なしで実行するとカーネル、カーネルモジュール共にコンパイルされる。
makeカーネルとカーネルモジュールのインストール
カーネルモジュール(.ko)を適切なディレクトリに保存するにはmake modules_installコマンドを実行する。
なお保存先は/lib/modules/カーネル以下に保存される。
またカーネルのインストールはmake installコマンドで行える。
このコマンドは以下処理を行う。
- /boot以下にビルドされたカーネルをバージョンをファイル名にしてコピー
- 初期RAMディスクが必要な場合は作成
- ブートローダの設定ファイルに新しいカーネル用の起動設定を追加
makeコマンド
makeコマンドはソースコマンドをコンパイル、ビルドなどを行うコマンド。
make [ターゲット] 対象| ターゲット | 説明 | 
|---|---|
| clean | .config以外のファイルを削除する | 
| all | すべてのビルドを実施 | 
| modules | カーネルモジュールをすべてビルドする | 
| modules_install | カーネルモジュールをインストール | 
| rpm | カーネルをビルド後にRPMパッケージを作成 | 
| rpm-pkg | ソースRPMパッケージの作成 | 
| defconfig | デフォルト状態の設定ファイルを作る | 
| mrproper | カーネルツリーの初期化(設定ファイルもクリア可能) | 
なおカーネルのビルドと再構築はソールから以下のような手順で行う。
- 設定の初期化(make mrproper)
- 設定を行う(make oldconfig)
- ビルドを行う(make all)
- モジュールをインストール(make modules_install)
- カーネル本体をインストール(make install)
DKMS(Dynamic Kernel Module Support)
カーネルのソースツリー外にあるカーネルモジュールを自動的に生成する仕組み。
DKMSはカーネルアップデートの際に、カーネルとは独立して自動的にカーネルモジュールをコンパイルしインストールする。 現在、多くのディストリビューションがDKMSをパッケージに含んでいる。