mkimageをセルフで作ってみる

セルフでmkimageできないのはイヤなので、バイナリを作ることにした。
まずは、そのままで作業するのは怖いので、chroot環境を展開する。
ん?これって手順を書いたっけ?
まぁ、いいか。
apt入ったし、普通にdebootstrapできますから。
telnet穴だけでも十分できるし。必要な人はそれぞれでやってね。
できたら、設定してアーカイブしておくと便利だよん。
今回もそのアーカイブを展開して、chrootする。
upgradeしたら、libc6とman-dbが上がった。
環境はSarge。まだEtchにはしていない。
ビルド環境を整える。

# apt-get install binutils cpp cpp-3.3 gcc gcc-3.3 make libc6-dev linux-kernel-headers


どうも、採用されているu-bootは、かなり古いもので、1.1.1をベースにしているようだ。
mkimageとcrc32のソースはまったく同じなので、GPLな配布のソースを使うことにしよう。

# cd home/
# wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.1.1.tar.bz2
# apt-get install bzip2 libbz2-1.0
# tar jxvf u-boot-1.1.1.tar.bz2


mkimageのビルドにはcrc32.oが必要なのだけど、toolsディレクトリのcrc32は../lib_genericのシンボリックリンクになっている。
それ以外は普通にできそうな感じ。
パスの参照ポイントに$TOPDIRを使っているようなので、これを指定しておく。

# cd u-boot-1.1.1/
# pwd
/home/u-boot-1.1.1
# export TOPDIR=/home/u-boot-1.1.1
# cd tools/
# ls
Makefile        bmp_logo.c  envcrc.c        img2srec.c         mkimage.c     updater
Makefile.win32  easylogo    gdb             inca-swap-bytes.c  mpc86x_clk.c
bddb            env         gen_eth_addr.c  logos              scripts
# make mkimage
gcc -g -Wall -pedantic -I../include -I.. -DTEXT_BASE= -DUSE_HOSTCC -O -c mkimage.c
gcc -g -Wall -pedantic -I../include -I.. -DTEXT_BASE= -DUSE_HOSTCC -O -c crc32.c
gcc -Wall -pedantic -I../include -I.. -DTEXT_BASE= -DUSE_HOSTCC -O  -o mkimage mkimage.o crc32.o
strip mkimage

できたみたい。


簡単にテスト。

# exit
exit
# cp ./home/u-boot-1.1.1/tools/mkimage /mnt/sataraid1/
# cd /mnt/sataraid1/
# ./mkimage -l /boot/initrd
Image Name:
Created:      Wed Dec 13 12:02:01 2006
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    2851351 Bytes = 2784.52 kB = 2.72 MB
Load Address: 0x00000000
Entry Point:  0x00000000

動作もするようだ。