本家ホームページではすでに告知してますが、オープンソースカンファレンス2010 Tokyo/Spring に出展します。で、今回はセミナーもあります。「組込みOSを作ってみよう」というタイトルで、土曜の最後の時間のようです。興味のあるひとはぜひどうぞ!


セミナーの内容ですが、OSCだとたぶん組込みにそれほどなじみのないひととかも来ると思うので、組込み開発のおもしろさとか組込みOSの概要とか、まあ楽しさを伝えられるような内容にしたいなあ、と思っています。あとは、あ~OSって単純なものならこんなに簡単に作れるんだなあ、と思えるような内容にしたいですね。


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

組込みOS自作の書籍執筆中です.

前回,KOZOS/H8のコードを書籍用に整理しなおしたのだけど,もうちょっと整理して,さらに12回のステップに分けて自作していくという内容で,12回ぶんに分けてみた.参考までに公開します.

これからKOZOS/H8のソースを読むというのならば,こっちがいいと思います.読み方としては,以下ソースの第1回のコードから順に,前の回に対する差分を見るかたちで読んでいくといいでしょう.興味のあるかたはどうぞ.ちなみにライセンスはKL-01です.すべて秋月のLANコントローラ付きH8/3069Fボードで動作確認しています.(2010/01/17時点で,すべてのコードについて動作確認済み)12回の具体的な内容は,以下です.まずは「Hello World」を作るところから始めて,ブートローダー,OSというように,12ステップで徐々に作り上げていくという内容になっています.
  • 第1部 ブートローダーの作成
    • 第1回 ... フラッシュROMに書き込んで動作する「Hello World」を作成
    • 第2回 ... 各種ライブラリ関数を実装,数値出力ライブラリを実装
    • 第3回 ... 静的変数の書き換え対応
    • 第4回 ... XMODEMによるファイル転送
    • 第5回 ... ELF形式の解析を実装
    • 第6回 ... ブートローダーからRAM上にロードし実行する「Hello World」の作成
  • 第2部 OSの作成
    • 第7回 ... 割込み処理の実装
    • 第8回 ... スレッド動作を実装
    • 第9回 ... 優先度スケジューリング実装,スレッド制御システムコール追加
    • 第10回 ... メモリ管理を実装
    • 第11回 ... スレッド間通信を実装
    • 第12回 ... 割込みハンドラ実装,割込みベースで動作するコマンド応答プログラム実装
ちなみに全体のコード量は以下.ライセンス関連の文書を除いた,Makefileやリンカスクリプトやアセンブラ,動作確認用サンプルプログラムも含めた全体のコード量です.
ブートローダーOS合計追加量
第1回269---269269
第2回374---374105
第3回433---43359
第4回616---616183
第5回723---723107
第6回7314181149426
第7回8885651453304
第8回9059761881428
第9回90511942099218
第10回90513222227128
第11回90515322437210
第12回90518002705268
初回が269行から始まって,だんだん拡張していって最終的にブートローダーが905行,OSが1800行です.両方合わせても2705行だから,まあいいかんじなんではないかな.だいたい毎回平均して200行ていどを追加していってる計算になるね.
AD
(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

えー,ブログでも書いているけれど,組込みOS自作本を執筆中です.

で,書籍用にKOZOS/H8のソースコードを整理しなおしたので,参考までに公開してみます.これからKOZOS/H8のソースを読むというのならば,こっちのほうがいいかもしれません.書籍用ということで,かなりばっさりと機能限定して,あと無駄を省いてシンプル・コンパクトにしています.

また,全体的に見直して,きれいに整理しなおしました.かなりごっそりと書き換えています.単語の意味とかも整理・統一化しています.

あと,従来はシリアルの送信割込みを見ていなかったのですが(文字列送信時は,1文字ずつ文字出力がはけるのをポーリングで監視していた),きちんと割込みを見て1文字ずつ送信するように書き換えました.これでよーやくまともに割込み処理をやっているということができるでしょう.

現状で,リンカスクリプトやアセンブラやMakefileもすべてぜんぶ含めて,ブートローダーが945行,アプリケーション含めたOS全体が1828行です.うーん,いい感じにまとまった.

ただ以下のような部分があり,削ろうと思えばまだまだ削れそうです.たぶん本気で削れば,ブートローダーは800行程度,OSはアプリ含めて1500行を切るくらいにはできるでしょう.
  • 初心者用ということで,やたらとふんだんにコメントを入れてある.(普段なら「そーいうことはコメントでなくソースコードで伝えるべき」として,絶対に入れないような内容のコメントも敢えてガシガシ入れてある)
  • 初心者用ということで,わかりやすくするためにわざと冗長に書いている部分がいくつかある.
  • ブートローダーとOSで,ライブラリ関数などの共通コードは極力そのままにしてある(変更あると,書籍で説明しなければならなくなるので,OS側では使わない関数もそのまま残してある).このため,OS側では使わないライブラリ関数とかがいくつか残っている.
全体的に見直して整理しなおしたことで,組込みOSのエッセンスというか,要点がぎっちりといい感じでつまって濃縮されたコードになっています.実際,内容の密度は濃いと思います.(そのかわりエラー処理とかチェックとか移植性とか抽象化と階層化とかは,あまり本題でないということで,かなり省かれていますが)

うーん,自分で言うのもなんだけど,これ,結構いいかも.自分がOS勉強し始めたころにこーいうのがあったらホント良かったのにとしみじみ思う.
AD

校正終わった

テーマ:

別本のほうの校正を一気に終わらせてしまいたくて4日からやってたんだけど、よーやく終わった。

ガリガリの専門書だけあってチェックがたいへんでちょっときつかったなあ。

自分で書いた内容なんだけど、さすがに忘れてて内容読むのに一苦労。

まあでもなんとかなった。よかったよかった。

あー、づがれだ。


KOZOS改良中

テーマ:

ちょっと遅れてしまいましたが、あけましておめでとうございます。今年もよろしくお願いします。


組込みOS本のために、KOZOS/H8を改良中。出版向けにシンプルな構造にして、あときちゃない部分とかやっつけの部分とかをきれいに書き直しています。


まあせっかくなので、命名規則とかもきちんとして、型定義とかもきちんと行ってかっちょいいコードにしようかなと。学習向けなので、構造的にも組込みOSとしてオーソドックスなものに書き換えています。


ちょっと修正するくらいのキモチだったのだけど、けっこう修正点多くて苦戦してます。いやもう動作はしているので苦戦はしてないのだけれど、手間がかかっちゃってます。


あ、別の本のほうの校正も進めないと。。。完全に正月休み返上状態。このままいくと、リフレッシュ休暇も完全返上。まあ好きでやってることなのでいいのだけれど、リフレッシュになるのかしら?