就活がやっと終わったので再開。だけど...CANSATのスケジュールはかなり厳しい模様。学会が終わったら集中しないといけない。CANSATではCANを使って各部を繋ぐ構成にしようと発案したためか、マイコン周りを全部担当することに。どうにかしてソフトウェアの作りやすさも考えないといけない。
最近は携帯機器向けの高性能なマイコンが出回っているおかげで、海外ではGumsticのようなボードが手に入るようになった。 このクラスにもなれば、Linuxを動かしてソフトをつめば、ネットワークに繋いで遊べるのだろうけど...常にこんなハイスペックが欲しいわけではない。
とはいえOSは使いたい。そこでeCosのようなRTOSに目がいくのだが...一体どう開発したらよいのか分からない。自作ボードでOSを動かすとき、一体何を書けばよいのだろうか? 一応知識として「OSはハードウェアの差異を意識することなくソフトウェアを持ってこれる」ということは知っているので、それを基に考察し裏づけをしていきたい。
- eCosの提供してくれるもの
- eCosは、OSとしての機能(タスクの管理やコンテキストスイッチン グ等?)を提供してくれる。その一部はCPUに依存するので、アセンブリで書かれているものもある。eCosではこれをHAL(Hardware Abstraction Layer)と呼んでいる。疑問:OSが動くには最低でもタイマーの設定がいるはず。Redbootではシリアル通信も必要だったはず。ハードウェアの構成如何によって異なるので、移植に際してはいくつかコードを書かなくてはならないのだろうか?手を加えるべきコードに関する情報はどこにあるのだろうか?
- ファイルシステム?
- 最新のeCosでは、FATファイルシステムをサポートするようになった。 この場合も移植に際しては手を加える必要があるのだろう。 Flash、SDカード、RAMなど、ファイルシステムで使う記憶装置はハードウェアの構成に依存する。目的に応じて変えたいこともある。ファイルシステムのような「ミドルウェア」は、OSのハードウェアを抽象化する機能を使って記述され、足りない部分はユーザに記述させるのだろうか?
- アプリケーション開発
- 直接ハードウェアをいじらず、予め用意したOSやミドルウェアで機能を実現することになるはず。割り込みなども、直接触らないでOS経由で操作するはず。
- ミドルウェア開発
- プロトコルスタックやファイルシステムなど、アプリケーション開発で部品となる機能を提供するのがミドルウェアだったはず...これはハードウェアまたはOSの機能を使って記述することになるはず。ハードウェアの機能は抽象化されないといけないので、いくつかのハードウェア依存箇所を空白にして作るのだと思う。このハードウェア依存箇所もまた、OSの機能を使って記述されるべき?
- 移植
- OSもミドルウェアも、ハードウェアによって異なる部分と、共通の部分がある。ハードウェアによって異なる部分は最小化され、必要な機能をハードにあわせて書くだけで良いよう工夫されている?移植とは、この部分を記述することだと思う。