Développer et télécharger des logiciels Open Source

Voir H8/3068ボードでの実行方法

Catégorie (Tag) arbre

déposer de l'information

Catégorie (Tag)
root
nom de fichier
aki3068net.html
dernière mise à jour
2002-10-03 23:40
type
HTML
Editeur
佐藤 嘉則
description
秋月 H8/3068ネットワークマイコンボードを使ってeCos/RedBootを動かす方法の説明です
langue
Japonais
Traduire

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

H8/3069ボードでも動きます。適当に読み替えてください。

必要な機能

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

  • DRAMの増設
    CPU内蔵のRAMは、ほとんど余りません。
    DRAMのおまけが無かった場合は、相当品を増設してください。 (違う物を増設する時は、BSCの設定を合わせてください)
  • NICの割り込みライン追加(for 初回ロット)
    RedBootは割り込みを使いませんが、eCosカーネルを使う場合は割り込みが必要になります。
  • IDE I/F
    つなげば動かすことができます。 (要プログラム修正)

バイナリの作り方

gccが動く環境が必要です。
手順は、
  1. h8300-hitachi-elf環境の構築。
  2. eCos/RedBoot H8/300のソースパッケージを作る。
  3. コンフィグレーションを生成。
  4. ターゲットライブラリを生成。
  5. ビルドする。
  6. 動かす。
という流れになります。
詳しいことが知りたい場合は、RedBootのドキュメントを読んでください。

h8300-hitachi-elf環境の構築

プロジェクト文章 の h8300-elf toolchain を参照してください。

作り方

eCosのドキュメントを読んでください。実はよくわからない
ecosconfig以外のconfiguration toolは使ったことがないので、 うまくいかない場合はecosconfigを使ってください。
H8/3068ボード用にターゲットを二つ定義してあるので、好きな方を使ってください。
標準aki3068net
RedBoot IDEサポートaki3068ide
適当にコンフィグレーションしてください。
ドライバは、
  • Network (DP83902A)
  • 内蔵SCI
  • 内蔵WDT
が使えます。

その他

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

割り込みの使い方

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

RAM上で動かす

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

IDEサポート

標準の接続方法がないので、サンプルになっています(=テストしてません)

以下の部分を変更してください。

  1. ecos.eccの
    • CYGHWR_HAL_IDE_BUSWIDTH
    • CYGHWR_HAL_IDE_COMMAND
    • CYGHWR_HAL_IDE_CONTROL
    を設定してください。
  2. packages/hal/h8300/aki3068ide/current/include/platform.inc
    packages/hal/h8300/aki3068ide/current/src/plf_ide.c
    を、修正してください。

他はIDE無しと同じです。

diag_led

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

おまけ RedBoot

いつもやってる方法です。参考まで

ソースの生成

適当なディレクトリで、
$ ecosconfig new aki3068net redboot
で、基本部分を作ります。 ネットワークを使う場合は、それ用のパッケージを追加します。
$ ecosconfig add CYGPKG_IO_ETH_DRIVERS
$ ecosconfig add CYGPKG_DEVS_ETH_NS_DP83902A
GDB stubを使う場合は、sutbパッケージを追加します。
$ ecosconfig add CYGPKG_CYGMON
ecos.eccを適当に修正します。メモリ使用量を押さえる場合は、 この辺を直してください。
  • 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を適当に修正してください。
他にもいくつかありますが、ecos.eccを見てください。
出来たら、
$ ecosconfig tree
で、ソースツリーができます。 当然ecos.eccが間違ってるとエラーになります。 直してからやり直してください。

ビルド

$ make
です。
エラーになったら、頑張って直してパッチを送ってください。
正常に終わった場合は、install/bin/redboot.elfが出来ているはずです。e ROMに焼く場合は、objcopyでsrecに変換してください。

動かす

ごく普通に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>
ネットワークを使う場合は、以下のサーバーが必要です。
  • TFTP -m TFTP でloadする場合。
  • HTTP -m HTTP でloadする場合。
用意出来るなら、BOOTPサーバーも用意しておいた方が便利です。
ネットワークありでも、シリアル側は生きているので、 最初のうちはつないでおきましょう。
tcp 9000が、コンソールのポートです。telnetで接続して使います。

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

基本的には、
  1. loadで実行するプログラムを読み込み。
  2. goで実行。
を覚えておけば間に合うと思います。
Yosinori Sato
Last modified: Thu Oct 3 23:39:01 JST 2002