☆egcs で H8300 のCross Compiler を作る

LastUpdate:04/03/1999 Rev.02

変更履歴:
04/03/1999 Rev.02:不具合点とその対策を追加。binutils-2.9.1-unoff-srec-relax-patch.gz の作成と公開。DDDを使ってみるを追加。
11/16/1998 Rev.01:公開

不具合点とその対策

細渕さんのWeb Page GNUによるAKI-H8のプログラム開発(http://www.tt.rim.or.jp/~hoso/H8/)に下記問題についての解決策が公開されています。FreeBSD上で環境構築されていますが、他のUNIXでも基本的に同じ方法で解決できます。
この他にも、日立のリモートモニタを使って GDB で実機リモートデバック出来るように する方法も公開されています。**必見です**
上記のパッチをまとめた物を ここ(binutils-2.9.1-unoff-srec-relax-patch.gz)[759 bytes] に置いていきますので、ご利用ください。 中身は、srecfix.diff.gz, gas-relax.diff.gz, ld-relax.diff.gz を binutils-2.9.1 に対し適用したものを、オリジナルと diff -u --recursive --new-file として差分を 抽出したものです。
このパッチは、
  1. binutils-2.9.1 を展開したディレクトリ (つまり ls すると binutils-2.9.1 が見える所)で
  2. zcat binutils-2.9.1-unoff-srec-relax-patch.gz | patch -p0 とします。
  3. 後はbinutilsを再make すれば良いです。

前提


binutils-2.9.1 install

  1. shell変数の設定
    set target=h8300-hms
    set prefix=/usr/local/cross/h8300
    set i=$prefix/bin
  2. binutils-2.9.1.tar.gz を /home/crossgcc に展開する。
    cd /home/crossgcc
    tar -zxvf ~/ftp/GNU/binutils-2.9.1.tar.gz
    cd binutils-2.9.1
  3. Makefileの自動生成
    ./configure --prefix=$prefix --target=$target -v
  4. make
    make all >& make.log & ; tail -f make.log &
    make install >& install.log & ; tail -f install.log &

egcs-1.1b cross compiler install

egcs-1.1.1 が公開されています。以下の手順で問題なくインストール出来ます。
  1. shell変数の設定
    set target=h8300-hms
    set prefix=/usr/local/cross/h8300
    set i=$prefix/bin
  2. egcs-1.1b を展開する。
    cd /home/crossgcc
    tar -zxvf ~/ftp/egcs-1.1b.tar.gz
  3. newlib-1.8.1 を egcs ディレクトリのしたに展開する
    cd egcs-1.1b/
    tar -zxvf ~/html/h8/crossgcc/newlib/newlib-1.8.1.tar.gz
    ln -s newlib-1.8.1/newlib newlib
    #newlib とは、組み込み用に cygnusが 色々なlibraryを寄せ集めたもの。ライセンスに注目
  4. libf2c がなぜかコンパイル失敗するので、configure が取り込まない様に renameする。
    mv libf2c libf2c-none #旨い方法ないでしょうか?
  5. configure で Makefile生成
    ./configure --with-newlib --prefix=$prefix -target=$target -v
  6. クロスコンパイラのメイクとインストール
    make LANGUAGES="c c++" AS_FOR_TARGET=$i/${target}-as LD_FOR_TARGET=$i/${target}-ld AR_FOR_TARGET=$i/${target}-ar RANLIB_FOR_TARGET=$i/${target}-ranlib cross > & make.log & ; tail -f make.log &
    make LANGUAGES="c c++" install > & install.log & ; tail -f install.log &

おまけ:cross gdb を構築する

gdb-4.17を使った方が良いそうで。。。
  1. gdb-4.17を 展開する。
    cd /home/crossgcc
    tar -zxvf ~/ftp/gdb-4.17.tar.gz
  2. configure で Makefile生成
    cd gdb-4.17
    ./configure --target=$target --prefix=$prefix -v
  3. 必要に応じて、細渕さんのPageにある 日立モニター対応のパッチを当てる
  4. コンパイルとインストール
    make >& make.log &; tail -f make.log &
    make install >& install.log &; tail -f install.log &

DDDを使ってみる

GDB用のGUIの一つである、DDD(Data Display Debugger) を使ってみよう。Web Pageは ここ(http://www.cs.tu-bs.de/softech/ddd/)
DDD自体はCross環境に関係ないので、普通にmakeすれば良い。
準備するもの、
  1. Motif(OSF/Motif 1.2以降) か それ互換のLesstif(release 0.87以降)
    今回は、lesstif-0.88.0.tar.gzを用意。LesstifのWeb Pageはここ(http://www.lesstif.org/)
  2. DDD 3.1.4を用意(ddd-3.1.4.tar.gz)。

構築

まずは lesstif をコンパイル
  1. lesstif-0.88.0.tar.gzを展開する。
    tar -zxvf ~/ftp/lesstif-0.88.0.tar.gz
  2. configure で Makefile生成
    cd lesstif-0.88.0
    ./configure
  3. コンパイルとインストール
    make >& make.log &; tail -f make.log &
    make install >& install.log &; tail -f install.log &
  4. /sbin/ldconfig を忘れずに実行
次に DDDをコンパイル
  1. ddd-3.1.4.tar.gzを展開する。
    tar -zxvf ~/ftp/ddd-3.1.4.tar.gz
  2. configure で Makefile生成
    cd ddd-3.1.4 ./configure
  3. コンパイルとチェック
    コンパイル後に、make checkして問題なく動作するか確認
    make >& make.log &; tail -f make.log &
    make check
  4. インストール
    make install >& install.log &; tail -f install.log &

DDDを使う

  1. DDDの起動。
    ddd --debugger /usr/local/cross/h8300/bin/h8300-hms-gdb
  2. 環境の設定
    (gdb) set machine h8300h
    (gdb) set remotebaud 19200 <---- 実機のリモートデバッガ使用時。BaudRateは実機に合わせること。
  3. プログラムのロード
    (gdb) exec hoge.coff
    (gdb) file hoge.coff
  4. ターゲットの設定
    (gdb) target hms /dev/modem <---- 実機リモートデバック時。デバイスは適宜読み替えること
    (gdb) target sim <---- gdb内蔵シミュレータ使用時
  5. 実機へプログラムの転送
    (gdb) load
ここまでで、実行の準備完了。
ブレークポイントを設定して、RUNするだけ。まぁ、色々いじってみてください。。 まだ、全然使い込んでないので、解説できないんです。ゴメンなさい。

未確認情報

cross-gcc メーリングリストによると、binutils-2.9.1 (target h8300-hitachi-hms) の linker(h8300-hitachi-hms-ld)に問題があるようです。
詳しくは、下のsubject の メイルを参照して下さい。
問題ないようですが。。。Rev.02
Subject: bug report for binutils-2.9.1 h8300 cross linker 
From: randall loomis 
To: law@cygnus.com, crossgcc@cygnus.com, gnuh8@pcserv.demon.co.uk
Date: Fri, 13 Nov 1998 23:53:44 -0800
cross-gcc ML のアーカイブで検索してくださいまし、
The crossgcc mailing list archives
上記のメイルはここ

yasui@aimilc.ne.jp