Olimex CS-E9302日記 kernelのリコンパイル

カーネルのリコンパイルにチャレンジ

まず、uclibc 用に変更した gcc を元の gcc に戻した。

$ su
# mv /usr/local/arm /usr/local/arm-uclib
# cd /
# tar jxf /mnt/cd-rom/arm-linux-gcc-3.4.1.tar.bz2

ソースは、CDに入っていたLinux 2.6.20.4 を使う

$ mkdir kernel
$ cp /mnt/cd-rom/linux\ sources/linux-2.6.20.4.tar.gz kernel/.
$ cp /mnt/cd-rom/linux\ sources/linux-2.6.20.4-2db93xx.patch kernel/.
$ cd kernel
$ tar zxf linux-2.6.20.4.tar.gz
$ cd linux-2.6.20.4
$ cat ../linux-2.6.20.4-2db93xx.patch | patch -p1

コンパイルしてみる。(参考)「組み込みLinuxシステム構築」(オライリー)

$ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
... → 変更なし
$ make  ARCH=arm CROSS_COMPILE=arm-linux- zImage
...

一時間くらいでコンパイル終了。意外と速い。RedBoot でボードのRAMにアップロード

$ kermit
Kermit> c
...  ← 電源ON & Ctrl+C
RedBoot> load -r -b 0x00080000 -m xmodem  ← ボードを受信待ちにする
CC...

別の端末から

$ sx ./kernel/linux-2.6.20.4/arch/arm/boot/zImage < /dev/ttyS0 > /dev/ttyS0  ← PCからファイル送信する
...

転送は10分くらいで終わる。次にRAMからFLASHに書き込む。再びRedBootの画面から

RedBoot> fis write -f 0x60D40000(*注) -b 0x00080000 -l 0x140000 
...

(*注) -f のアドレスは事前に RedBoot>fis list で確認した zImage のアドレス。間違えると面倒なので注意。

書き込み終了したので、リセット

RedBoot> reset
...
RedBoot> exec -r 0x800000 -x 0x800000 -c "console=ttyAM root=/dev/ram"
Using base address 0x00080000 and length 0x0013f000
← 停まった

orz. 動かなかった。