*QEMU [#q7571d71] 気が向いたのでいじってみる. ** 資料 [#c3e14553] ざっくりぐぐってみる. :http://fabrice.bellard.free.fr/qemu/|本家 :http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html|日本語マニュアル ** インストール [#f936fe24] debian 環境なので,さっくりと # apt-get install qemu で. ** ARM エミュレーション [#n6f1b698] http://fabrice.bellard.free.fr/qemu/download.html に,吊るしの ARM Linux のイメージがあるのでダウンロード. で,README にあるとおりに $ qemu-system-arm -kernel zImage.integrator -initrd arm_root.img と実行. あっさり起動する. #ref(screen.png,center) ** ターゲットの NIC を有効に [#lba1a359] $ sudo qemu-system-arm -kernel zImage.integrator -k ja -net nic -net tap root 権限が無いと tap0 のアクセスができないようなので,sudo を使って起動してます. ** /proc/config.gz [#l94ef212] README によると,「カーネルのコンフィグレーションは /proc/config.gz を見てくれ」ということなので,見てみる. 確かに # zcat /proc/config.gz | more で見ることはできる. が,しかし, > この内容をエミュレータから持ち出す手段が無い ということに気がつく. ftp コマンドも無ければ,httpd も無い. うーん,と考えたあげくに > そうだ,NFS だ ホストマシンのディレクトリをエミュレータマシンへ mount すればいいのだ. ** NFS にチャレンジ(失敗) [#f96fe87f] というわけで,NFS. まずは,ホストマシンの設定. /etc/exports に /home 172.20.0.*(rw,no_root_squash,async) というエントリを追加する((セキュリティ的には,あっぱっぱの設定なので,closed なネットワークでやってね)). で, # /etc/init.d/nfs-kernel-server restart で,NFS サーバを再起動. そして,ターゲット上で # mount 172.20.0.1:/home/armroot /mnt と実行してみるが… portmap が無いので失敗してしまう. うーむ. ** かくなるうえは,nfsroot [#ieb6317e] というわけで,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 の内容をホストマシンに持ってくることができました. めでたしめでたし. *本日のツッコミ [#e33b5bf0] #comment