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
動作もするようだ。