いままで雑誌記事とかで写真を撮ることはあったのだけど、まあてきとうにとってはいたのだが今回組み込みOS本を書くので、さすがにきれいな写真が撮りたいなあとおもって「撮影ボックス」なるものを買って使ってみた。


照明が直接当たらないようにするための半透明な箱で、オークションに出品するものの写真とか撮るのに使われたりするらしいのだけど、バッチリいいかんじで撮れた。


KOZOSのブログ-H8/3069Fマイコン・ボード


う~ん、いままで床の上で蛍光灯の光で撮っていたのとはぜんぜん違ってきれい。縮小したらバックにかすかに波模様が出てしまったが、これは縮小によるものなので実サイズの写真には波模様は出ていない。やっぱりちゃんとした道具を使うと違うねえ。



KOZOSですがさすがに書籍にするのに開発環境がFreeBSDだけというのはさびしいので,FedoraとWindowsXPで動作確認した.以下,注意する点のメモ.

これでFreeBSD,GNU/Linux,Windowsのどれでも開発できることになりました.う~ん,すばらしい.可能ならばubuntuも(たぶん大丈夫だとは思うが)確認して,実績どりしておきたいなあ.

(共通)

・マイコンボード付属のCD-ROMに添付されているクロスコンパイラでコンパイルするには,ソースを何箇所か修正する必要あり.(アセンブラの.type指定を削除するのと,Makefile修正と,乗算命令を利用しないための構造体のサイズ調整と,リンカスクリプトでELF指定を削除する修正)
・マイコンボード付属のクロスコンパイラはCOFF形式の実行ファイルを吐くので,利用できない.まあCOFFをELFに変換すればいいしブートローダーの作成には使えるのだけど,ソースコード修正も必要になってしまうし,OSはELFでないとブートローダーがロードできないので,いっそのことbinutilsとgccをクロスビルドしたほうがよいと思うのでそうする.
・USBシリアルアダプタだとh8writeやFDTでのフラッシュ書き込みがうまくいかないときがある.本体に初めからシリアルコネクタが付属しているPCを使った方が確実.(これでけっこうハマッた)
・XMODEMでの転送で,開始前のNAK送信の周期が短いとエラーになりやすい.っていうか必ずエラーになってしまう(開始前のNAKが,エラー通知のNAKとして解釈されてしまうようだ.なんかへんなプロトコル).なので間隔をもっと開ける必要あり.またXMODEMでの転送時は,loadコマンドを実行したらモタモタしてないでさっさと開始するようにする(ファイル選択に時間がかからないよう注意).これもけっこうハマッた.

(Fedora特有)

・Fedora含む多くのLinuxディストリビューションでは,ホストgccが入っていない.なのでプログラミング環境を追加インストールする必要がある.(Fedoraだとシステムメニューからマウスで選択するだけで簡単にインストールできる.binutilsとgccをインストールする必要あり)
・GNU makeとかも無ければ追加インストールする.
・端末アプリにはminicomが標準で入っているので,そのまま利用できる.使いかたは,初めに minicom -s で起動してセットアップして,次からは minicom -o で起動する.フロー制御をOFFにする必要あり.ファイル転送の設定はいじる必要無し.Ctrl-A, zでヘルプ.ファイル転送はminicomでできる.

(Windows特有)

・マイコンボード付属のCD-ROMのcygwin環境を期待していたがクロスコンパイラがCOFF形式を出力するのでダメ.まあ*.mot作成するだけならできるのだけど,binutilsとgccを自前でビルドすることにする.
・ホストgccやmakeが必要だが,付属CD-ROMのcygwinをインストールするとgccとかmakeとかがひととおり入ってくれるのでこれを利用すると楽.ビルド方法はFreeBSDと同じだが,binutilsは ./configure に --disable-werrorが必要だった.
・h8writeはCD-ROMに付属しているのと,cygwinに入っているのと,CD-ROMに付属しているソースから自分でビルドするのと,インターネット上からソースを持ってきてビルドする,という4通りの方法がとれる.まあ,どれでもいい.
・h8writeが嫌ならFDTが使える.いちおう,これで書き込みして起動できることは確認できた.

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


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


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

組込み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行ていどを追加していってる計算になるね.
(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

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

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

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

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

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

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

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