ARM9用のルートファイルシステムを構築する

BusyBoxのビルド

シェルやユーティリティとしてBusyBoxを使用します。

BusyBoxソースのダウンロードと展開

BusyBoxのソースをダウンロードし、展開します。

$ cd ~/sam91
$ wget http://busybox.net/downloads/busybox-1.13.3.tar.bz2
$ tar jxvf busybox-1.13.3.tar.bz2
$ cd busybox-1.13.3

BusyBoxのコンフィグレーション

初めにデフォルトの設定を行い、次にテキストメニュー方式で設定を変更します。

$ make defconfig
$ make menuconfig

・ Coreutils の ls で、Allow use of color to identify file types を「無効」にします。

BusyBoxのビルド

BusyBoxをビルドします。

$ make CROSS_COMPILE=~/sam91/arm-2007q1/bin/arm-none-linux-gnueabi- ARCH=arm CFLAGS=--static LDFLAG=--static
$ make CROSS_COMPILE=~/sam91/arm-2007q1/bin/arm-none-linux-gnueabi- ARCH=arm CFLAGS=--static LDFLAG=--static install

BusyBoxビルドの確認

ビルド結果を確認します。

$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV),
 statically linked, stripped

$ ls _install -l
drwxr-xr-x 2 ono ono 4096 2009-11-13 12:43 bin
lrwxrwxrwx 1 ono ono   11 2009-11-13 12:43 linuxrc -> bin/busybox
drwxr-xr-x 2 ono ono 4096 2009-11-13 12:43 sbin
drwxr-xr-x 4 ono ono 4096 2009-11-09 21:34 usr

$ ls _install/bin -l
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 addgroup -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 adduser -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ash -> busybox
-rwxr-xr-x 1 ono ono 2343156 2009-11-13 12:43 busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 cat -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 catv -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 chattr -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 chgrp -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 chmod -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 chown -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 cp -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 cpio -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 cttyhack -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 date -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 dd -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 delgroup -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 deluser -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 df -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 dmesg -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 dumpkmap -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 echo -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ed -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 egrep -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 false -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 fdflush -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 fgrep -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 getopt -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 grep -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 gunzip -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 gzip -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 hostname -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 hush -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ip -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ipaddr -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ipcalc -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 iplink -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 iproute -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 iprule -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 iptunnel -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 kill -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 linux32 -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 linux64 -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ln -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 login -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ls -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 lsattr -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 makemime -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mkdir -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mknod -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mktemp -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 more -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mount -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mountpoint -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 msh -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mt -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 mv -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 netstat -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 nice -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 pidof -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ping -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ping6 -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 pipe_progress -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 printenv -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 ps -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 pwd -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 reformime -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 rm -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 rmdir -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 run-parts -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 sed -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 setarch -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 sh -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 sleep -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 stat -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 stty -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 su -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 sync -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 tar -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 touch -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 true -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 umount -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 uname -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 uncompress -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 usleep -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 vi -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 watch -> busybox
lrwxrwxrwx 1 ono ono       7 2009-11-13 12:43 zcat -> busybox

ルートファイルシステムの構築

ルートファイルシステムを構築します。

$ cd ~/sam91
$ mkdir target

$ dd if=/dev/zero of=rootfs.bin bs=1024 count=5120
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.0561283 s, 93.4 MB/s

$ mke2fs -F -m 0 -b 1024 rootfs.bin 5120
mke2fs 1.40.8 (13-Mar-2008)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1280 inodes, 5120 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=5242880
1 block group
8192 blocks per group, 8192 fragments per group
1280 inodes per group

Writing inode tables: done 
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

$ sudo mount -t ext2 -o loop=/dev/loop0 rootfs.bin target
$ cp -rf busybox-1.13.3/_install/* target
$ cd target
$ mkdir dev
$ cd dev
$ sudo cp -a /dev/console .
$ sudo cp -a /dev/tty[0-6] .
$ sudo mknod mtdblock1 b 31 1
$ ls -l
crw------- 1 root dialout  5, 1 2009-11-13 14:28 console
brw-r--r-- 1 root root    31, 1 2009-11-13 14:36 mtdblock1
crw-rw---- 1 root root     4, 0 2009-11-13 23:28 tty0
crw------- 1 root root     4, 1 2009-11-13 14:28 tty1
crw------- 1 root root     4, 2 2009-11-13 14:28 tty2
crw------- 1 root root     4, 3 2009-11-13 14:28 tty3
crw------- 1 root root     4, 4 2009-11-13 14:28 tty4
crw------- 1 root root     4, 5 2009-11-13 14:28 tty5
crw------- 1 root root     4, 6 2009-11-13 14:28 tty6

$ cd ~/sam91
$ ls target -l
drwxr-xr-x 2 ono  ono   2048 2009-11-13 14:34 bin
drwxr-xr-x 2 ono  ono   1024 2009-11-13 14:36 dev
lrwxrwxrwx 1 ono  ono     11 2009-11-13 14:34 linuxrc -> bin/busybox
drwx------ 2 root root 12288 2009-11-13 14:33 lost+found
drwxr-xr-x 2 ono  ono   1024 2009-11-13 14:34 sbin
drwxr-xr-x 4 ono  ono   1024 2009-11-13 14:34 usr

$ sudo umount target

ARM9シミュレータVPAで動作確認

ARM9シミュレータVPAへのLinuxコピー

ARM9用シミュレータVPAにLinuxをコピーします。

VPAのsimulationフォルダ(C:\Coware\at91-Build-2009-Jul-17\simulation)に、
- カーネルイメージ ~/linux-2.6.27/arch/arm/boot/zImage
- ルートファイルシステム ~/sam91/rootfs.bin
- VPA用ブートローダ LinuxBoot.elf (Interface Oct. 2009付録)
をコピーします。

ARM9シミュレータVPAの起動と設定

・ VPA用ライセンスサーバを起動します。
「プログラム」→「Virtual Platform(ARM9)」→「LMstart」をクリックします。

・ VPAを起動します。
「プログラム」→「Virtual Platform(ARM9)」→「Virtual Platform Analyzer(ARM9)」をクリックします。

・ シミュレータ本体を起動します。
メニューバー → 「CQmagazine」 → 「Sim-Start」をクリックします。

コマンド入力

・ コマンド入力部に、ファイルをロードするためのコマンドを入力します。
load_image LinuxBoot.elf
CS0 mem_load rootfs.bin 0x200000
CS1 mem_load zImage 0x2200000

UartTerm_DBGU.exeの起動

・ C:\Coware\at91-Build-2009-Jul-17\skins\UART_TERMINAL\UartTerm_DBGU.exe を起動します。

VPAでのシミュレーション

・ シミュレーションを開始します(開始アイコンをクリックします)。
シミュレータ用画面にLinuxのブートメッセージが表示まれます。

vpa.jpg

・「Please press Enter to activate this console.」の表示で、Enterキーを押します。
コマンドラインが表示されます。

Please press Enter to activate this console.
#

コマンドの実行

lsコマンドを実行します。

# ls -l
drwxr-xr-x    2 1000     1000         2048 Nov 13  2009 bin
drwxr-xr-x    2 1000     1000         1024 Nov 13  2009 dev
lrwxrwxrwx    1 1000     1000           11 Nov 13  2009 linuxrc -> bin/busybox
drwx------    2 0        0           12288 Nov 13  2009 lost+found
drwxr-xr-x    2 1000     1000         1024 Nov 13  2009 sbin
drwxr-xr-x    4 1000     1000         1024 Nov 13  2009 usr
#

uart_term.jpg

2009.11.13