eCos/RedBoot を秋月 H8/3068ネットワークマイコンボードに載せる

思い立ったのでページを分けました。RedBoot全般の解説にしたいと思いますが、多分無理です。
このドキュメントは古くなってます。 最新はeCos/RedBoot for H8/300 Projectにあります。

注意事項

動かすまで&実際に使うのはそれなりに大変です。H8/OSに不満の無い人は、 あえて手を出さないほうが無難です。


必要な機能

標準仕様でも一応動きますが、それなりに使うのであれば、以下の部分を改造してください。

バイナリの作り方

開発環境はlinuxです。Windowsでも(Cygwinを使えば)同じことができると思いますが、 試してないので保証できません。
手順は、
  1. h8300-hitachi-elf環境の構築。
  2. eCos/RedBoot H8/300のソースパッケージを作る。
  3. コンフィグレーションを生成。
  4. ターゲットライブラリを生成。
  5. ビルドする。
  6. 動かす。
という流れになります。
詳しいことが知りたい場合は、RedBootのドキュメントを読んでください。

h8300-hitachi-elf環境の構築

eCos/RedBoot H8/300のソースパッケージを作る

eCos/RedBoot for H8/300を、参照してください。

コンフィグレーションの生成

$ ecosconfig new aki3068net redboot
で、ecos.eccに基本的なコンフィグレーション情報が生成されます。
ネットワークを使う場合は、それ用のパッケージを追加します。
$ ecosconfig add CYGPKG_IO_ETH_DRIVERS
$ ecosconfig add CYGPKG_DEVS_ETH_NS_DP83902A
このままだと、ワークエリアがCPU内蔵のメモリに収まらないので、 コンフィグレーション情報を修正します。 メモリ使用量に関係するのは、以下の3箇所です。 調節して、うまくおさまるようにしてください。
ただし、ネットワークを使う場合は、CPU内蔵RAMは使わないので、 あまり気にする必要はありません。
その他、環境・好みに合わせて変更する必要があるのは、 という所でしょう。最後はH8/300固有ですが、他のCPUも同じような項目があるはずです。
変更方法は、ecos.eccの該当部分にあるuservalueを適当に修正してください。
Windows環境で作る場合は、Configuration Toolで にすれば作れると思います(多分)。使ったことがないので、よく分かりません

ターゲットライブラリの生成。

$ ecosconfig tree
で、コンパイルできる環境が生成されます。
ecos.eccを間違えた場合はエラーになるので、修正してやり直してください。
Windows環境は…マニュアルを読んでください。

ビルド

ごく普通に、
$ make
です。
RAMがあふれた場合はエラーになるので、 コンフィグレーションの修正からやり直してください。
ヘッダを直して、メイクしなおそうなどと言う手抜きは止めたほうが無難です。
成功すると、install/bin/redboot.elfが出来ます。 objcopyで適当なフォーマットに直してください。

動かす

ごく普通にROMに書き込めば動きます。
適当なターミナルプログラムを用意してください。私はminicomを使っています。
設定は、38400bps b8s1pnです。変更した場合は、それに合わせてください。
うまくいくと、起動メッセージとプロンプトがでます。

RedBoot(tm) bootstrap and debug environment [ROM]                                      
Non-certified release, version UNKNOWN - built 23:06:35, Apr  9 2002                   
                                                                                       
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.                                          
                                                                                       
RAM: 0x00400000-0x00600000, 0x00400000-0x00600000 available
RedBoot>
ネットワークを使う場合は、以下のサーバーが必要です。 ネットワークありでも、シリアル側は生きているので、 最初のうちはつないでおきましょう。
tcp 9000が、コンソールのポートです。telnetで接続して使います。

'help'でコマンドの一覧が帰ってくるので、使い方はそれを見てください。 キャッシュ制御コマンドがありますが、当然ながらH8/300Hは対応していません。
bash(のemacsモード)と同じ操作で、ヒストリ操作と行編集が出来ます。 ただのブートローダーにそんなものがいるのかどうかがかなり疑問ですが。

基本的には、
  1. loadで実行するプログラムを読み込み。
  2. goで実行。
を覚えておけば間に合うと思います。

その他

その他+技術的なお話しです。

割り込みの使い方

RedBootでロードしたプログラムで、割り込みを使う方法です。
ROMに焼いた場合、ベクタテーブルはRedBoot(と言うかeCos)が押さえてしまうので、 そのままでは割り込みが使えなくなります。
これでは使い物にならないので(当初の目的を果たせない)、 フック出来るようにしてあります。
割り込みが入った場合、0xffbf20からのテーブルに飛んでいくので、 そこからさらに目的の場所へジャンプさせてください。
packages/hal/h8300/arch/current/src/vector.Sに、 そのためのコードが入っているので、よくわからない場合は、参照してください。

RAM上で動かす

RedBootはRAM上で動かすこともできます。
CYG_HAL_STARTUPの値をRAMにしてビルドするとRAMで動く版になります。 デバッグするときぐらいしか使いみちがなさそうですが。
RedBootは割り込みを使わないので、特に注意することはありません。 読み込んだら、先頭アドレスから実行すると動きます。
ちなみに、eCosカーネルは割り込みが必要なので、単純にロードするだけでは 動かすことはできません。

diag_led

RedBootは、診断用にLEDを制御する機能があります。
で、aki3068netターゲットは、PA0に接続するようになっています。
それ以外のところを使いたい場合は、 package/hal/h8300/aki3068net/current/src/hal_diag.cの hal_diag_led_on/hal_diag_led_offを修正してください。

リンクはご自由に
Yosinori Sato
戻る