QEMU †気が向いたのでいじってみる. 資料 †ざっくりぐぐってみる.
インストール †debian 環境なので,さっくりと # apt-get install qemu で. ARM エミュレーション †http://fabrice.bellard.free.fr/qemu/download.html に,吊るしの ARM Linux のイメージがあるのでダウンロード. で,README にあるとおりに $ qemu-system-arm -kernel zImage.integrator -initrd arm_root.img と実行. あっさり起動する. ターゲットの NIC を有効に †$ sudo qemu-system-arm -kernel zImage.integrator -k ja -net nic -net tap root 権限が無いと tap0 のアクセスができないようなので,sudo を使って起動してます. /proc/config.gz †README によると,「カーネルのコンフィグレーションは /proc/config.gz を見てくれ」ということなので,見てみる. 確かに # zcat /proc/config.gz | more で見ることはできる. が,しかし,
ということに気がつく. ftp コマンドも無ければ,httpd も無い. うーん,と考えたあげくに
ホストマシンのディレクトリをエミュレータマシンへ mount すればいいのだ. NFS にチャレンジ(失敗) †というわけで,NFS. まずは,ホストマシンの設定. /etc/exports に /home 172.20.0.*(rw,no_root_squash,async) というエントリを追加する*1. で, # /etc/init.d/nfs-kernel-server restart で,NFS サーバを再起動. そして,ターゲット上で # mount 172.20.0.1:/home/armroot /mnt と実行してみるが… portmap が無いので失敗してしまう. うーむ. かくなるうえは,nfsroot †というわけで,root filesystem を nfs に指定しての起動にチャレンジ. この場合は portmap は必要ありません. 幸いにして,/proc/config.gz を見る限りでは,nfsroot の起動には対応しているようである. まずは,export するディレクトリツリーの作成. 付属の arm_root.img を使用する. このファイルは cpio イメージを gzip 圧縮してあるので # cd /home/armroot # zcat arm_root.img | cpio --extract で,/home/armroot 以下に展開できます. $ sudo qemu-system-arm -kernel zImage.integrator -k ja -net nic -net tap \ -append 'root=/dev/nfs nfsroot=172.20.0.1:/home/armroot \ ip=172.20.0.2::172.20.0.1:255.255.0.0:::' で,いざ,起動. メッセージを見る限りでは mount には成功しているようなのだが,途中で通信が切れてしまうようである. ターゲットファイルシステムの /etc/init.d/rcS を見る. ifconfig eth0 10.0.2.15 up rdate 10.0.2.2 ip route add default via 10.0.2.2 こんな行があるので,コメントアウトしてやります. あと,起動直後は nfsroot は readonly で mount されているので,先頭に mount -o remount,rw / を追加. そして,再度チャレンジ. 今度はうまくいきました. 書き込みも ok. というわけで,ターゲット上で # cat /proc/config.gz > config.gz を実行し,config.gz の内容をホストマシンに持ってくることができました. めでたしめでたし. |