(TFTP対応第1回)TFTPブート対応してみよう

2012/04/03

あなたは 人目のお客様です.

「(H8移植編その2第18回)TFTPでファイル転送」で 書いたようにTFTPでのファイル転送をOS側に実装したのだが,もともとブートローダー のTFTPブート対応という話があってそのためにひとまずOSに実装した,という ものだった.

なのでいよいよブートローダー側にKOZOSのTCP/IPスタックを移植して, TFTPブートに挑戦してみよう.ただしブートローダーでは割り込みは利用したくない (割り込みはOS側で管理するものなので,ブートローダー側でも利用するのは ぼく的にはちょっとなんだかなあな気がするのだ).ということで既存の マルチタスク構成・割り込みベースの動作のTCP/IPスタックを, ポーリングベース・関数呼び出しベースの動作にうまく丸め込むような移植を 行いたい.

で,考えたやりかたは以下.

このように関数呼び出しベース&ポーリングベースの動作にすれば, タスク側はあまり改造せずにそのまま動作するはず.

ということで 「(H8移植編その2第18回)TFTPでファイル転送」 のソースコードをベースにして,TCP/IPスタックをOS側からブートローダーに 持ってきて実装した.

改造の内容は以下.

まあ詳しくは,OSのkozos.cと今回作成したkozos_single.cの差分を見てみると いいだろう.あと各タスクのメイン関数の改造の差分も参考になるだろう. なるべく変更点を少なくするような方向性で改造している.

いつもどおりビルドして h8write とかでフラッシュROMに書き込み, 起動するとこれもいつもどおりプロンプトが出力される.

で,この時点で icmp タスクとか httpd タスクとかも起動している. マイコンボードは 192.168.10.16 になっているので,PC側を192.168.10.1にして 192.168.10.16宛にアクセスするとpingに応答するしwebページにもアクセスできる.

さらにPCでtftpサーバを立ち上げてマイコンボードで「tftp」コマンドを実行すると, kozosというファイルを取りに行く.なのでPC側でOSをビルドして置いておくと tftpで取得する.さらに「run」コマンドを実行すると,tftp転送したモジュールを 実行する.

実際やってみると問題なくモジュール転送し実行できる.うーん感動. まあ実際に動作させるまでにはいろいろデバッグしているのだが, 結果だけみるとあっさり移植できている.kozos_single.c による関数呼び出し& ポーリングベースの動作への移行がわりとすんなりできてて嬉しい.


メールは kozos(アットマーク)kozos.jp まで