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のブートメッセージが表示まれます。
・「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 #
2009.11.13