ちょっと時間ができたので、KOZOSのarduinoへの移植のためにarduinoの調査を進めている。
以下、自分のメモがてら書いておこう。
まずarduinoはブートローダーを持っていて、これは普通のHEXファイルをブートできるようなので、gccとかでビルドしたファームをブートすることも可能なようだ。avrdudeというツールでできるらしい。
作成したスケッチは、IDEからavrdudeが起動され、フラッシュROMに書き込まれる。このためいったん電源を切っても、ダウンロードしたスケッチは残っているので起動できる。ただスケッチのソースをビルドして書き込み用のHEXファイルをIDEで作成する際に、HEXファイルがどこのディレクトリに作成されるのかが不明...ビルド後のファームウエアを解析してメモリマッピングとか調査したいとこなんだけど、誰か場所知ってたら教えて。
ブートローダーのソースコードはarduinoのサイトで参照することができるが、arduinoのIDEをダウンロードして展開すると、そこにソースも含まれているのでそれを参考にできる。非常に簡単なソースコードだし、シリアル送受信も持っているので、これはとりあえずのとっかかりを作るためのサンプルになる。
ブートローダーを上書きしてしまうと、当然だがarduinoのIDEからの利用ができなくなる。ROMライタは秋月で4000円くらいで売られているものを利用できそうだ。arduinoのIDEにブートローダーの書き込みメニューがあるので、IDEからブートローダーを書き込むことができそうだ。ブートローダーのHEXファイルはIDEに付属しているみたい。ROMライタ無しでも回路作ればフラッシュROM書き込みできるようなのだが、いろいろ頑張る必要がありそうなので、はじめはまあ無難にROMライタ使ったほうがいいだろう。
なのでKOZOSの移植では、ブートローダーから自作するか、ブートローダーはarduinoのものをそのまま使ってOSだけ自作する、という2通りの方法がある。開発はいつもどおりクロスのgccでできそうだ。
ブートローダーから自作してもいいけどROMライタが必要になってしまって「なるべく安価なターゲットで」というKOZOSのポリシーとしては都合が悪い。でもOSだけの自作だと、標準のブートローダーになにかと縛られてめんどくさいのと、AVRはRAMがとても少ないのでROM上で動作させることになりそうなのだけど、ブートローダーを自作してライブラリ関係はブートローダーにBIOSのように持たせてしまえば、OS部分はコンパクトにできてRAM動作もできるんでないかなーという思惑もある。
ちなみにarduinoはハード+開発環境でarduinoなので、このようにIDEのスケッチを利用しない場合には、「arduino上で動作するOS」というのはちょっとおかしいだろう。「arduino用のマイコンボード上で動作するOS」というのが正しいだろう。
arduinoの内部構造などに関しては、千秋ゼミ で詳しく説明してある。ここはとても参考になっています。この場を借りて感謝いたします。
雑感だが、arduinoは非常にツール類が充実していてとても便利で、初心者向けということを非常によく考えられていると思う。それも、開発環境だけでなく、初心者向けということを総合的に考えてあるように思う(ボードが安いとか、回路図も公開とか)。
で、それはすばらしいことなのだが、ただその反面、それらのツールを使うのが前提の説明しかなく、内部構造を知りたいとかツールから離れてなんかやりたい(ぼくのように、OSを作りたいとか)というための資料が少ないなあ、と思う。まあだからよくないということではなく、だから自分がそーいう資料を書かなきゃならんなあっていうことなのだが。