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

ここのところOSC関西OSC名古屋に出展したが,やっぱし実機で動いているとインパクトあるので,ボードコンピュータへの移植を進めたいなあと思っていたのだがちょっと時間がとれたので進めてみた.ようやく第一段階にたどりついた感じ.

まずはターゲットボードの選定なのだけど,いろいろ探したのだけど,秋月電子H8/3069Fネット対応マイコンLANボード(完成品)というのに決めた.理由は以下.
  • なんといっても安い.(完成品だと3750円,キットだと3400円.これなら中学生や高校生でも買える)
  • 完成品の形で売っていて,シリアルコネクタが実装済みなので,そのまま使える(半田づけが完全に不要).(もちろん,キットで買って自分で組み立てれば安く済む)
  • フラッシュ書き換え回路が実装されているので,ROMライタなどを使わずにシリアル経由でフラッシュROMを書き換えられる.(フラッシュをとばしても安心)
  • H8は巷に書籍や資料がたくさんある.日本語資料も豊富.(これは,中学生にはとても嬉しいはずだ.英語資料だと中学英語の知識で読めるかどうか微妙なので)
  • 内蔵ROM,内蔵RAMの容量がそれなりにある(ROM512KB,RAM16KB).H8/3048だとRAMが4KBでいろいろやるにはちょっと不安.
ちなみに電源アダプタは別売りなので,5Vのやつを一緒に買う必要があります.これは秋葉原の秋月の店舗で買うなら,適当なのを一緒に買いましょう.

買ってから気がついたのだけど,付属のCD-ROMにフラッシュROM書き換えソフトがついているのだけど,これがCのソースで配布されていて,FreeBSDでもあっさりコンパイルできて動作した.なのでWindowsに頼らずに,完全にFreeBSD上で開発ができます(これはぼくにはとても嬉しい).

ちなみに秋月でもうひとつ,SH2の似たようなボードがあってそっちも候補だったのだけど,フラッシュROM書き換えソフトがWindows用なのでそれを使わないとならない.まあブートローダーだけ焼いてしまえばあとはOS開発では使うことはないのだけど,ちょっとイマイチではある.(実はそのSH2のボードも一緒に買ったのだけど,最終的に上記の理由が決定打になってH8ボードをターゲットに決めた)

で,まずはクロスビルド環境の作成なのだけど,まあこれは付属のCD-ROMにtoolchainが一式が入っているのだけど,当然ながらWindows用かLinux用になってしまう.やっぱしFreeBSD上で開発したいし,まあクロスコンパイラくらい自分で用意したいというのもあるので,いつもどおりbinutils+gccの組合せで,クロスビルド環境を構築する.

OSの起動には,ブートローダーをどこかから持ってきて動かして,OSはシリアル経由でダウンロードして動かす,という構成が開発には都合がいい.ブートローダーなのだけど,eCos付属のRedBootというのがH8に対応しているらしい.

ということで当初はRedBootを移植する予定だったのだけど,まあ結論から言っちゃうとRedBootは使わずに自前でブートローダーを作成することにしました.

なぜかというと,RedBootってC++で書いてある部分があるのでC++のクロスコンパイラが必要になる.しかしgccのクロスコンパイラ作成時にc++有効にすると,ライブラリがなんか必要になってしまうようで,newlib入れたりとかいろいろ試したのだけどうまくクロスコンパイラが作れなかったのよ.c++を外すと簡単にコンパイラが作れるのだが.

で,たとえこれでなんとかc++のクロスコンパイラを用意したところで,この文書を読んで試すひとが同じようにはまったりしてもつまらないし,なんかクロスコンパイラ作成にひと苦労ってものなんだかな~って気がするし,組み込みOS作るならブートローダーくらい自作しても面白いんじゃないかと思う(OSの動作だけでなく,ブートストラップの勉強にもなる)ので,自作してみることにしました.ちょうどCQ出版からブートローダーの本が出たことだし.(CQは,相変わらず良い本を出すね!みんな買いましょう!)

