2011年5月27日金曜日

infernoはjslinuxで動くか?

jslinuxというものがあります。
なんと、ウェブブラウザのJavascriptで386のエミュレーションをし、
その上でlinuxが動くというのです。

http://bellard.org/jslinux/

素晴らしいです。

さて、新しい環境が出てきたら、そこでinfernoが動くのか考察するのが礼儀です。

この環境は386上のLinuxということで、普通にLinux上でビルドすると動くような気がしますね。
結論から言うと、FPUが原因で動かなかったのですが。

キャラクターコンソールオンリー、ディスクスペースが全部で最大4Mbyteなどの制限があり、
ミニマムなビルドにしないと動かなそうです。

・手順

1. ローカル環境、ディスクの用意

http://blog.livedoor.jp/dankogai/archives/51683749.html
を参考にローカル環境と4Mbyteのディスクを作ります。

cpux86.js, cpux86-ta.js, index.html, jslinux.js, linuxstart.bin, root.bin, term.js, vmlinux26.binがあれば動くようです。

2. mkconfig の編集

普通にセルフビルドする設定にしておく。
SYSHOST=Linux, OBJTYPE=386。

3. ミニマムなビルドのためにいらないものを削る

emu/Linux/emu-gを編集。

dev: env, prof, dup, ssl, cap, indir, ip, eia, mem

mod: math, srv, keyring, crypt, ipints, loader

あたりをコメントアウト。

4. ビルド、strip

mk CONF=emu-g install

こうすると、GUIを持たないemu-gというプログラムが出来る。

strip emu-g でダイエットしておく。

5. 必要なファイルをディスクイメージにコピー

作ったemu-g、必要なライブラリ、必要なdisをコピーしておく。

emu-gは/binに、ライブラリは/libに、disは/root/inferno/dis/においた。
ライブラリはldd emu-gで表示されるライブラリをコピー(ホストのlinuxのものをコピー)。
libpthread.so.0も元々あるやつだとダメっぽいのでこれもコピー。

必要なdis は
lib/bufio.dis, lib/filepat.dis, lib/arg.dis, lib/string.dis, sh.dis, emuinit.dis。

6. 実行

jslinuxを立ち上げて(ブラウザでindex.htmlを開く)、
emu-g -r /root/inferno を実行すると・・・
うーん、動かず。

どうやらFPinit()でだめになるっぽいです。
そもそもCPUエミュレーターはFPUには対応していないようで、
inferno emuはFPU必須なのかも。

起動の流れが追えて勉強になりましたが、動かなかったのは残念。

ちなみに、emu-gのサイズは291kbyte、disは合わせて58kbyte。
共有ライブラリはでかいですが(全部で2Mbyteほど、ミニマムは不明)、
結構小さいですね。

私の技量ではここまで。
Native infernoをやるのはおそらく無理かと。
動けば、ブラウザ上でinfernoができてすごくいいんですけどね。
IEのプラグインはあるようですが、他のブラウザではまだなので、動くと良いのですが。

0 件のコメント:

コメントを投稿