結局、menuconfig を色々いじらないといけないらしい。
親切な人々のページを参考にして menuconfig をやり直す。
vgacon.o でコンパイルエラーになるのですが、、、の対策
↑ こんなエラー ↓
drivers/video/console/vgacon.c: In function `vgacon_startup': drivers/video/console/vgacon.c:...: error: `PCIMEM_BASE' undeclared (first use in this function) drivers/video/console/vgacon.c:...: error: (Each undeclared identifier is reported only ... make[4]: *** [drivers/video/console/vgacon.o] エラー 1 make[3]: *** [drivers/video/console] エラー 2 make[2]: *** [drivers/video] エラー 2 make[1]: *** [drivers] エラー 2
あと、シリアルドライバの選択と、ext2 ファイルシステムの選択も必要であった。
さらに、浮動小数のエミュレータも忘れずに。これがないと、ユーザプログラム中で double を使った瞬間に
Illegal instraction
となってプログラムが動かなくなる。最初原因が全く分からなかった。
まとめると、こんな感じ。
$ make ARCH=arm CROSS_COMPILE=arm-linux- distclean $ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig ... System-type ---> ARM system type ---> (X) EP93xx-based ← CPUをちゃんと選ばないとカーネルのロード直後に落ちる Cirrus EP93xx Implementation Options ---> [*] Support Cirrus Logic EDB9302 [*] Support ARM920T processor [*] Support Thumb user binaries Floating point emulation ---> [*] NWFPE math emulation ← Illegal instruction 対策 Device Drivers ---> Character devices ---> Serial drivers ---> <*> ARM AMBA PL010 serial port support ←開発PCとの通信用 /dev/ttyAM のドライバ [*] Support for console on AMBA serial port < > EP93xx serial port support ← 注意 こっち選ぶとコンパイルエラーになる Graphics support ---> Console display driver support ---> [ ]VGA text console ← 選択なしに変える (vgacon.oのコンパイルエラー対策) File systems ---> <*> Second extended fs support ← モジュールドライバからビルトインドライバに変える (ramdisk のフォーマットが ext2 なので) [*] Ext2 extended attributes [*] Ext2 POSIX Access Control Lists [*] Ext2 Security Labels ...
という感じで、もう一度 menuconfig をやりなおした。で、コンパイル。
$ make ARCH=arm CROSS_COMPILE=arm-linux- zImage ... Kernel: arch/arm/boot/zImage is ready
いぇ~。今度は成功。前回と同じ手順で、zImage をボードに転送して、FLASHに書き込む。
... 前回と同じなので省略
リセット。
RedBoot> reset ... RedBoot> exec -r 0x800000 -x 0x800000 -c "console=ttyAM root=/dev/ram" Using base address 0x00080000 and length 0x0013f000 Uncopressing Linux..... done. booting the kernel. [ 0.000000] Linux version 2.6.20.4 ... ... [ 3.680000] Freeint init memory: 88K init started: BusyBox v1.1.3 (2006.08.22-13:03+0000) multi-call binary Please press Enter to activate this console. ← リターンを押す BusyBox v1.1.3 (2006.08.22-13:03+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. ~ # ls bin etc lib ... ~ # hello hello ~ #
はぁ。やっと動いた。