U-Boot


ブートローダとして U-Boot が使われているので、 http://sourceforge.net/projects/u-boot から U-Boot 1.1.4 をいただいてきて、いろいろ見てみた。

発見!

mkimage

tools/mkimage が initrd.boot を作るツールのようだ。

initrd.boot のヘッダ部は、include/image.h の

typedef struct image_header {
        uint32_t        ih_magic;       /* Image Header Magic Number    */
        uint32_t        ih_hcrc;        /* Image Header CRC Checksum    */
        uint32_t        ih_time;        /* Image Creation Timestamp     */
        uint32_t        ih_size;        /* Image Data Size              */
        uint32_t        ih_load;        /* Data  Load  Address          */
        uint32_t        ih_ep;          /* Entry Point Address          */
        uint32_t        ih_dcrc;        /* Image Data CRC Checksum      */
        uint8_t         ih_os;          /* Operating System             */
        uint8_t         ih_arch;        /* CPU architecture             */
        uint8_t         ih_type;        /* Image Type                   */
        uint8_t         ih_comp;        /* Compression Type             */
        uint8_t         ih_name[IH_NMLEN];      /* Image Name           */
} image_header_t;
これのよう。

mkimage のコンパイル

いきなり make してみた
-bash-2.05b$ cd tools/
-bash-2.05b$ ls
Makefile        bddb        easylogo  envcrc.c  gen_eth_addr.c  img2srec.c         logos      mpc86x_clk.c  scripts
Makefile.win32  bmp_logo.c  env       gdb       img2brec.sh     inca-swap-bytes.c  mkimage.c  ncb.c         updater
-bash-2.05b$ make mkimage
Makefile:107: /config.mk: そのようなファイルやディレクトリはありません
ln -s ../common/environment.c environment.c
ln -s ../lib_generic/crc32.c crc32.c
M -Wall -pedantic -idirafter ../include -DTEXT_BASE= -DUSE_HOSTCC environment.c img2srec.c mkimage.c crc32.c envcrc.c gen_e
th_addr.c bmp_logo.c > .depend
/bin/sh: line 1: M: command not found
make: [.depend] エラー 127 (無視されました)
make: *** ターゲット `/config.mk' を make するルールがありません。中止。
-bash-2.05b$
そらあかんわな。

Makefile の 107 行目は、

-bash-2.05b$ head -107 Makefile | tail -1
include $(TOPDIR)/config.mk
-bash-2.05b$
と TOPDIR が使われていて、それが未定義のよう。
とりあえず TOPDIR だけ定義してみる
-bash-2.05b$ cd ..
-bash-2.05b$ TOPDIR=`pwd`
-bash-2.05b$ export TOPDIR
-bash-2.05b$ cd tools/
-bash-2.05b$ !make
make mkimage
gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE= -DUSE_HOSTCC -O -c mkimage.c
gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE= -DUSE_HOSTCC -O -c crc32.c
gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE= -DUSE_HOSTCC -O  -o mkimage mkimage.o crc32.o
strip mkimage
-bash-2.05b$
いけたみたい

image header information

mkimage -l [file]とすると、 mkimage lists the information contained in the header of an existing U-Boot image とのことなので、やってみる。
-bash-2.05b$ ./mkimage -l /usr/local/BootServer/tftpboot_1.00/firm/initrd.boot
Image Name:   RAM Disk
Created:      Mon Oct 17 20:12:04 2005
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    7255111 Bytes = 7085.07 kB = 6.92 MB
Load Address: 0x00000000
Entry Point:  0x00000000
-bash-2.05b$ ./mkimage -l /usr/local/BootServer/tftpboot/firm/initrd.boot
Image Name:   RAM Disk
Created:      Sat Dec 17 16:43:56 2005
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    7248200 Bytes = 7078.32 kB = 6.91 MB
Load Address: 0x00000000
Entry Point:  0x00000000
-bash-2.05b$
ということで、mkimage で間違いない。

RAMDisk Image を作って mkimage すれば PC-P1LAN の initrd をいじくれそう。




initrd.boot のヘッダ部
ハックの記録
PC-P1LAN をハックしよう

最初の一歩

Copyright (C) 2006 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市