Ubuntu > カーネル(モジュール)のコンパイル
更新日
2014-02-09
広告
以下、Ubuntu 12.04 (linux 3.2.0)の例です。
コンパイルに必要なパッケージをインストールします。
$ sudo apt-get install build-essential kernel-package使用中のカーネルのソースコードをダウンロードします。
$ sudo apt-get source linux-image-$(uname -r)linux-3.2.0というディレクトリにソースコードが展開されるはずです。 カーネル設定(コンフィグ)ファイルが無いので、現在の設定をコピーしておきます。
$ cd linux-3.2.0 $ cp /boot/config-3.2.0-58-generic .configコンフィグを変更したければ、make menuconfig します。
$ make menuconfig以下のエラーが出る場合があります。
*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again.そのときは、ncurses-dev をインストールしましょう。
$ sudo apt-get install ncurses-devソフトウェア割り込みの頻度(CONFIG_HZ)を変更したいなら、Processor type and features -> Timer frequency で変更しましょう。 また、ソースコードに手を加えるなら、ここで変更しておきます。
カーネルのコンパイル
次に、コンパイルする前に、クリーンして、、、$ make-kpkg cleanコンパイルの実行です。
$ fakeroot make-kpkg -j4 --initrd --append-to-version=-new kernel_image kernel_headersこれで、カーネルをコンパイルできます。 30分から1時間くらいかかります。 親ディレクトリに、linux-headers-3.2.xx-new_3.2.xx-new-10.00.Custom_amd64.deb と linux-image-3.2.xx-new_3.2.xx-new-10.00.Custom_amd64.deb というファイルが作成されるので、インストールします。
$ sudo dpkg -i linux-image-3.2.53-new_3.2.53-new-10.00.Custom_amd64.deb $ sudo dpkg -i linux-headers-3.2.53-new_3.2.53-new-10.00.Custom_amd64.debこれで、再起動すればOKです。
モジュールのコンパイル
モジュールだけコンパイルする場合は、make menuconfigで設定ファイルを用意したら、以下のように、コンパイルの準備を行います。$ make prepare $ make scriptsそして、コンパイルしたいモジュールのディレクトリに移動します。 例えばBroadcomのイーサネットカードのドライバをコンパイルするなら、以下に移動します。
$ cd drivers/net/ethernet/broadcom/システムヘッダを参照して、コンパイルします。
$ make -C /lib/modules/$(uname -r)/build M=$(pwd)モジュールオブジェクト(.ko ファイル)が作成されるはずです。 現在使用しているモジュールオブジェクトは /lib/modules/ 以下にあるので(この例だと /lib/modules/3.2.0-58-generic/kernel/drivers/net/ethernet/broadcom にある)、生成したオブジェクトで上書きします。 上書きする前に、バックアップしておいたほうがよいでしょう。 あとは rmmod して、insmod すればよいはずです。
$ sudo rmmod bnx2.ko $ sudo insmod bnx2.ko
Invalid module format
カーネルのソースコードのバージョンや、コンパイル時に参照するシステムヘッダのバージョンが、使用中のカーネルのバージョンと違っていると、insmod したときに以下のようなエラーになります。$ sudo insmod bnx2.ko insmod: error inserting 'bnx2.ko': -1 Invalid module formatmodinfoコマンドで、モジュールファイルのバージョンを見れます。重要なのは vermagic です。
$ modinfo bnx2.ko | grep vermagic vermagic: 3.2.53 SMP mod_unload modversionsこの3.2.53が、バージョンです。 現在使用中のモジュールのバージョンと、insmodしようとしているモジュールのバージョンが違っていると、エラーになります。
広告
お問い合わせは sweng.tips@gmail.com まで。