自前kernelで起動してみる

昨日作ったkernelパッケージで起動してみる。
まずは、パッケージをインストール。

# mv /lib/modules/2.6.12.6-arm1 /lib/modules/2.6.12.6-arm1.old
# dpkg -i kernel-image-2.6.12.6-arm1_OLP.0.1_arm.deb
Would you like to create a boot floppy now? [No]
Do you wish to set up Linux to boot from the hard disk? [Yes] No

最後のはブートローダーの調整なので、この環境では無視。


デフォルトの環境とモジュールに違いがあるかどうか確認。
使った.configが正しくないのはよくあること。
diffってみると、以下のファイルがなかった。

-./kernel/crypto/ocf
-./kernel/crypto/ocf/cryptodev.ko
-./kernel/crypto/ocf/cryptosoft.ko
-./kernel/crypto/ocf/ocf-bench.ko
-./kernel/fs/quota_v1.ko
-./kernel/fs/quota_v2.ko

どうやら、使った.configでは、crypto/ocfとfs/quota_v1,2が有効でなかったようだ。
違いはこの2つなので、いまのところあまり気にならない。
このへんは、GTR用の機能のようなので、なくても問題ないだろう。
とりあえず、これでよいので、前のドライバは削除してしまう。

# rm -r /lib/modules/2.6.12.6-arm1.old


次にu-bootから起動可能なkernel imageを作ってみる。
オリジナルのuImageをバックアップしておく。

# mv /boot/uImage /boot/uImage.GT
-rw-r--r--   1 root root 1700248 Apr 11 16:16 uImage.GT
-rw-r--r--   1 root root 1775612 Apr 17 17:06 vmlinuz-2.6.12.6-arm1

なんか作った方は微妙にサイズが大きい。入っているドライバ類は少ないのにな...
uImageを作ってみる。
まず、オリジナルのuImageの設定を確認する。

# mkimage -l uImage.GT
Image Name:   Linux-2.6.12.6-arm1
Created:      Wed Nov 22 14:20:14 2006
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1700184 Bytes = 1660.34 kB = 1.62 MB
Load Address: 0x00008000
Entry Point:  0x00008000

ロードアドレスとエントリポイントは追加する必要がある。

# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "OPEN LANDISK PLATFORM Linux 0.1" -d vmlinuz-2.6.12.6-arm1 uImage
Image Name:   OPEN LANDISK PLATFORM Linux 0.1
Created:      Wed Apr 18 16:08:17 2007
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1775612 Bytes = 1734.00 kB = 1.69 MB
Load Address: 0x00008000
Entry Point:  0x00008000

オプションの -C はnoneでいいようだ。-n は32文字まで。
幸運を祈って再起動する。


無事上がってきた。
オリジナルのuImageは削除してしまう。
これでバイナリはオリジナルがない完全にネイティブ環境になった... あ、initrdの中のバイナリは残っているな。こいつも掃除しておかないとね。
しかし、ハード固有のツール類がバイナリしかないのがこの先の障害になるな。