カーネルのコンパイル(3)


昨日の続き。

コンパイルエラーの解析

../utils/setsum/setsum ../../../../firminfo.txt ../images/vmlinux.gz -o ../images/kernimg.bin
../utils/setsum/setsum: ../utils/setsum/setsum: cannot execute binary file
となって、この setsum は、x86 のバイナリであるところまでは調べた。

arch/ppc/boot/utils/setsum/ あたりを調べたが、 setsum のソースは無いようだ。
クロスコンパイル環境を作らないとだめかな。

firmimg.bin

arch/ppc/boot/sandpoint を散歩していて、Makefile に見つけたぞー。
zImage.initrd: zvmlinux.initrd bootcode
	$(SETSUM) ../../../../firminfo.txt ../images/vmlinux.gz -r ../images/ramdisk.image.gz -o ../images/firmimg.bin
	mv zvmlinux.initrd ../images/$@.sandpoint
	mv bootcode.bin ../images/bootcode.bin
	rm ../images/vmlinux.gz
	rm ./bootcode
firmimg.bin を作っている。これだぁ!
ただ、setsum に渡している ../../../../firminfo.txt と ../images/vmlinux.gz とは存在するが、 ../images/ramdisk.image.gz が存在しない。
これは、名前のとおり ramdisk image であろう。
-EM で起動して、抜いてきたらいいのかな? アップデータの firmimg.bin から抜けるかな?

ちなみに、firminfo.txt は、

NAME="KURO-BOX(IETSUNA)"
ID  ="0x00001001"
Ver ="1.00"
SubVersion =" "
BootVer ="1.00"
で、/dev/fl1 を od -xc すると、
0000000 0000 0001 0000 1001 4b55 524f 2d42 4f58
         \0  \0  \0 001  \0  \0 020 001   K   U   R   O   -   B   O   X
0000020 2849 4554 5355 4e41 2900 0000 0000 0000
          (   I   E   T   S   U   N   A   )  \0  \0  \0  \0  \0  \0  \0
0000040 0000 0000 0000 0000 464c 4153 4820 312e
         \0  \0  \0  \0  \0  \0  \0  \0   F   L   A   S   H       1   .
0000060 3100 0000 0000 0000 0000 0000 0000 0000
          1  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000100 0000 0000 0000 0000 0001 0000 0000 6802
         \0  \0  \0  \0  \0  \0  \0  \0  \0 001  \0  \0  \0  \0   h 002
0000120 0910 1e2a 002d a21b 320d 8c9f 0000 006c
なので、
先頭 4 バイトが Ver か BootVar
続く 4 バイトが ID
8バイト目からが NAME
か。

strings -2 setsum すると、 ID, NAME, VER, SUBVERSION は見えるが、BootVar は見えないので、 先頭 4 バイトは、Var か?(大文字小文字は無視してる?)

LinkStation のカーネルソースが手に入れば、比較してみると判るだろう。


 玄人志向 玄箱をハックしよう  → ramdisk image を探す
Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市