contents
SqueakNOSをFreeBSDでbuildする
むとうたけしって?
- 奈良県大和郡山市在住, 万博年生まれ, 双子座, B型
- 家族: コンピュータに理解の無いヨメ, 7才, 3才の娘
- 仕事: パートタイムSE
- 趣味: BSD(?), 自転車で裏山を走る/歩く/運ぶ/押す
- 技能
- kernelやデバイスドライバ方面は全然ダメ
- FreeBSD portsを作る程度
- あんまりSqueaker/Smalltalkerでもありません
Squeakって?
- K*BUGでの発表(FreeBSDでSqueak/Croquet)参照
- Smalltalkの進化したもの
- オブジェクト指向の環境: 全てはオブジェクト
- Virtual Machine方式を採用し、MacOS X/Windows/Unixなどで動作
- VMがかなりコンパクトなので、PDA(WindowsCE, りなざう, PocketPostPetなど) でも動作可能
- OSだと言う話もあるし、言語だという話もある
- portsやpkgsrcではlang/squeak
現在のFreeBSD用Squeakの状況
- 少しVMのバージョンが古い(3.6-4)
- FFIやWebブラウザプラグインに関してはパッチがcommit
- WineやLinuxlator経由で他のVMも動作
- 最新の武藤私家版VM(3.9-7)を使うと…
- XIMを使った日本語テキストの入力が可能
- Croquetが利用可能(audio/openalにパッチ必要):デモ
- その他の問題
- OSSの制限で音声の入出力を同時に行えない(Linuxも)
- i386以外でコンパイルできない
- むとうの夏休みの宿題
- 手元のXIM関係のパッチなどをportsにsend-prする
SqueakNOSって
- Virtual Machineを動かすベースOSの必要ないSqueak環境
- SqueakがOSに!!!
- ただし、いまのところi386対象
- というか、VMwareとqemu対象?
- 最近、5年振りぐらいに復活したらしい
- 大体月に1度ぐらいのアップデート公開ペース
qemuでの動作の様子
% qemu -net nic,model=rtl8139 -std-vga -cdrom release/SqueakNOS.iso
- 右側のTranscriptがdmesgです
Squeakの仕組
SqueakNOSの仕組
対応デバイス
- 基本的なデバイス: SqueakNOS-Devices-Baseカテゴリ
- CMOS, OldPCKeyboard(PS/2:マウスを含む), PCIBusEntry, PIC8259, UART16550, UART8250
- Video
- (Legacy) GRUBにVGAモードを変更するパッチを当てて実現(setvbeコマンド)
- Networkデバイス: SqueakNOS-Devices-Network
- LanceNIC (VMwareでエミュレーションされているもの): 2006/07/26版で対応
- Realtek8139 (蟹さん,qemuでエミュレーション可): 2006/07/30版で対応
ネットワークデバイスの動作の様子(VMware: Lance)
- 中央下のWorkspaceでネットワークを初期化
- 緑色で選択されている部分をdo-it
- IPアドレスは、各ホストのVMnetの設定を確認する
- コマンドプロンプトからping
- 応答あり
- 右側のTranscriptになにやらメッセージが
ネットワークデバイスの動作の様子(qemu: RTL8139)
- userネットワークはファイアウォールの中
- ホストOS側からはpingが飛ばない
- SqueakNOS側から打てば…
- (Net-Protocols-IPカテゴリ)ICMPってのがあるけどどうやって使えばいい?
- これから調べます(_O_)
- qemuコマンドラインオプション-redirは?
- 何故かホストOS側でlistenされて無いっす
- qemuでtap系のネットワーク設定しないとダメかな?
- これから調べます(_O_)
- qemuにはLanceNICも実装されている?
- FreeBSD ports(qemu-0.8.2)では動かない?
% qemu -net nic,model=lance -std-vga -cdrom SqueakNOS.iso qemu: Unsupported NIC: lance
- smc91c111もダメみたい
VM関連ソースについて
- 詳しくは、SqueakNOS components参照
- trunk/platforms/SqueakNOS/nos/nos.c
- 最低限のlibcコアの実装など
- trunk/platforms/SqueakNOS/nos/sqGlue.c
- ビデオ回りの実装
- trunk/platforms/SqueakNOS/nos/ints.[ch]
- IDT初期化、 IRQ handling, Timer初期化などの実装
Squeakイメージファイルについて
- Squeak3.8-6665fullベース
- 2006/08/18現在の安定版
- + NetSqueak
- ネットワークスタック
- + SqueanNOS用のチェンジセット
- デバイスドライバなど
FreeBSDでbuildするためのパッチ(2006/08/08版用)
- やったこと
- gmakeを使うようにする
- nos/nos.cで定義されている関数をundefする
- libc, libm回りの調整
- できたこと
- VMware Player(Windows), qemu(FreeBSD)で動作(?)
- できなかったこと
- 手元の実機では動作しない
- オリジナルのISOイメージで動作してるか?
ベンチマーク(0 tinyBenchmarks.をprint it)
- 全て同じ作業用ノートパソコン(SHARP PC-MV1-C3F)での結果
CPU: Mobile Intel(R) Pentium(R) III CPU - M 1133MHz (1129.57-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0x6b4 Stepping = 4 Features=0x383f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE> real memory = 796393472 (759 MB) avail memory = 769847296 (734 MB)
ISO(build) | base OS | bytescode/sec | sends/sec | 備考 | |
original image | FreeBSD | 42981867 | 2461185 | FreeBSD用squeak VM(3.9-7) | |
original image | WindowsXP | 117972350 | 3416954 | Windows用squeak VM(3.7-4) | |
qemu | original | FreeBSD | 10376134 | 337863 | qemu-0.8.1_2 |
qemu | FreeBSD | FreeBSD | 14492753 | 289951 | qemu-0.8.1_2 |
VMwarePlayer | original | WindowsXP | 56987932 | 2743461 | |
VMwarePlayer | FreeBSD | WindowsXP | 54560954 | 3570997 | |
SqueakNOS | original | SqueakNOS | 動かない… | ||
SqueakNOS | FreeBSD | SqueakNOS | 動かない… |
まとめ
- 御静聴ありがとうございました
- SqueakNOSはFreeBSDでもbuildできます
- 実機で動いたら教えてください(_O_)
- オブジェクト指向でデバイスドライバを書いてみませんか?
- debugはどうするんだろ?
参考文献
質問/コメント
当日の質問およびコメントは以下の通り。
- XenのDomainUに実装したら?
- NativeのIMが無くて良いの? 最近、変な言語(?)でIM実装するの流行ってるし
- 古ーいPentium 133MHzあたりだと動くかも。 qemuはPentiumII程度のエミュレーションだし
- ファイルへの入出力は?
- 今のところメモリーを使ったエミュレーションのみで、ファイルシステムは扱えない
加筆/修正履歴
- 2006/08/18@ヨメ実家
- qemuでの絵を差し替え
- qemuでのネットワーク動作のチェックは今後の課題;-)
- スクリーンショットに説明を追加
- などなど
- 2006/08/15
- 質問/コメントを作成
- qemuでネットワークデバイスとしてRTL8139が使えるように、オプションなどを修正
- 2006/08/12
- 発表バージョン