で,話がそれたけど,まずはクロスビルド環境の構築なのだけど,H8用のクロスのbinutilsとgccは以下で構築できた.ちなみに環境はFreeBSD-6.2ね.

■ binutils-2.19 をインストール

% ./configure --target=h8300-elf --prefix=/usr/local --disable-nls
% gmake

# gmake install



■ gcc-3.4.6 をインストール

% cd gcc-3.4.6
% setenv SHELL /usr/local/bin/bash (シェルがbash以外の場合)
% ./configure --target=h8300-elf --prefix=/usr/local --disable-nls --disable-threads --disable-shared --enable-languages=c
% gmake

# setenv SHELL /usr/local/bin/bash
# gmake install

あとフラッシュROM書き換え用のアプリなのだけど,h8write というのがCD-ROMに付属しているのだけど,これはネット上のOpen SH/H8 writerで配布されていて,しかもFreeBSDでも動くらしい.なのでいちおうネットのほうから最新版を持ってきて,以下の修正をしてビルドした.

% gcc h8write.c -o h8write

これであっさりビルド完了.

--- h8write.c~ Mon Aug 24 13:45:33 2009
+++ h8write.c Mon Aug 24 13:45:52 2009
@@ -1,6 +1,6 @@
-#define LINUX
+#undef LINUX
#undef Solaris
-#undef FreeBSD
+#define FreeBSD
#undef Win32
/*******************************************/
/* EEPROM write program to H8/300H */
@@ -42,7 +42,7 @@
#define RSLINE "/dev/ttyS0"
#endif
#ifdef FreeBSD
- #define RSLINE "/dev/cuaa0"
+ #define RSLINE "/dev/cuad0"
#endif
#ifdef Solaris
#define RSLINE "/dev/cua/b"

#define でプラットホームを指定しているけど,結局はシリアルデバイスをOSごとに指定しているだけだったりする.ちなみにFreeBSDではFreeBSD-4.x系は /dev/cuaaXだけど,FreeBSD-6.x 系は /dev/cuadX になるので注意.(でも実行時にデバイス指定できるみたいなので,そうして使うならこの修正もいらないかも)

これで,ビルド環境はそろった.あとは以下あたりを参考にして,てきとうにサンプルプログラムを書いてフラッシュに焼いて動作させてみる.上の「H8マイコンLANボードではじめる...」のほうに hello world のサンプル(h8_sci_rom.lzh)があるので, make.sh とか作ってとりあえずそれを動かしてみたらあっさり動いた.ただし上記サンプルでは,スタートアップでスタックポインタの設定がされていないので,ちょっと不気味ではある.(設定忘れだと思う)

ちなみにフラッシュへの焼き込みだけど,以下のようにする.
  1. プログラムのビルドに成功するとELF形式の実行形式が作成される.これをobjcopy を使ってモトローラSフォーマットに変換する.以下のような感じ.

    objcopy -O srec sample.elf sample.mot

  2. シリアルのストレートケーブル(シリアル延長ケーブル)でPCとボードを接続する.(クロスケーブルは不要)
  3. ディップスイッチを左からON,ON,OFF,ONにして起動.
  4. 作成した redboot.mot を h8write で焼く.

    h8write.exe -3069 -f20 redboot.mot

  5. 書き込み時に

    WARNING:This Line dosen't start with"S".
    Address Size seems wrong

    とかいうワーニングが出てたけど successed と言われたので,とりあえず気にしない.
  6. 以下のようにしてcuとかで38400bpsで接続する.

    # cu -s 38400 -l /dev/cuad0

  7. ディップスイッチを左からON,OFF,ON,OFFにしてリセットすることで,プログラムが起動する.リセットボタンを押すたびに hello world が表示される.
注意として,cuが起動しっぱなしで繋がったままだと,h8write で新たに書き込もうとしても書き込みできないので注意.h8write で書き込む際にはcuを切ること(シリアルがcuに占有されるので当然なのだが,ぼくはこれでけっこうハマった...).ちなみにcuは「~」「.」を押すことで切れます.

