*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


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS