「カーネルモジュールのコンパイル」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎ビルド環境: 英語版に同期)
(→‎ソースの設定: 英語版に同期)
29行目: 29行目:
 
== ソースの設定 ==
 
== ソースの設定 ==
   
ソースコードを手に入れたら、ディレクトリに移動して次のコマンドを実行してください (.config.old削除 .config .config.old変更しま):
+
ソースコードを手に入れたら、ディレクトリに移動してさい。ソースコードの入手に [[#Arch Build System]]使用た場合は、ディレクトリは PKGBUILD が存在する場所から見て {{ic|src/archlinux-linux/}}なっているはずで
  +
  +
{{ic|make help}} の出力が有益です。次のコマンドを実行してクリーンしてください。
   
 
$ make mrproper
 
$ make mrproper
   
  +
{{Note|これによって .config.old が削除されるため、これが必要な場合にはクリーンの実行前にどこか別の場所へ移動してください。}}
それから既存のカーネル設定をビルドディレクトリにコピーしてください:
 
   
  +
適切な {{ic|.config}} ファイルが必要です。設定ファイルがなく、対象のカーネルバージョンが動作中のカーネルと同じであれば、その設定ファイルが利用できます。次で得られます:
$ cp /usr/lib/modules/`uname -r`/build/.config ./
 
$ cp /usr/lib/modules/`uname -r`/build/Module.symvers ./
 
   
  +
$ zcat /proc/config.gz > .config
次にカーネルソースにあわせて設定を調整します (現在使っているバージョンのカーネルソースを使う場合は何も訊かれませんが、新しいバージョンのソースを使用する場合、新しいオプションについて設定が問われます)。
 
   
  +
次にカーネルソースにあわせて設定を調整します。現在使っているバージョンのカーネルソースを使う場合は何も訊かれませんが、新しいバージョンのソースを使用する場合、新しいオプションについて設定が問われます。いずれにせよ [[#Arch Build System]] を使っている場合は、 {{ic|PKGBUILD::prepare()}} 関数が使えます。
また、コンパイルしたいモジュールにデバッグビルドなどのコンパイルオプションが存在する場合、make config/menuconfig/xconfig を利用して設定を変更することができます (README を見てください):
 
   
  +
コンパイルするモジュールにデバッグビルドなどのコンパイルオプションを与えたいが、まだコンパイルされていない場合、次の様にしてカーネルの設定を修正できます (ときには修正しなくてはならないです):
 
$ make oldconfig
 
$ make oldconfig
   

2020年8月15日 (土) 15:11時点における版

関連記事

カーネル全体を再コンパイルするのではなく Linux のカーネルモジュールだけをコンパイルしたいという場合のガイドです。

ノート: 既存のモジュールを置き換えるときは、モジュール (M) としてコンパイルされていて、カーネルに組み込まれてない (y) ことが前提です。

ビルド環境

まずコンパイラ (base-devel) やカーネルヘッダ (linux-headers) などのビルドに必要なパッケージをインストールする必要があります。

そして今使っているバージョンのカーネルのソースコードを取得してください。新しいバージョンのカーネルソースを使ってみることもできますが、大抵の場合、コンパイルしたモジュールはロードされません。

カーネルのバージョンを確認するには:

$ uname -r

ソースコードの入手方法には大きく2つの選択肢があります。それぞれの選択肢で僅かに使い方や、ディレクトリ構成が異なります。

慣習的な方法

カーネル/コンパイル/伝統的な方法#カーネルソースのダウンロードを見てください。Git を使って最新のカーネルを取得する場合、タグを使って必要なバージョンをチェックアウトしてください (例: v4.1)。

Arch Build System

Arch Build System に関しての概略は ABS を参照して下さい。ソースコードの入手方法やディレクトリ構成、その他の詳細は、カーネル/コンパイル/Arch Build System を参照して下さい。

ソースの設定

ソースコードを手に入れたら、ディレクトリに移動して下さい。ソースコードの入手に #Arch Build System を使用した場合は、ディレクトリは PKGBUILD が存在する場所から見て src/archlinux-linux/ になっているはずです。

make help の出力が有益です。次のコマンドを実行してクリーンしてください。

$ make mrproper
ノート: これによって .config.old が削除されるため、これが必要な場合にはクリーンの実行前にどこか別の場所へ移動してください。

適切な .config ファイルが必要です。設定ファイルがなく、対象のカーネルバージョンが動作中のカーネルと同じであれば、その設定ファイルが利用できます。次で得られます:

$ zcat /proc/config.gz > .config

次にカーネルソースにあわせて設定を調整します。現在使っているバージョンのカーネルソースを使う場合は何も訊かれませんが、新しいバージョンのソースを使用する場合、新しいオプションについて設定が問われます。いずれにせよ #Arch Build System を使っている場合は、 PKGBUILD::prepare() 関数が使えます。

コンパイルするモジュールにデバッグビルドなどのコンパイルオプションを与えたいが、まだコンパイルされていない場合、次の様にしてカーネルの設定を修正できます (ときには修正しなくてはならないです):

$ 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

参照