2009年1月16日金曜日

[misc]OLPCでinferno

InfernoをOLPCで動かしているプロジェクトがあるらしい
http://wiki.laptop.org/go/Inferno

OLPCというのはOL用のPCではなく、新興国の子供に安価なPCを行き渡らせるプロジェクト、、、なのかな?
旬を過ぎた話題ですが。

Infernoが動き、GUIも動いているっぽいです。
こんなコンピューターが子供のうちに使えるというのはなんかうらやましいなぁ。

Infernoの利点としては、
・動作が軽いのでスペックの低いマシンでも動く
・プログラミング言語の素性が良い、のかな
・ネットワークプログラミングがしやすい?
といったところか。

学習用であれば、マイナーOSであるのも許容範囲かも。

今ならNetbookでinfernoなんて旬かもしれない。

2009年1月15日木曜日

[arm]エミュレーター環境

Armadilloを動かす前に、ARMのエミュレーション環境で動かしてみました。

・QEMU
ARM用のQEMUをちょっと試してみました。
さくっとLinuxが動くのがすごい。

結局Inferno起動にはいたらず。

QEMUのエミュレーション環境のUARTについては
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0183aj/
が相当する。
UARTのベースアドレスは0x16000000、0x17000000
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0159b/I1035564.html

もう使うことはないとは思うが、一応メモ。

・Inferno-DS

Nintendo DSでInfernoを動かす試みがあるらしい。
http://code.google.com/p/inferno-ds/

とあるDSのエミュレーターで動かしてみたところ、起動したっぽい。

いいじゃん、と思ったが、
 ・キーボードが無いので、シェルとかどうすんの?
 ・そもそも任意のROMを起動するのはまずかろう
という理由から、実機で試すのは止めました。
DSで分散環境って夢があっていいんだけど。

2009年1月14日水曜日

[acme]ACMEに慣れ親しむ