ちなみにCD-ROMにH8/OSというOSが付属していて,プログラムをメモリ上にロードして実行する機能がある.さらにputというコマンドがCD-ROMに付属していて,FreeBSDにも対応しているみたい.(h8writeと同様に,先頭にFreeBSD用の#defineがある)

ということでH8/OSをフラッシュに焼けばブートローダーとして使えて,putでKOZOSを送って実行する,ということができそう.まあでもネタとして面白いので,ブートローダー自作しようかとは思ってはいる.

で,まあとりあえず hello world くらいは全部自分で書いてみたいのと,上記サンプルプログラムはグローバル変数の書き込みができないはずなので,hello world を自分でスクラッチで書いてみた.以下のような感じ.

以下の考慮をしてある.
  • リンカスクリプトを自前で用意.
    • リンカスクリプトに関しては,付属のCD-ROMにあるH8/OSで使われているものを 流用できて,上記サンプルもそれを利用しているみたいなのだが,以下で説明する ように VADDR と LADDR を別にする必要があるのでそのままでは使えない.なので せっかくなので自分で書いてみた.
  • グローバル変数の書き込みに対応.
    • 上記サンプルはROM上で動作する前提なので,グローバル変数もROMに配置されて しまっていて書き込みできない(はずだ).なのでグローバル変数の初期値はROM 上に持って,起動時にRAM上にコピーしてそっちを使うように修正. (このためグローバル変数に関しては VADDR ≠ LADDR になるので, リンカスクリプトで工夫している) (グローバル変数のVADDRやLADDRが期待通りに配置されているかどうかは, readelf や逆アセンブル結果を参照して確認した)
  • スタートアップでスタックポインタを設定.
  • 割り込みベクタテーブルをリンカスクリプト側で作成せず,配列として定義. (このほうが一般の人は修正しやすいんではないかな,と)
  • ビルド用に make.sh を用意.(これは PowerPC で使ったやつを適当に修正して 利用)
  • シリアル関連とかをライブラリ化してソースコードを整理.
まあこんなところかな.

ビルドの方法は簡単で,make.sh というスクリプトを用意してあるので,以下のようにするだけです.PowerPCのと同じ感じ.

% ./make.sh clean
% ./make.sh
% ./make.sh image

./make.sh image することで,sample.mot が作成されます.で,スーパーユーザになって

# ./make.sh write

で,h8write を起動してフラッシュに書き込みます.シリアルは9600bpsで接続.

ちなみに以下が実行結果.グローバル変数の書き換えもばっちしうまくできてるみたい.

teapot# cu -l /dev/cuad0
Connected
Hello World! 10 1234 0 1 1 10
Hello World! 10 1234 0 1 1 10
Hello World! 10 1234 0 1 1 10

AD

キムチのしゃぶしゃぶ

テーマ:

夏だけど、鍋だ。


鍋をするときにぼくがまず考えるのは、買出しとか準備とかが楽で簡単で、そしておいしいことだ。そういった点で、キムチ鍋を越える鍋はそうそう無いと思う。


まず、つけダレがいらない。何を入れてもたいていおいしい。肉少なめでも野菜だけでもけっこう満足できるのでヘルシーで安上がり(実際、安く済む)、作り方が簡単でだれでも作れる、どう作ってもまず失敗しない、うーんすばらしい鍋だ。(つけダレがいらないし簡単なので、花見とかキャンプとかでもおすすめです)


で、最近好きなのがキムチのしゃぶしゃぶだ。とは言ってもぼくが勝手にやっているオリジナル鍋なのだけど、以下のような感じだ。


・まず、鍋にお湯を張ってわかす。
・キムチを軽くゆがいて、しゃぶしゃぶ状態で食する。
・キムチをゆがいているうちに、キムチエキスが鍋に溶け出してキムチ鍋になるので、あとはてきとうに具財を入れてキムチ鍋にして食する。


キムチってそのまま食べるとちょっとしょっぱくて塩分取りすぎになっちゃうかなーと思うので、ゆがくことでまわりのキムチ成分を落として、うまみはそのままにシャキシャキした白菜の歯ごたえを楽しむことができます。白菜の芯の部分がシャキシャキしてておすすめ。シャキシャキ感を楽しむために、あまりゆでないこと。あくまでしゃぶしゃぶで。


「キムチ鍋のもと」は、はっきり言って要りません。不要です。ていうかキムチ鍋にキムチ鍋のもとを入れると、しょっぱすぎると思う。毎回同じ味になってつまらないし、キムチだけでいきましょう。ぜったいにキムチだけのほうがうまいです(たとえそれで味が薄いとしても)。むしろキムチのもとに頼らずに、スーパーで売ってるいろんなキムチを試すほうが、やってて楽しいです(安くてうまいのがないか、探す楽しみがあります)。キムチ鍋のもとを買うお金は、そのぶんキムチを買うほうに使いましょう。


ただキムチはそれなりに高いものにしたほうが無難かも。甘みのあるようなやつだとちょっと微妙。おすすめは以前ブログに書いたように、しばらくほっといて酸っぱくなったキムチを使うことで、これがいいかんじで酸っぱくなってれば、もとがどんなキムチでもOKです。もとが甘みのあるキムチでも、これならぜんぜんOK.方法は簡単、冷蔵庫で1週間~1ヶ月置いておくだけです。(以前は室内放置とも書いたけど、常温だとちょっとアンモニア臭くなって、これって食っても大丈夫なのかと不安になるので、初心者は止めたほうがいいでしょう。私はそれでもよろこんで食ってますが)


肉は、あまり入れなくても大丈夫です。せっかくなのでヘルシーにいきましょう。肉を買うお金は、まずはキムチにまわしましょう。ものたりないというひとは、まずは豆腐を入れて、肉は少なめにするとヘルシーでしょう(豆腐でもけっこう満足できます)。それでもものたりなければ、厚揚げを入れてみましょう。肉を入れるなら、豚肉か鶏肉かな。牛は合いません。鴨肉もおすすめ。うまいよ。


基本的には野菜を楽しむ鍋です。で、野菜は何をいれてもおいしいのだけど、まずはホウレンソウがおすすめ。豚肉にあうし、ゆでたての緑色のホウレンソウってとにかくうまいのよ。あと春菊とか、小松菜とか、緑色で味の濃い野菜がおすすめ。チンゲンサイとかもいいよ。基本は茹でたてて、色が青いうちに食べること。シャキシャキの状態で食べること。くたくたになるまで煮るとふつうの鍋になっちゃうし、味の濃い野菜だと、その味が鍋に出てしまうので。


ゆでたての野菜って、ホント、うまいよ。そして目の前で自分の好みの状態にゆでた、ゆでたての野菜をそのまま食べられる料理は、鍋だけです(だから鍋はすばらしい)。お店の料理はお客の好みの最大公約数の状態にゆでられるわけだし(まあホントの高級店は、お客の個々に合わせて料理するっていうけどね)、厳密にはゆでたてのそのままの状態では食べられないし、これはどんな高級料理もかないません(そりゃそうだ、目の前で自分で作ってるんだから)。ゆでたてのきれいな緑色の葉っぱとか、しゃきしゃきの茎とか、ホント、うまい。


野菜はスーパーに行って、今日はこれを入れてみようみたいな感じで目に付いたものをてきとうに入れてみると、あーこれはこんな味なんだなーといろいろ楽しめます。モロヘイヤとかあしたばとかもやってみると、けっこうよかったりします。また野菜も部位によってぜんぜん味が違ったりして、これも発見があって楽しめます(私はこれで、ホウレンソウの茎の部分と根元の部分のうまさに目覚めました)。この鍋をやる前提でスーパーに買出しに行くと、普段目がいっていない野菜の種類の多さに驚くことができます。(野菜はほんとうに何を入れてもたいてい大丈夫なので、選ぶ楽しみと工夫する楽しみとチャレンジする楽しみと、失敗する楽しみがあります。失敗するのも楽しいよ!)


こないだチャレンジしてけっこうよかったのが、みょうが。しゃきしゃきしてて味も濃くてとってもうまい。鍋にみょうがって普通はありえないけど、こーいうのを試せるのは、大きな楽しみだ。いろいろ試すのはホントおすすめ。

豆も入れるととってもうまい。豆は、ほんとにおすすめ。枝豆とかの剥き身のやつとかだと楽です。あといろんな豆のゆでたのの詰め合わせみたいのをスーパーで売ってたりするけど、そーいうのもおすすめ。ポリポリしてうまいよ。さやつきインゲンをサヤごととかね。(もちろん失敗もあるが、工夫すればうまくなったりやっぱりダメだったりで、それはそれで楽しめる)


キノコ類はなんでもいいけど、けっこうダークホースでうまいのが、なめこ。鍋にはあんまりいれないキノコだけど、これがいれるとひじょーにうまい。切らなくていいので準備も楽。なべになめこって聞いただけでえーそれって大丈夫なの?と思いそうだけど、この鍋はどんなものでもたいてい、大丈夫です。恐れずにまずは入れてみましょう。(ダメなら入れるのをやめるだけ)


魚介は。。。あまり入れたことは無いです。うーん入れても鍋の味に負けてしまうような気がするなあ。。。入れるなら、イカとかエビとかかしら。ゲソとかならうまいかも。マグロとかでもいけるかも。


あーあとアスパラはうまいのだけど、ブロッコリーはちょっと微妙だったなあ。。。ぼくはどっちも好きなので、絶対いけると思ったのだけど、ブロッコリーはなんつーか、飽きます。まあでもアスパラもブロッコリーも、うまいです(ブロッコリーは飽きるけど)。ゆでたてできれいな緑色のときにそのまま上げて食べるのがたまらないです。ホント、ゆでたてってうまいよ。(今思ったけど、とうもろこしとか案外いいかもね。ゆでたてで)


セロリは期待してたのだけど、微妙だったかな。セロリはむしろ前に書いた「すっぱ辛鍋」に合うかなあ。エスニックな感じがして。


たとえて言うなら、あれだ。バーベキューで焼きたいものを思いついたまま焼いてみる感じ(チーズとか、クリームパンとか、マシュマロとか)。失敗だったり精巧だったり、失敗でも焼き加減によって別の味になったり。あれが、部屋で楽しめます。


思いつくままてきとーに書いちゃったけど、ぼくは鍋ってけっこう好きなので、夏でもやります。食材を選ぶ楽しみがあっていいよ。冬になると鍋セットとか鍋用カット野菜とかスーパーで売ってるけど、やっぱし自分で食材選んで、失敗したり成功したりするのが楽しいと思います。自分で選ぶと失敗も多いけど、新たな発見がすごくたくさんあって、ホント、楽しめます。おすすめ。


鍋というと失敗しないように保守的にいく場合も多いけど、楽しむならばチャレンジングにいきましょう!そのほうが楽しいよ!失敗も楽しいよ!失敗大好き!(マゾか!?)


AD
えーとH8への移植作業だけど,移植準備としてFreeBSDでの開発環境を構築して,とりあえずサンプルプログラム(hello world)をビルドして動作が確認できた.あっさり動いてちょっと不気味.

クロス開発環境はすべてFreeBSDで構築できた.

ターゲット:AKI-H8/3069Fネット対応マイコンLANボード(秋月電子)
アセンブラ,コンパイラなど:FreeBSD上でbinutils, gccをクロスビルドして利用
フラッシュROM書き換え:h8writeをFreeBSD用に数行修正し,ビルドして利用

ちなみにh8writeの修正だけど,ソース(h8write.c)の先頭で#define FreeBSDのように修正して,あと利用するデバイスを/dev/cuaa0から/dev/cuad0にするだけ(FreeBSD-6.xの場合の修正.FreeBSD-4.xの場合は/dev/cuaa0のままでよい).

これで完全にWindowsに頼らずに開発ができます.これってすげー大事なことだと思うんだけど,そんなんのって僕だけ?

まあWindowsはともかくとしても,開発環境を開発者が好きに選べるというのはすげー大切だと思う.Windows上で統合開発環境使いたいひともいれば,UNIX上でemacsやmakeを使いたいひともいるわけだし.

あと,実はボード付属のCD-ROMに「H8/OS」というOSが付属していて,プログラムをメモリ上にロードして実行する機能を持っている.さらにputというコマンドがCD-ROMに付属していて,ソースも添付でFreeBSDへの移植は簡単そう.(h8writeと同様に,先頭にFreeBSD用の#defineがある)

ということでH8/OSをフラッシュに焼けばブートローダーとして使えて,putでKOZOSを送って実行する,ということができそうなので,ブートローダーの自作は必ずしも必須ではなさそうだ.(まあでもネタとして面白いので,ブートローダー自作しようかとは思ってはいるが)

あと秋月のボードのいいところだけど,自作OSを作るターゲットとしては,以下がいいなあと思った.

■ フラッシュROM書き換え回路を持っているので,フラッシュをとばしても個人レベルで書き換えが可能

通常はフラッシュ書き換えのプログラム(モニタ)をフラッシュ上に持っているのが普通だと思うのだが,それだとフラッシュとばしたり,へんなものを焼いてしまうと書き換え不能になるので,恐くて現実的には結局書き換えられんのよ.とばしたらICE使うしか手段が無くなったりするし.(ROMライタがあればだいぶマシだけど)

なので(ブートローダーのような)フラッシュROM上で動作するプログラムを個人レベルで書こうとしたら,このような機能はすげー重宝される.ICEなんて個人レベルではとてもとても買えないしねえ(これを仕事にしているプロなら別だけど,ホビープログラミングという遊びのために,このためだけにはとても買えない).まあもっともはじめから高級なモニタが乗ってたら,そもそも今回みたいにブートローダーから作ろうなんてことにはならないのだけど...

■ キットと完成品の両方の形態で販売

まあお金を節約したいならばキットなのだけど,数千円の違いならば,時間の貴重な社会人は完成品の形で買ってすぐに使いたいという人も多いだろう.半田づけとかあまりやりたくないだろうし(ぼくがそう).

こーいうこというと「自分が開発するボードを半田づけからきちんと自分でするのが基本では?」とかいうひとがいそうだけど(実際,言われたことがある),ぼくのやりたいのはOS開発であって回路づくりではないのよ.まあ学生さんとかならば時間もあるだろうし,半田づけからやってもいいとは思うけどね.

なのでこのボードのように,組み立て済みで売っていてくれるのはとてもありがたい.まあそれがこのボードの選択理由のひとつなのだけど.(KOZOSをみんなにいじってもらうということを考えると,いまさら半田づけなんてめんどくさいという人も多いだろうから,これってけっこう大事なことだと思う)


AD

H8開発環境

テーマ:
名古屋でちょっと疲れたので,今日は会社を休んでいる.で,H8への移植準備を進めている.

まずはクロス開発環境だけど,FreeBSD上で全部できそうだ.フラッシュへの書き込みツールに
h8writeというのがあるのだけど,これもFreeBSDで動くみたい.

とりあえずクロスコンパイラとh8writeのビルドはできた.サンプルプログラムのビルドにもあっさり成功.あとはいよいよ動かしてみるか.

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

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自作するとこれらの知識がすべて身についてとってもお得).しかしそれらの情報が一箇所にまとまっている場所は無い.このへんの現状をなんとかしていきたいなあ,と思う.