uClinux for H8/300H を秋月のH8/3068ボードに乗せる


この文章は古くなってます
最新は、uClinux-H8 project Home にあります。
ようやく実機での起動を確認出来ました。長い道のりだった…。
今の所カニは遊んでる状態なので、 H8/3067のボードでもメモリを乗せれば動くと思います。
RTL8019ASがneドライバで認識出来るようになりました。
割り込みを使うので、改造が必要です。
ネットワークが動くようになりました。PINGに応答します。
つまらんことで悩んでいたので、時間がかかってしまいました。
記念(?)のスクリーンショット
uClinux for H8/300H
H8/300H Porting by Yoshinori Sato
Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne
Calibrating delay loop.. ok - 0.89 BogoMIPS
Memory available: 656k/1616k RAM, 0k/0k ROM (5472k kernel data, 406k code)
Swansea University Computer Society NET3.035 for Linux 2.0
NET3: Unix domain sockets 0.13 for Linux NET3.035.
Swansea University Computer Society TCP/IP for NET3.034
IP Protocols: ICMP, UDP, TCP
uClinux version 2.0.39.uc2 (ysato@vc6300cb1) (gcc version 2.95.3 20010315 (release)) 64 2002年 4月28日(日) 17T
Hitachi SCI driver version 0.01
hitachi-sci.c(1478): info=478962 num=0
ttySC0 at 0xffffb0 (irq = 52 - 55)
hitachi-sci.c(1478): info=478a66 num=1
ttySC1 at 0xffffb8 (irq = 56 - 59)
hitachi-sci.c(1478): info=478b6a num=2
ttySC2 at 0xffffc0 (irq = 60 - 63)
Ramdisk driver initialized : 16 ramdisks of 4096K size
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: 4C0000-5223FF (RO)
ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x200000: 00 02 cb xx xx xx
eth0: NE1000 found at 0x200000, using IRQ 17.
VFS: Mounted root (romfs filesystem) readonly.
init start
# 
BogoMipsが予想以上に低いです。1は越えると思ってたんですが。 というかタイマーの計算が間違ってるかも。
ということで、なんとか起動出来ましたというレベルです。

いるもの

次のものを用意してください。 メモリ以外は特に問題ないでしょう。
よくわからない人は、裏面のパターンに付けてください。 私のところは、それで動かしています。
ネットワークを使う場合は、RTL8019ASのINT4を、CPUのIRQnに入れてください。 番号は、カーネルコンフィグレーションで指定します。

ソース・バイナリ

CVSから取得してください。 uClinux-H8 project Homeから、たどれます。 コンパイル済みバイナリも置いておきます。容量の余裕が出来たので、 容量不足にならない限り残します。
linux.bin.gz ↑のコンフィグレーション

起動方法

ROMに焼けるサイズじゃないので、適当なローダーで外部のRAMに読み込んで、 そこから起動します。
ただし、CPUの制限により割り込みベクタを移動出来ないので、 割り込みがかかったときにカーネルの割込み処理を呼び出す機能が必要です。
この問題があるので、H8/OSから起動させることはできません。
日立の組み込みモニタは、割り込みの中継プログラムをはさむか、 割り込みまわりを合わせれば、動かせるはずです。 ダウンロードする時間が恐ろしいことになりそうですが。
私が使ったローダーは、ここにあります。
で、起動するための手順は、
  1. RS232Cで接続。サンプルのコンフィグレーションは38400BPS B8S1PNです。
  2. h'400000にロードする。
    650Kぐらいあります。終わるまで気長に待ってください。
  3. rootimageをh'4C0000h'4A0000にロードする。 メモリが不足気味なので、ずらしました。
  4. __startから実行する。
          $ h8300-hitachi-hms-nm linux|grep __start
          0040586e T __start
          
    です。

    いちいち調べるのが面倒なので、先頭から実行出来るようにしました。
    起動コマンドに、'console=/dev/ttyS1'を渡さないと SCI0がコンソールになります。注意してください。
うまくいけばメッセージが出てくるはずです。

その他

割り込みベクタの処理は、
  1. h'ffbf20以降にジャンプテーブルを作る。
  2. ベクタテーブルは、そのジャンプテーブルに向ける。
という方法で、疑似的に書き換えています。
ecos/packages/hal/h8300/arch/current/src/vectors.Sに実装例があります。
これとカーネルのソースを読めば、 何をやっているかはわかると思うんですが。
詳しいドキュメントは、現在作成中です。もう少し待ってください。

リンクはご自由に
Yoshinori Sato <qzb04471@nifty.ne.jp>
戻る