参考にしたのは以下のページ

# apt-get install kernel-package
# apt-get install libc6-dev
# apt-get install libncurses5-dev
# apt-get install module-init-tools

libc6-devを入れると自動的にlinux-kernel-headersもインストールされた。以下からソースを落としてくる。

root以外のユーザでログインしてソースをwgetで取得

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.gz
$ tar zxvf linux-2.6.23.1.tar.gz
$ cd linux-2.6.23.1
$ make oldconfig

いろいろと聞いてくる。とりあえず全部エンター

$ make menuconfig

iptables関連を有効にしておく

$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.0.1 kernel_image

ここでエラー。どうやらfakerootがない。rootに戻ってインストール。

# apt-get install fakeroot

もう一度一般ユーザに戻ってmake-kpkg

$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.0.1 kernel_image

かなりの時間がかかる。無事カーネルパッケージの作成完了

$ cd ..
$ ls
linux-image-2.6.23.1_custom.0.1_arm.deb

このlinux-image-2.6.23.1_custom.0.1_arm.debをインストールする。以下はrootアカウントで実行

# dpkg -i linux-image-2.6.18-subarchitecture_custom.1.0_i386.deb

途中で以下のように怒られる

dpkg: dependency problems prevent configuration of linux-image-2.6.23.1:
linux-image-2.6.23.1 depends on initramfs-tools (>= 0.53) | yaird (>= 0.0.11) | linux-initramfs-tool; however:
Package initramfs-tools is not installed.
Package yaird is not installed.
Package linux-initramfs-tool is not installed.
dpkg: error processing linux-image-2.6.23.1 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
linux-image-2.6.23.1

initramfs-toolsをインストールしようとしたが、apt-get -f installしろと怒られる

# apt-get -f install

とりあえず以下のように表示される。

Setting up linux-image-2.6.23.1 (custom.0.1) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.

# dpkg -i linux-image-2.6.23.1_custom.0.1_arm.deb

とりあえずうまくいったように見える。コンソールキットをつないでU-Bootからの起動を試みるがうまくゆかず。
仕方なしに、uImage.buffaloにもどして、dpkgを用いない方法で試すことにする。
以下のURLを参照

$ make clean
$ make uImage

時間がかかるのでちょっと休憩

"mkimage" command not found - U-Boot images will not be built

このエラー画面を見て納得。uImageはU-Bootで用いるイメージのことだったらしい。
道理でうまくゆかないわけだ。ちなみにmkimageをfindで調べたところ、
/usr/local/sbinにあるらしい。

PATH=/usr/local/sbin:$PATH; export PATH

として再び

$ make uImage

今度はうまく作成されたっぽい。

Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-2.6.23.1
Created: Sun Nov 11 18:42:57 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 961100 Bytes = 938.57 kB = 0.92 MB
Load Address: 0x00008000
Entry Point: 0x00008000
Image arch/arm/boot/uImage is ready

つづいてモジュールのコンパイル

$ make modules

モジュールのコンパイル中に気づく、もしかしてdpkgを使って作成したカーネルイメージからmkimageを用いてuImageを作成できるのでは?
そこで調査すると以下のページを見つける

さっそくCtrl-Cでコンパイルを途中で止めrootになり試す

# cd /boot
# mkimage -l uImage.buffalo
Image Name: Linux-2.6.12.6-arm1
Created: Thu Feb 8 15:00:09 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736372 Bytes = 1695.68 kB = 1.66 MB
Load Address: 0x00008000
Entry Point: 0x00008000
# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Linux-2.6.23.1-arm1 Ver0.1" -d vmlinuz-2.6.23.1 uImage.kurobox
Image Name: Linux-2.6.23.1-arm1 Ver0.1
Created: Sun Nov 11 19:10:19 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 961104 Bytes = 938.58 kB = 0.92 MB

リブートしてU-Bootでストップ

Marvell>>setenv kernel 'uImage.kurobox'
Marvell>>boot

こんどはカーネルの読み込みまではうまくいったが上がってこない。
何かを根本的に間違っているのだろうか?
仕方ないので電源を強制的に切ってパラメータを元に戻す。

Marvell>>setenv kernel 'uImage.buffalo'
Marvell>>boot

どうやらカーネルのコンフィグから見直さないといけないようだ。時間がかかりそうなので今日の玄箱はここいらでやめておこう。