カスタムファームウェアの作成

カーネルの再構築で作成した、カーネルイメージとモジュールを組み込んで カスタムしたファームウェアイメージをビルドします。

適当なrootfsイメージ作成用のアーカイブを準備し、root権限で展開します。

ma-devel ~ # ls
MAE210_mtdroot_100.tar.bz2
ma-devel ~ # tar jxvf MAE210_mtdroot_100.tar.bz2 
MAE210_mtdroot/
MAE210_mtdroot/rootfs.sh
MAE210_mtdroot/kernel.img
  〜〜〜 中略 〜〜〜
MAE210_mtdroot/embedded_glibc/opt/mae2xx/app/htdocs/img/indicator.gif
MAE210_mtdroot/embedded_glibc/opt/mae2xx/app/htdocs/csshover2.htc
MAE210_mtdroot/embedded_glibc/opt/sbin/
MAE210_mtdroot/embedded_glibc/opt/system/
ma-devel ~ # 

カーネルモジュールを入れ替えます。

ma-devel ~ # cd MAE210_mtdroot/embedded_glibc/lib/modules/
ma-devel modules # ls
2.6.28.10-Magnolia2
ma-devel modules # rm -rf 2.6.28.10-Magnolia2/
ma-devel modules # cp -af /tmp/lib/modules/2.6.28.10-Magnolia2 .

所有者がビルドしたユーザ(user1:users)になっているので修正します。

ma-devel modules # ls -l
total 4
drwxr-xr-x 3 user1 users 4096 Sep  3 13:49 2.6.28.10-Magnolia2
ma-devel modules # chown -R root:root 2.6.28.10-Magnolia2/
ma-devel modules # ls -l
total 4
drwxr-xr-x 3 root root 4096 Sep  3 13:49 2.6.28.10-Magnolia2

ファームウェアのrootファイルシステムのイメージを作成します。

ma-devel modules # cd ../../../
ma-devel MAE210_mtdroot # ls -l
total 3592
drwxr-xr-x 18 root root    4096 Jun 17  2010 embedded_glibc
-rw-r--r--  1 root root 3670016 Jul 31 14:29 kernel.img
-rwxr-xr--  1 root root     871 Jul 31 14:22 rootfs.sh
ma-devel MAE210_mtdroot # ./rootfs.sh 
backup embedded_glibc
cd embedded_glibc.dist
cd usr/lib/python2.6
Listing . ...
Compiling ./BaseHTTPServer.py ...
Compiling ./Bastion.py ...
  〜〜〜 中略 〜〜〜
Parallel mksquashfs: Using 4 processors
Creating little endian 3.1 filesystem on opt/system/usr.sqfs, block size 131072.
lzmadic 131072
[===========================================================================================/] 2940/2940 100%
Exportable Little endian filesystem, data block size 131072, compressed data, compressed metadata, compressed fragments, duplicates are removed
lzmadic 131072
Filesystem size 15488.09 Kbytes (15.13 Mbytes)
	33.61% of uncompressed filesystem size (46077.12 Kbytes)
Inode table size 27033 bytes (26.40 Kbytes)
	25.65% of uncompressed inode table size (105383 bytes)
Directory table size 30070 bytes (29.37 Kbytes)
	51.22% of uncompressed directory table size (58709 bytes)
Number of duplicate files found 12
Number of inodes 3278
Number of files 2823
Number of fragments 249
Number of symbolic links  274
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 181
Number of uids 3
	root (0)
	nobody (65534)
	unknown (1001)
Number of gids 6
	unknown (407)
	tty (5)
	root (0)
	users (100)
	wheel (10)
	unknown (1000)
ma-devel MAE210_mtdroot # ls -l
total 32272
drwxr-xr-x 18 root root     4096 Jun 17  2010 embedded_glibc
drwxr-xr-x 19 root root     4096 Sep  3 14:20 embedded_glibc.dist
-rw-r--r--  1 root root  3670016 Jul 31 14:29 kernel.img
-rw-r--r--  1 root root 29360128 Sep  3 14:20 rootfs.jffs2
-rwxr-xr--  1 root root      871 Jul 31 14:22 rootfs.sh
drwxr-xr-x  6 root root     4096 Sep  3 14:20 usr_backup

rootfs.jffs2 ができました。

カーネルの再構築で作成したカーネルイメージ(uImage)を、ターゲットのフラッシュメモリ領域サイズにあわせてパディングを行います。

ma-devel MAE210_mtdroot # cp /home/user1/src/linux-2-6-28-x_mae2xx/arch/arm/boot/uImage .
ma-devel MAE210_mtdroot # ls -l
total 35344
drwxr-xr-x 18 root root     4096 Jun 17  2010 embedded_glibc
drwxr-xr-x 19 root root     4096 Sep  3 14:20 embedded_glibc.dist
-rw-r--r--  1 root root  3670016 Jul 31 14:29 kernel.img
-rw-r--r--  1 root root 29360128 Sep  3 14:20 rootfs.jffs2
-rwxr-xr--  1 root root      871 Jul 31 14:22 rootfs.sh
-rw-r--r--  1 root root  3143408 Sep  3 14:24 uImage
drwxr-xr-x  6 root root     4096 Sep  3 14:20 usr_backup
ma-devel MAE210_mtdroot # dd if=uImage of=kernel.img conv=notrunc
6139+1 records in
6139+1 records out
3143408 bytes (3.1 MB) copied, 0.016493 s, 191 MB/s
ma-devel MAE210_mtdroot # ls -l
total 38928
drwxr-xr-x 18 root root     4096 Jun 17  2010 embedded_glibc
drwxr-xr-x 19 root root     4096 Sep  3 14:20 embedded_glibc.dist
-rw-r--r--  1 root root  3670016 Sep  3 14:26 kernel.img
-rw-r--r--  1 root root 29360128 Sep  3 14:20 rootfs.jffs2
-rwxr-xr--  1 root root      871 Jul 31 14:22 rootfs.sh
-rw-r--r--  1 root root  3143408 Sep  3 14:24 uImage
drwxr-xr-x  6 root root     4096 Sep  3 14:20 usr_backup
ma-devel MAE210_mtdroot # rm kernel.img.bk 

rootfs.jffs2 と kernel.img を結合すると、TFTPもしくはWebUIからアップデート可能なファームウェアイメージとなります。

ma-devel MAE210_mtdroot # cat rootfs.jffs2 kernel.img > firmware.img
ma-devel MAE210_mtdroot # ls -l firmware.img 
-rw-r--r-- 1 root root 33030144 Sep  3 14:43 firmware.img