SqueakNOSをFreeBSDでbuildする

2006年8月12日(土) NBUG 例会

sqlogo.gifNOS と logo-full.png

武藤武士 <mutoh@openedu.org>

むとうたけしって?

  • 奈良県大和郡山市在住, 万博年生まれ, 双子座, 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 
qemu-network-freebsd.png
  • 右側のTranscriptがdmesgです

Squeakの仕組

squeak-freebsd-trans.png

SqueakNOSの仕組

SqueakNOS-trans.png

対応デバイス

  • 基本的なデバイス: 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)

network.png
  • 中央下の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/secsends/sec備考
original image FreeBSD 42981867 2461185 FreeBSD用squeak VM(3.9-7)
original image WindowsXP117972350 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 WindowsXP56987932 2743461
VMwarePlayer FreeBSD WindowsXP54560954 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
    • 発表バージョン
Last modified: 2006-08-18
Post-it: New Post-it (help)

Text color: [_][_][_][_]

Background: [_][_][_][_][_][_]

Draw Line:

x: y: