(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

8/22(土)に名古屋市立大学で開催された,オープンソースカンファレンス2009 Nagoyaに出展してきました.今回も単独ブースでの出展です.

前回の京都では,専門学校のロビーでやっていたのでそれなりに広々していてとなりのブースとくらいしかお話しできなかったのだけど,今回は大学の教室でやったので,いい意味での閉鎖空間というか,わりととなりどうしで和気あいあい,という感じで楽しかったです.(あと会社の同期もいたし)

ブースは会場に入ったらなんと日本 OpenSolaris ユーザーグループと日本Androidの会という強力な2つにおもいっきりはさまれていて,KOZOSなんていうよくわからんものが間にポツンとあるような感じであちゃーやべーなーと思ったのだけど,まあいろいろ話せてよかった.前回説明を聞いていただいたCSnagoyaの展示がちょうど目の前だったと,あと隣の日本Androidの会の人といろいろ話をしたのだけど,いやーためになるねえ.いろんなひとと話をするのはいいもんだ.(CSnagoyaは相変わらず面白い勉強会やってるなあ,と思った)

前回のように,会場に足を運んでくれた人にKOZOSをひとりひとり紹介して説明していくのもいいけど,今回みたいに隣どうしでいろいろお話しして情報交換するのもいいもんです.(なので今回はあまり説明していなかったかも)

あとg新部さんの講演があって,ちょっと昔に若手技術者勉強会みたいなので(当時は私も若手だったのです)お世話になったので講演を聞いたのだけど,うーんすごいねえ.いや,こういうすごいひともいるもんだと刺激になるねえ.遊んでる場合じゃないですな.(とかいいつつ,名古屋の帰りはドライブがてら丹沢で遊んできたのだけど.当り前だけどファミリーキャンプ客が多かった)

で,KOZOSなのだけど,前回もちょっと書いたけど,もともとはユーザランドOSとしてリアルタイム性とか考えていきたかったのだけど,現在H8ボードへの移植を進めている.というのは,リアルタイム性についてはμiTRONとかですでに考えられているので,後発のOSとしてはいまさら追求しても面白味が無いからだ.(単なる僕の勉強と,勉強した内容を紹介するだけのつまらんものになってしまう)

あと,僕自身,リアルタイム性がどうあるべきか考えがかなりいきづまってしまっていて,ほんとにやるのならこれ以上はやっぱし専門家にある程度は教わらないと,僕のようなよくわからんどこぞの誰かがひとりで考えていてもあまり進展はないかなあ,という理由もある.

ということでリアルタイム性とかの難しい話はおいといて,安価なプラットホームに移植を進めて,組み込みOSの勉強をしたい人が,低い敷居でパッと試せるようなものにしていきたいなあ,と今は思っている.「KOZOSのウリ」ってやつですね.

パッと試せるためにはターゲットボードが安いだけではダメで,スタートアップガイドみたいな「とりあえずこうすれば動きます」的なドキュメントが整備されていることが大切だ.なのでどうすればとりあえず試せるのかって情報をもっと流していきたい.

あと開発環境は特定のものにしばられないことも大切.まあ僕のように何が何でもFreeBSD上で開発したいって人は稀だとは思うけど,メーカとかが配布している特定の(概ね,Windows用の)コンパイラを使うというのではダメだ.ということで「binutilsとgccを自分でクロスビルドして使う」というのは,僕的には必須だ.

最近はtoolchainが進化して,ビルド済みのクロスコンパイラとかが一式そろっていて,インストールするだけということも多いけど,やはり組み込みやるならば,まずはbinutilsとgccをクロスビルドするところからやらないと,という思いもある.(ビルド済みのtoolchainを否定するわけではないのだけど,全員がWindowsやLinuxを必ず使っているわけではないので,それとは別にソース形態での配布もしてほしいなあ,と思うことは多々ある)

まあでも初心者の場合には,むしろ特定の開発環境にしばってしまって,「この環境で開発しろ!」と言ってあげたほうがとっつきやすいのかもしれないけど.人によりけりだとは思うけどね.

で,H8への移植なのだけど,現在ブートローダーを作成中です.

というのはほんとはRedBootをあてにしていたのだけど,RedBootがC++で書いてあって,C++のクロスコンパイラ(g++)がうまくビルドできなかったから.どうもライブラリがらみでビルドエラーになっているらしく,newlib入れたりとかいろいろ試してみたのだけどダメで,ていうかこの様子だと,ぼくの環境で頑張ってg++をビルドできたとしても,ユーザの個々の環境できちんとビルドできるかとっても不安なので,いっそブートローダーも自作してしまおうと判断.ブートローダーも自前で用意すれば融通も効くし,それはそれでウリになるし.

まあ組み込みOS作るなら,ブートローダーくらい自作しないとねえ,って思いもある.ブートローダーも作ってしまえば,ほんとの意味で「最初から全部作ってます」って言えるし.

今回も思ったことだけど,組み込みOSって,興味のある人はけっこういると思う.作ってみたいという人もけっこういる.しかしたいていの場合,作ってみたいけどいったい何をすれば作れるのか,何を勉強すれば作れるようになるのかわからない,ということがほとんどだと思う.

KOZOSがそーいうためのサンプルというか雛型になれるようになればなあ,と思う.

実際,組み込みOSを自分で作ろうとするといろんな知識が必要だ.コンピュータのスタートアップの知識,CPUの知識,デバイス操作の知識,割り込み,リンカスクリプト,アセンブラの読み書き,ELF形式,クロス開発環境,スタックとかのメモリまわり,テキスト領域とかデータ領域とかBSSとか,スレッドプログラミングなど,思いつくだけでもいっぱいある.教科書が無いような分野もいっぱいある.

まあ極端に言ってしまうと,これらの知識がひとつでも欠けていたら,OSはひとりでは作れない(別の言いかたをすると,グループでやるなら誰かひとりが知っていればいいし,知らないならできあいのものをどっかから持ってきてもいいし,OS自作するとこれらの知識がすべて身についてとってもお得).しかしそれらの情報が一箇所にまとまっている場所は無い.このへんの現状をなんとかしていきたいなあ,と思う.