MacOS X上でLP49を動かしてみる

LP49をMacOS XSnow Leopard)のQemuおよびVirtualbox上で動かしてみた。

Qemu

まずは、Qemuのインストールから。0.10系と0.11系の違いはよくわからないが、とりあえず0.10.6を使うことにする。今回はソースからビルドした。ちなみにMacOS X用にはフロントエンドを追加したQってのがあるようだが、0.9.1ベースと古いので試さなかった。また、iQemu.appってのも見つけた。余談になるが、Plan 9Virtualboxでは動かない(というかものすごい遅いだけかもしれないのだが。。。)がQemuは問題なかった。

$ ./configure --disable-aio --disable-kvm --disable-kqemu --disable-sdl --target-list=i386-softmmu
$ make
$ sudo make install

LP49

LP49のページからISOイメージが入手できるので、早速動かしてみよう*1

$ qemu -cdrom lp49-boot.cd -vga std

起動したら、qshから"d vga"と実行してみよう。マンデルブロの描画が始まる。

続いてLP49のビルドをMBA上で試みるが、アセンブラがらみの問題ですぐには動きそうにない。そこで、Virtualbox上のubuntu 9.04でLP49をビルドするように作戦変更。前準備としてzipとgenisoimageをapt-getしておくこと。

基本的にはREADMEの通りにsrc直下でmakeを実行すればよいのだが、gcc4のあるバージョンからスタック保護機能が入った影響で素ではコンパイルできないので、CFLAGSに-fno-stack-protector追加してやる*2。src/Maketool以外にもlibdraw/Makefile、cmd/exportfs/Makefileあたりも直したかな。

$ cd src
$ make
$ make install
$ cd ..
$ ./mkcd

これでlp49-boot.cdが生成される。

一応、Virtualbox 3.0.12でも起動するか確認してみたが、qsh起動後にイーサネットバイスをbindするところで落ちてしまった。PCnet-FAST III (Am79C973)の代わりにPCnet-PCI II (Am79C970A)に設定すれば起動するが、動作速度はQemuより明らかに遅い。あと、BIOSエスケープシーケンスの仕様が違うのか何なのかよくわからないけど、フォントの色がQemuと違っていたりする。まぁ、Qemu使おう。


L4Ka::Pistachio

L4にはいろいろな実装があるが*3、LP49ではUniversity of KarlsruheのL4Ka::Pistachioが使われている。LP49の配布物にコンパイル済みのバイナリが入っているが、自前でコンパイルしてみる。Mercurialリポジトリが公開されている。環境は上と同じくubuntu 9.04。

必要なのはL4カーネル本体とブートストラッパ(kickstart)、ルートページャ(sigma0)の三つ。起動シーケンスはGrubからkickstartが実行されて、kickstartカーネルとsigma0をロード、起動する、という具合である。

ではまずカーネルのビルドから。menuconfigではとりあえず設定を変える必要はない。必ずxを打鍵してコンフィグファイルを出力して終了すること(ここでちょっとハマった)。

$ cd kernel
$ mkdir build
$ make BUILDDIR=/絶対パス指定/build
$ cd build
$ make menuconfig
$ make

makeに成功すればx86-kernelというファイルができる。

続いてkickstartとsigma0のビルド。

$ cd user
$ mkdir build
$ cd build
$ ../configure
$ make

で、util/kickstart/kickstartとserv/sigma0/sigma0ができているはず。

以上の三つのファイルをLP49のrootfs/l4以下にコピーして、gzipしておく。カーネルはLP49にならってl4ka-yymmにリネームした。あとはmenu.lstを変更して、mkcdでCDイメージを作成すれば完了。

*1:LP49のページには起動オプションとして「-std-vga」と書かれているが、新しいqemuではそのオプションは廃止されたので「-vga std」と書く必要がある。

*2:Linuxカーネルみたいに$(call cc-option,-fno-stack-protector)と書けるようにマクロ書くといいのだろうけど。

*3:例えば、NICTAはseL4という実装を作っており、今年のSOSPのベストペーパを取った。