InfernoではEmacsは永久にサポートされないので、
(http://plan9.bell-labs.com/magic/man2html/1/emacs)
ACMEなるエディタに慣れ親しむのが良いかと思います。

起動して途方にくれるのはvi, Emacs以来ですね。

とてもすばらしいチュートリアルがあります。
http://d.hatena.ne.jp/oraccha/20080228/1204158985

動画でつかいかたを教えてくれます。
これを見ると中央ボタンが必須っぽいですね。
まあコントロール+右クリックでもそれほど苦痛ではないですが。

ACMEを移植したプロジェクトもあるようです。
http://www.caerwyn.com/acme/

Windowsで動作を確認しました。
マウスホイールが使えるのが便利(だけどなれちゃうとInfernoのときにいらいらするかも)。

フォントを選べば日本語も表示できます。
Infernoからfont以下を持ってきて、acmeのfontにコピー。
acmeの起動オプションで
acme -f /font/misc..... (なんかunicodeっぽい名前のフォントのパス)
とするとOK。
ただ,acmeをインストールしたところがルートになるっぽいので、厄介です。
常用するには気合が必要。

[arm]Inferno on Armadillo

Armadilloの上でInfernoを動かす試みをしているところです。
まだなんとなくシェルが動いたところまでしか実現できていませんが、やったことをメモしていきたいと思います。

・環境

Armadillo
http://armadillo.atmark-techno.com/armadillo
ARM720Tの開発ボード
CF, Ethernet、AD、IO等がある。

クロス開発用のPCはLinux(Fedoracore3(あれ?6だったか?))
WindowsではいまいちビルドがうまくいかないのでLinuxで行った。

※一番良いのはPlan9かも知れないが、まだネイティブなPlan9環境は構築できていない。

・開発概要

ブートローダーはもともとArmadilloに入っているものを使用する。
本来はLinux用だが、gzipを展開してジャンプするだけなので、そのまま利用できる。

開発のベースはEvaluator7tという評価基板用のものを利用する。
これは、Infernoのツリーの、
os/ks32
にある。

※Evaluator7tというのが何者なのか、調べてもいまいち良くわからない。
 どうやらそれほど多機能なボードではなさそう・・・

・ファームウェアダウンロード方法

Armadilloの取り扱い説明書を参照。
ジャンパJP1をONにしてやるとシリアルからプログラムをダウンロードできる。
専用のダウンローダー(hermit)があるので、それを利用。
0x00010000に書き込む。
正確なコマンドラインは後ほど。

ジャンパJP1をOFFにして再起動すると、Flashの0x00010000にあるgzipファイルを
SDRAMの0xc0028000に展開する。
0xc0028000がリセットベクタにあたるので、そこに書かれているアドレスにジャンプする。

・ファームウェア作成のポイント

ファームウェアの改変ポイントは
  • uartドライバ作成
  • mkfileを編集し、ヘッダなしのgzipファイルとしてファームウェアが生成するようにする
  • MMUの設定
  • 割り込みベクタの書き方を変更
  • ルートファイルシステムを修正
  • プログラムをロードするアドレスの変更
作業詳細は次回以降。なぜなら、ブログを書いているPCと開発PCが別なので参照しづらいため。

・現状
シェルが起動する。
自分で作ったhelloworld が起動することを確認。
システムクロックが働いていないようで、sleep等時間関係の関数は動かないっぽい。
割り込みは入っているんだけどな。

※Hello WorldはLimbo言語で記述したもの。PCで動いていたバイナリがそのままArmadilloでも動くと、当たり前と思いつつも感動がある。

・今後の目標

Infernoをまともに動かす。
ネットワークを使えるようにする。
CFも可能であれば(優先度低)。
そしてゆくゆくはSH環境で動かす。
そうなると、SH用のコンパイラから作らなければならないかも。それはそれで楽しそうだ。

・所感

動いたときの感動は大きい。
開発の基にした基板とコアが同じなので簡単にいくかと思ったら甘かった。
ペリフェラルがぜんぜん違う。
割り込みコントローラーもタイマーもuartも全部書き直し。

※MMUはARMのアーキテクチャで決まっているので、使い方はほぼどれも同じと思われる。

Infernoを有用に使うにはネットワークは必須であろう。
EthernetコントローラーはCS8900A互換ということで、そのドライバはInfernoにすでに含まれている。
簡単に移植できるといいなぁ。

・参考文献

MMUに関してはInterface 2008 11月が参考になった。
Armadilloに関しては、ハードウェアマニュアル、ソフトウェアマニュアル、ブートローダーのソースコードが参考になる。
Infernoのカーネルビルドに関しては
https://umdrive.memphis.edu/blstuart/htdocs/inf_native.html
を取っ掛かりとした。
コンパイラ、アセンブラに関しては、manとかRob先生の説明を参照した。
コンパイラはGCC等とは若干異なるようで、違いはおさえておいたほうがよさそう。
http://www.cs.bell-labs.com/sys/doc/comp.html
もちろん、CPUのデータシートも必須。

[misc]使う上でのメモ

・コマンド

ns namespaceを表示する
netstat
svc/httpd/httpd ウェブサーバー起動
os ホストOSのコマンドを実行 os uname とか

・ファイルサーバー

サーバー側
listen tcp!*!ポート {export パス &}

クライアント側
mount -A tcp!アドレス!ポート マウントポイント
-Aは認証なし
mountを実行したプロセスのみ参照できる。

・wikifs

よくわからなかった

・DNS

よくわからなかった。
charonからは名前引きできてるところを見ると、DNS名前引きはアプリケーションレイヤーで行うのかな?

ndb/dnsquery ドメイン名
で名前引きはできるようだ。

(090311追記)
ちょっと分かったかも。
ndb/dns でサービスを立ち上げてから、
ndb/dnsquery が利用可能になる
dns サーバーアドレスは、/lib/ndb/localに書くのではなかろうか

・tftp

サーバー側はip/tftpdを実行するのみ。
初回は/services/tftpdディレクトリを作っておく。ここにファイルがおかれる。

クライアント側はコマンドラインプログラムは無いのかも。
モジュールはあるようなので、ちょっとしたプログラムを書けば作れるのではないか。

・icmp/ping

なんと、ネイティブまたはホストOSがplan9の場合でなければICMPは使用できないようだ。
pingが使えないのは痛い。

2009年1月11日日曜日

ブログ始めてみる

最近Infernoに興味がわいたのでブログに書いてみようかと。