思い立ったのでページを分けました。RedBoot全般の解説にしたいと思いますが、多分無理です。
このドキュメントは古くなってます。
最新はeCos/RedBoot for H8/300 Projectにあります。
動かすまで&実際に使うのはそれなりに大変です。H8/OSに不満の無い人は、
あえて手を出さないほうが無難です。
必要な機能
標準仕様でも一応動きますが、それなりに使うのであれば、以下の部分を改造してください。
- メモリの増設
CPU内蔵のメモリは、ほとんど余りません。
プログラムは、増設したメモリに読ませないとほとんど使い物にならないと思います。
ネットワーク対応になったら、内蔵メモリが足りなくなる可能性もあります。
↑予想通り足りなくなりました。
- NICの割り込みライン追加
RedBootは割り込みを使いませんが、eCosカーネルを使う場合は割り込みが必要になります。
開発環境はlinuxです。Windowsでも(Cygwinを使えば)同じことができると思いますが、
試してないので保証できません。
手順は、
- h8300-hitachi-elf環境の構築。
- eCos/RedBoot H8/300のソースパッケージを作る。
- コンフィグレーションを生成。
- ターゲットライブラリを生成。
- ビルドする。
- 動かす。
という流れになります。
詳しいことが知りたい場合は、RedBootのドキュメントを読んでください。
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箇所です。
- CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
スタック領域のサイズです。本来は割り込み用のスタックですが、
RedBootは常にこのスタックを使ってます。
デフォルトで4kbyteも確保されているので、適当に減らします。
私は1024にしていますが、特に問題はありません。
- CYGNUM_REDBOOT_CMD_LINE_EDITING
コマンドラインヒストリの件数です。
- CYGPKG_REDBOOT_MAX_CMD_LINE
コマンドライン長の最大値です。
ヒストリのワークは、
CYGNUM_REDBOOT_CMD_LINE_EDITING×CYGPKG_REDBOOT_MAX_CMD_LINE
分確保されるので、まずはこっちを減らすべきでしょう。
デフォルトでは16件×256文字で、4kbyte取られてます。
調節して、うまくおさまるようにしてください。
ただし、ネットワークを使う場合は、CPU内蔵RAMは使わないので、
あまり気にする必要はありません。
その他、環境・好みに合わせて変更する必要があるのは、
- CYGDAT_REDBOOT_DEFAULT_IP_ADDR
IPアドレスを指定します。BOOTPが使えれば、そっちから取れます。
- CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS
RAMとして登録されていないところにロードする時、確認メッセージが出ます。
- CYG_HAL_STARTUP
ROM版、RAM版を切り替えます。
- CYGNUM_HAL_H8300_H8300H_SCI_BAUD_RATE
シリアル通信のボーレートを設定します。
という所でしょう。最後はH8/300固有ですが、他のCPUも同じような項目があるはずです。
変更方法は、ecos.eccの該当部分にあるuservalueを適当に修正してください。
Windows環境で作る場合は、Configuration Toolで
- HardwareをAkizuki H8/3068 Network board
- PackagesをRedBoot, the Red Hat bootstrap
にすれば作れると思います(多分)。使ったことがないので、よく分かりません
$ 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>
ネットワークを使う場合は、以下のサーバーが必要です。
- BOOTP IPアドレスをecos.eccで設定していない場合。
- TFTP -m TFTP でloadする場合。
ネットワークありでも、シリアル側は生きているので、
最初のうちはつないでおきましょう。
tcp 9000が、コンソールのポートです。telnetで接続して使います。
'help'でコマンドの一覧が帰ってくるので、使い方はそれを見てください。
キャッシュ制御コマンドがありますが、当然ながらH8/300Hは対応していません。
bash(のemacsモード)と同じ操作で、ヒストリ操作と行編集が出来ます。
ただのブートローダーにそんなものがいるのかどうかがかなり疑問ですが。
基本的には、
- loadで実行するプログラムを読み込み。
- 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を修正してください。
リンクはご自由に
戻る