2010年02月19日

ARM QEMUのユーザーランドをUbuntuにさしかえる

前回はQEMUをアップデートしてLinuxカーネルを最新版にさしかえました。

さらに仮想ハードウェアもARM926のものからARM11MPcoreのものにさしかえました。

今回は残ったユーザーランドをDebianからUbuntuにさしかえてみます。



ARMのUbuntuについて

https://wiki.ubuntu.com/ARM に情報があります。

これによると、DebianとUbuntuはほぼ同じソースから作られているものの、DebianはARMv4tをターゲットとしているのに対して、Ubuntuは9.04(コードネームjaunty)でARMv5t, 9.10(コードネームkarmic)でARMv6向けに最適化されているそうです。

さらに次のリリースのlucidではARMv7専用になるということです。

Ubuntu 9.04(jaunty)を動かす

https://wiki.ubuntu.com/ARM/RootfsFromScratch

ここにARM Ubuntuのルートファイルシステムを作る方法が書いてあります。

PCのUbuntuが必要です。私の手元にUbuntu 9.04 (x86_64) があるのでそれでやってみました。

https://launchpad.net/project-rootstock/

ここからrootstock-0.1.3.tar.gzをダウンロードします。

$ sudo apt-get install debootstrap
$ mkdir rootstock
$ cd rootstock/
$ tar xvf ~/download/rootstock-0.1.3.tar.gz 
$ sudo ./rootstock-0.1.3/rootstock --fqdn arm-jaunty --login user --password user 

これで armel-rootfs-時刻.tgz というtarアーカイブができます。

NFSでブートするためにNFSで公開しているディレクトリにこれを展開します。

$ mkdir -p /export/ubuntu_jaunty_armel/root
$ sudo tar xvf armel-rootfs-201002171152.tgz -C /export/ubuntu_jaunty_armel/root

起動は以下のとおり。

$ qemu-system-arm -M realview-eb-mpcore -m 256 \
 -kernel zImage.2.6.32.8_realview_eb \
 -append "root=/dev/nfs rw nfsroot=192.168.xx.xx:/export/ubuntu_jaunty_armel/root ip=dhcp " \
 -redir tcp:55555::22

/etc/fstabは編集しなくてもエラーになりませんでした。

なお、現在時刻が1970年1月1日になっていました。普通はネットワークの初期化時にntpdateが実行されて時刻が設定されるのですが、NFSrootのときにはカーネルのレベルでネットワークが初期化されるためにそれがスキップされているようです。

$ sudo /etc/netowrk/if-up.d/ntpdate

と手で実行すると正しく時刻が設定されます。

毎回の起動時にこれを行うようにするため、とりあえず /etc/rc.local にこの一行を追加しました。

Ubuntu 9.10(karmic)を動かす

せっかく今はARM11MPCore(= ARMv6k)のCPUが動いているのですから、ARMv6向けにチューニングされているkarmicを動かしてみたいです。

rootstockのスクリプトの中を読むとどうやらkarmic向けのルートファイルシステムを作るにはホストもkarmicになっているほうが簡単そうです。なので、VMware上にUbuntu 9.10のserver版をインストールして、そこで続きを行いました。

$ sudo apt-get install rootstock
$ sudo rootstock --fqdn arm-karmic --login user --password user 
$ sudo mount 192.168.xx.xx:/export /mnt
$ mkdir -p /mnt/ubuntu_karmic_armel/root
$ sudo tar xvf armel-rootfs-201002171732.tgz -C /mnt/ubuntu_karmic_armel/root

起動するにはルートファイルシステムのディレクトリを変更するだけです。

$ qemu-system-arm -M realview-eb-mpcore -m 256 \
 -kernel zImage.2.6.32.8_realview_eb \
 -append "root=/dev/nfs rw nfsroot=192.168.xx.xx:/export/ubuntu_karmic_armel/root ip=dhcp " \
 -redir tcp:55555::22

起動に成功しますが、カーネルのCONFIG_SYSFS_DEPRECATED をdisableにせよという警告メッセージがでてます。

make menuconfig で以下の変更をして、カーネルをリビルドします。

    General setup --->
      [ ] enable deprecated sysfs features which may confuse old usersp (マークを外す)

このカーネルで起動すると今度は大丈夫です。

先ほどと同様に /etc/rc.local で /etc/network/if-up.d/ntpdate を実行するように書き換えました。

9.04から9.10に変更してみて、すこしだけきびきびするようになったような気もしますが、すくなくとも9.10は起動時間がだいぶ短くなっているので快適です。

次回予告

今回使ったrootstockのスクリプトの中を見てみると、qemuが非常に巧妙に使われていました。次回はその技を紹介しようと思います。



トラックバックURL

トラックバック一覧

1. クロス開発でのQEMU まとめ(基礎編)  [ KMC Staff Blog ]   2010年09月16日 11:08
ここまでのQEMUの記事のリンク集です。 なお、CELFテクニカルジャンボリーにて、時間をいただきましたので、このあたりについて話をさせていただきます。 (3月5日 中野サンプラザ 入場無料) よろしければご参加ください。

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード