alix上でのコンパイルは負荷が高いのでUbuntu 8.04 LTS上のVMWare Workstationにlennyを準備してカーネルのコンパイルができるようにしました。
Debian lennyでのカーネルコンパイル
Debianではカーネルの構築用にいくつかのツールが提供されていますが、今回はmake-kpkgコマンドを使っています。
基本的な手順
make-kpkgを使う時に使う典型的な手順は次の通りです。
2010/03/01追記:
カーネルをビルドする前に、いくつかのパッケージの導入が必要です。
余計なものが入るかもしれませんが、次のようなコマンドラインは便利かもしれません。
$ sudo apt-get install kernel-package bzip2 build-essential
$ sudo tar xvjf linux-2.6.31.1.tar.bz2 $ cd linux-2.6.31.1 $ cp -i /boot/config-2.6.26-2-686 .config $ yes "" | sudo make oldconfig $ sudo make-kpkg clean $ sudo INSTALL_MOD_STRIP=1 CONCURRENCY_LEVEL=3 make-kpkg --initrd --append-to-version=-686-mybuild kernel_image kernel_headers
もし既存の.configファイルが存在してcpコマンドが質問をしてきた場合にはC-cやnを入力します。 また既にlinux-2.6.30.10などをコンパイルしている場合には、そこで使った.configファイルを持ってきます。 ただし副作用がわからないので2.6.32など、より新しいバージョンの.configファイルは使わないようにしています。
-686-mybuildの部分は、適当に自分に都合に合わせて変更します。
大抵はエラーがでると思いますが、下記のように対応して直近のmake-kpkg ... kernel_imageコマンドを再び実行します。
カーネルバージョン毎に必要な対応手順
lennyでコンパイルするという条件の元では、より新しいカーネルを構築する際にエラーになる場合があります。 その対応方法をまとめました。
2.6.31以降で遭遇するエラー
lguest.c:21:25: error: sys/eventfd.h: No such file or directory
lguest.c: In function ‘create_thread’:
lguest.c:1027: warning: implicit declaration of function ‘eventfd’
2.6.31カーネルをlenny上でコンパイルするためのTipsに従ってMakefileを修正し、無事にカーネルがビルドできました。
$ sudo vi Documentation/lguest/Makefile
_FORTIFY_SOURCE
all:
2.6.33以降で遭遇するエラー
lguestの他の原因で、make-kpkgコマンドが途中で止ってしまいます。
The UTS Release version in include/linux/version.h
""
does not match current version:
"2.6.33-rc5-686-yabuild"
Please correct this.
対応方法はUbuntuのKernel Master Threadのコメントの中にあります。
$ sudo cp -i include/generated/utsrelease.h include/generated/compile.h include/linux/
debパッケージのインストール
この後で再びmake-kpkgコマンドを走らせると、続きから始まりパッケージが終了します。 一つ上の../ディレクトリにdebパッケージが作成されるので、これをalixにコピーするなどして実行します。
$ sudo dpkg -i linux-image-2.6.32.4-686-yabuild_2.6.32.4-686-yabuild-10.00.Custom_i386.deb
2 件のコメント:
通りすがりのものです。たいへん参考になる情報をいただきありがとうございます。
2.6.33でmake-kpkgコマンドが途中で止ってしまう件ですが、utsrelease.h が generated ディレクトリ下に移ってしまったのが原因のようで、対処方法が
http://www.ubuntu-se.org/phpBB3/viewtopic.php?f=54&t=46475&start=0
や
http://ubuntuforums.org/showthread.php?p=8625722
にあることを見つけましたのでお知らせしたいと思いました
情報ありがとうございます。
ファイルをコピーする以外にも対応方法がいろいろあるんですね。
コメントを投稿