Open2
カーネルとカーネルモジュールのコンパイルとインストールについて
コンパイルとは
- ソースコードを実行可能な形式に変換する作業
- 料理に例えると、レシピ(ソースコード)から実際の料理(実行可能なプログラム)を作る作業
- カーネルのコンパイルが必要な場合:
- 特別なハードウェアのサポートが必要
- カスタマイズした機能が欲しい
- パフォーマンスの最適化を行いたい
- コンパイルの基本的な手順:
a) 準備:
# 必要なツールのインストール
sudo apt-get install build-essential kernel-package
b) ソースコードの取得:
# カーネルソースの取得
wget https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.x.x.tar.xz
tar xvf linux-6.x.x.tar.xz
c) 設定:
cd linux-6.x.x
make menuconfig # 設定画面が表示される
d) コンパイル:
make # カーネルのコンパイル
make modules # モジュールのコンパイル
e) インストール:
sudo make modules_install # モジュールのインストール
sudo make install # カーネルのインストール
- 重要なポイント:
コンパイル前の注意:
- バックアップを取る
- 十分なディスク容量の確保
- 必要な開発ツールの準備
設定のポイント:
- 既存の設定をベースにする
- 必要な機能のみを選択
- 不要な機能は除外
安全対策:
- 既存のカーネルは残しておく
- ブートローダーの設定を確認
- 緊急時の対応方法を知っておく
- よくある問題と対処:
- コンパイルエラー → 依存パッケージの確認
- 起動しない → 古いカーネルで起動
- パフォーマンス問題 → 設定の見直し
- 実務での注意点:
- 本番環境では十分なテスト必要
- ディストリビューション提供のカーネルを推奨
- カスタマイズは必要最小限に
makeコマンドをもっと詳しく
makeコマンド
- プログラムのビルド(構築)を自動化するツール
- Makefileという設定ファイルに基づいて動作
- 複雑な作業を順序立てて実行
カーネル関連の主なmakeコマンド
make menuconfig
- 目的:カーネルの設定を対話的に行う
- GUI的な設定画面が表示される
- 各機能のON/OFF、モジュール化を選択
- 例えるなら:レストランのメニュー選択のような感じ
make
- 目的:カーネル本体をコンパイル
- ソースコードから実行可能なカーネルを作成
- 例えるなら:選んだ材料で料理を作る工程
make modules
- 目的:カーネルモジュールをコンパイル
- 選択したモジュールを個別にビルド
- 例えるなら:メインの料理とは別にサイドメニューを作る
make modules_install
- 目的:コンパイルしたモジュールをシステムにインストール
- 通常は /lib/modules/ 以下にインストール
- 例えるなら:作ったサイドメニューを提供できる場所に置く
make install
- 目的:新しいカーネルをシステムにインストール
- /boot ディレクトリにカーネルイメージを配置
- ブートローダーの設定も更新
- 例えるなら:メインの料理を提供できる状態にする
make clean
- 目的:ビルドで生成されたファイルを削除
- コンパイル済みのファイルをクリーンアップ
- 例えるなら:キッチンの掃除をする
よく使用されるオプション
make -j4 # 4つのプロセスで並列ビルド
make V=1 # 詳細な出力を表示
make O=dir # 出力先ディレクトリを指定
実行順序の例
make clean # クリーンアップ
make menuconfig # 設定
make -j4 # カーネルのビルド
make modules # モジュールのビルド
sudo make modules_install # モジュールのインストール
sudo make install # カーネルのインストール
注意点
- root権限(sudo)が必要な操作がある
- コンパイルには時間がかかる
- エラーメッセージの確認が重要
- バックアップを取っておくことが推奨