☆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 で実機リモートデバック出来るように
する方法も公開されています。**必見です**
- [Q.]binutils中の objcopy が吐き出す モトローラSレコード形式のファイルが、S2フォーマットで間に合うアドレス範囲(24bit)にも関わらず、S3フォーマット(32bit)になってしまう。
[A.]
ここを見よ!細渕さんちのGNUによるAKI-H8のプログラム開発(binutils S2 フォーマットに変換できない問題を修正)
ここにある パッチ(srecfix.diff.gz)をbinutils(2.8.1用ですが、2.9.1でも問題なくパッチが当たります)に適用。これで、日立のモニタのLコマンド(Motorola S形式のLOAD)が正常動作します。
- [Q.]Cソースからコンパイルすると-relax オプションを指定しても、8bitアドレッシングモードを使ってくれない。
[A.]
ここを見よ!細渕さんちのGNUによるAKI-H8のプログラム開発(Tips -relaxをかしこくする)
ここにある パッチ(gas-relax.diff.gz)をbinutils(2.8.1用ですが、2.9.1でも問題なくパッチが当たります)に適用。こうするとこで、Cからも8bitアドレッシングが利用できます。
また、このパッチ(ld-relax.diff.gz)を当てることも推奨されているようです(binutils-2.8.1用ですが、binutils-2.9.1でも問題なく当たります)。
上記のパッチをまとめた物を
ここ(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 として差分を
抽出したものです。
このパッチは、
- binutils-2.9.1 を展開したディレクトリ (つまり ls すると binutils-2.9.1 が見える所)で
-
zcat binutils-2.9.1-unoff-srec-relax-patch.gz | patch -p0
とします。
- 後はbinutilsを再make すれば良いです。
前提
- binutils-2.9.1 が正しく /usr/local/cross/h8300 以下にインストールされている事。出来ていない場合は、以下を参考にしてインストールする。
- csh系のshellの使用を想定。bsh系は、適宜読み替えること。
binutils-2.9.1 install
- shell変数の設定
set target=h8300-hms
set prefix=/usr/local/cross/h8300
set i=$prefix/bin
- 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
- Makefileの自動生成
./configure --prefix=$prefix --target=$target -v
- 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 が公開されています。以下の手順で問題なくインストール出来ます。
- shell変数の設定
set target=h8300-hms
set prefix=/usr/local/cross/h8300
set i=$prefix/bin
- egcs-1.1b を展開する。
cd /home/crossgcc
tar -zxvf ~/ftp/egcs-1.1b.tar.gz
- 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を寄せ集めたもの。ライセンスに注目
- libf2c がなぜかコンパイル失敗するので、configure が取り込まない様に renameする。
mv libf2c libf2c-none
#旨い方法ないでしょうか?
- configure で Makefile生成
./configure --with-newlib --prefix=$prefix -target=$target -v
- クロスコンパイラのメイクとインストール
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を使った方が良いそうで。。。
- gdb-4.17を 展開する。
cd /home/crossgcc
tar -zxvf ~/ftp/gdb-4.17.tar.gz
- configure で Makefile生成
cd gdb-4.17
./configure --target=$target --prefix=$prefix -v
- 必要に応じて、細渕さんのPageにある 日立モニター対応のパッチを当てる
- コンパイルとインストール
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すれば良い。
準備するもの、
- Motif(OSF/Motif 1.2以降) か それ互換のLesstif(release 0.87以降)
今回は、lesstif-0.88.0.tar.gzを用意。LesstifのWeb Pageはここ(http://www.lesstif.org/)。
- DDD 3.1.4を用意(ddd-3.1.4.tar.gz)。
構築
まずは lesstif をコンパイル
- lesstif-0.88.0.tar.gzを展開する。
tar -zxvf ~/ftp/lesstif-0.88.0.tar.gz
- configure で Makefile生成
cd lesstif-0.88.0
./configure
- コンパイルとインストール
make >& make.log &; tail -f make.log &
make install >& install.log &; tail -f install.log &
- /sbin/ldconfig を忘れずに実行
次に DDDをコンパイル
- ddd-3.1.4.tar.gzを展開する。
tar -zxvf ~/ftp/ddd-3.1.4.tar.gz
- configure で Makefile生成
cd ddd-3.1.4
./configure
- コンパイルとチェック
コンパイル後に、make checkして問題なく動作するか確認
make >& make.log &; tail -f make.log &
make check
- インストール
make install >& install.log &; tail -f install.log &
DDDを使う
- DDDの起動。
ddd --debugger /usr/local/cross/h8300/bin/h8300-hms-gdb
- 環境の設定
(gdb) set machine h8300h
(gdb) set remotebaud 19200 <---- 実機のリモートデバッガ使用時。BaudRateは実機に合わせること。
- プログラムのロード
(gdb) exec hoge.coff
(gdb) file hoge.coff
- ターゲットの設定
(gdb) target hms /dev/modem <---- 実機リモートデバック時。デバイスは適宜読み替えること
(gdb) target sim <---- gdb内蔵シミュレータ使用時
- 実機へプログラムの転送
(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