「カーネルモジュールのコンパイル」の版間の差分
(ページの作成:「Category:カーネル en:Compile kernel module {{Related articles start}} {{Related|カーネル}} {{Related|カーネルモジュール}} {{Related articles end}...」) |
(→ビルド環境: 同期) |
||
19行目: | 19行目: | ||
$ uname -r |
$ uname -r |
||
− | 確認したらカーネルのソースコードを入手します。[[カーネル/コンパイル/伝統的な方法#ソースの |
+ | 確認したらカーネルのソースコードを入手します。[[カーネル/コンパイル/伝統的な方法#カーネルソースのダウンロード]]を見てください。[[Git]] を使って最新のカーネルを取得する場合、タグを使って必要なバージョンをチェックアウトしてください (例: v4.1)。 |
== ソースの設定 == |
== ソースの設定 == |
2017年4月23日 (日) 21:21時点における版
カーネル全体を再コンパイルするのではなく Linux のカーネルモジュールだけをコンパイルしたいという場合のガイドです。
ビルド環境
まずコンパイラ (base-devel) やカーネルヘッダ (linux-headers) などのビルドに必要なパッケージをインストールする必要があります。
そして今使っているバージョンのカーネルのソースコードを取得してください。新しいバージョンのカーネルソースを使ってみることもできますが、大抵の場合、コンパイルしたモジュールはロードされません。
カーネルのバージョンを確認するには:
$ uname -r
確認したらカーネルのソースコードを入手します。カーネル/コンパイル/伝統的な方法#カーネルソースのダウンロードを見てください。Git を使って最新のカーネルを取得する場合、タグを使って必要なバージョンをチェックアウトしてください (例: v4.1)。
ソースの設定
ソースコードを手に入れたら、ディレクトリに移動して次のコマンドを実行してください (.config.old を削除して .config を .config.old に変更します):
$ make mrproper
それから既存のカーネル設定をビルドディレクトリにコピーしてください:
$ cp /usr/lib/modules/`uname -r`/build/.config ./ $ cp /usr/lib/modules/`uname -r`/build/Module.symvers ./
次にカーネルソースにあわせて設定を調整します (現在使っているバージョンのカーネルソースを使う場合は何も訊かれませんが、新しいバージョンのソースを使用する場合、新しいオプションについて設定が問われます)。
また、コンパイルしたいモジュールにデバッグビルドなどのコンパイルオプションが存在する場合、make config/menuconfig/xconfig を利用して設定を変更することができます (README を見てください):
$ make oldconfig
モジュールのコンパイル
次のコマンドでソースのコンパイルを準備:
$ make prepare && make scripts
そしてモジュールのディレクトリを指定してモジュールをコンパイル (モジュールがある場所は modinfo や find で検索できます):
$ make M=fs/btrfs
モジュールのインストール
コンパイルが完了したら gzip で圧縮して、使用しているカーネルのところにコピーする必要があります。
既存のモジュールを置き換える場合、ファイルを上書きしてください (linux を再インストールするとデフォルトのモジュールに置き換わるので注意):
$ gzip fs/btrfs/btrfs.ko # cp -f fs/btrfs/btrfs.ko.gz /usr/lib/modules/`uname -r`/kernel/fs/btrfs/
もしくは、updates フォルダにモジュールを配置することもできます (フォルダが存在しない場合は作成してください):
$ cp fs/btrfs/btrfs.ko.gz /usr/lib/modules/`uname -r`/updates
新しいモジュールを追加する場合は extramodules にコピーします (以下はあくまで例です。btrfs はこのフォルダからはロードされません):
# cp fs/btrfs/btrfs.ko.gz /usr/lib/modules/`uname -r`/extramodules/
モジュールをコンパイルして (ブートの初期段階でロードされるように) initramfs にコピーする場合は initramfs を再生成するようにしてください (そうしないとコンパイルしたモジュールがロードされません)。さらに、"updates" フォルダを使用するときは、initramfs を再生成する前に "depmod" でモジュールの依存ツリーを再ビルドする必要があります。
# mkinitcpio -p linux