カメラ搭載マイクロマウス Camera mouse mm-6 / 7 / 8

gcc-porting

トップ

gcc porting

SR プロセッサ命令セットの gcc への移植

fr30 の移植コードをベースに改造を加える形で新規命令セットを移植した。fr30 は移植コードが小さく、また cgen*1 を使っているのでアセンブラ、リンカの移植コードも小さい。
ただし、メンテナンスがされていないようで、gdb-6.x 以降 gdb のfr30サポートが無くなっており、gdb-6.7.1 の移植には苦労した。

cgen による binutils, gdb の移植

cgen のソースを cgen-latest/ に展開し、新しく命令セット定義ファイルを作成する。ベースにしたfr30の定義ファイル fr30.cpu を見ると大体記述の仕方がわかる。
新たに定義した命令の op-code、動作、アセンブラ記述、のセットを書いていく。

  • SR CPU定義ファイル:
    cgen-latest/cgen/cpu/sr.cpu
    cgen-latest/cgen/cpu/sr.opc

cgen のソースツリーを binutils, gdb のソースツリーにリンクする。configure, Mekefile に新たに target-cpu sr を追加し、それぞれビルドする。
binutils-2.17/cgen -> ../cgen-latest/cgen
gdb-6.7.1/cgen -> ../cgen-latest/cgen

binutils, gdb をビルドする際 --enable-cgen-maint オプションを付けて configure すると、必要な C ソースが自動生成される。

  • 自動生成されたソース:
    binutils-2.17/opcodes/
    sr-asm.c,sr-desc.c,sr-dis.c,sr-ibld.c,sr-opc.c
    gdb-6.7.1/opcodes/
    sr-asm.c,sr-desc.c,sr-desc.h,sr-dis.c,sr-ibld.c,sr-opc.c,sr-opc.h
    gdb-6.7.1/sim/sr/
    arch.c,arch.h,cpu.c,cpu.h,cpuall.h,decode.c,decode.h,model.c,sem-switch.c,sem.c

実際には、configure,Mekefile 関連以外にも、target 依存の記述があり、いくつものソースに手を入れる必要があった。

gcc の移植

主に以下の3つのファイルを作成する。
gcc-3.4.6/gcc/config/sr/sr.c SR specific functions
gcc-3.4.6/gcc/config/sr/sr.h Definitions of SR target
gcc-3.4.6/gcc/config/sr/sr.md machine description
他にいくつか、
gcc-3.4.6/gcc/config/sr/t-sr
gcc-3.4.6/gcc/config/sr/crti.asm 初期化ルーチン
gcc-3.4.6/gcc/config/sr/crtn.asm 
gcc-3.4.6/gcc/config/sr/sr-protos.h
参照:GNU コンパイラ集(GCC) の使い方と移植について(文字コードEUC)

configure,Mekefile 関連、に target sr プロセッサを追加し、ビルド。

SR クロスコンパイラ

以下は、移植したSRクロスコンパイラのソースと具体的ビルド手順。ビルドはスクリプト化しているので、詳細は各スクリプトを参照。

開発環境は Linux (Fedora-10)
使用するツールのバージョンに敏感で、Fedora-10標準のツールに対し、古いバージョンのツールをインストールする必要があった。以下の2点を用意した。

  1. gcc-3.4.6
    Fedora-10の標準 gcc-4.3.2 でコンパイル出来ない。compat-gcc-34-3.4.6 を「ソフトウェアの追加/削除」で追加し、リンク /usr/local/bin/gcc -> /usr/bin/gcc34 を張ってコンパイルした。
  2. guile-1.4.1
    guile は cgen が用いる。Fedora-10の標準 guile-1.6 でエラー。guile-1.4.1.tar.gz を入手し、/usr/local/binにインストールした。

クロスコンパイラのパッチとビルドスクリプト download:
filexgcc-sr-110130.tar.gz : xgcc-sr patch

filexgcc-sr-fp-110426.tgz : xgcc-sr patch fpu version

C で書いた cycle acculate simulator.
filesrsim-110426.tgz : c-simulator

SRのVHDLソース:
filesr-fpu-110420.tgz : sr-core hdl

以下、ビルド手順

# SR プロセッサクロスコンパイラパッチを展開
tar xfvz xgcc-sr-110130.tar.gz
cd xgcc-sr

# GNU ソースの入手
sh get-sources.sh
# ./Arch/ にGNUソースアーカイブを持ってくる。必要なソースは以下
#  binutils-2.17.tar.gz
#  gcc-core-3.4.6.tar.bz2
#  gcc-g++-3.4.6.tar.bz2
#  gdb-6.7.1.tar.bz2
#  newlib-1.11.0.tar.gz
#  cgen-20061209.tar.bz2
(cgen の20061209バージョンは入手出来ないので、xgcc-sr-110130.tar.gz に含めてある)

# ソースの展開、コンパイル準備(リンク張り)、パッチ適用
sh build-setup.sh > build-setup.log

# binutil-2.17 のビルド・インストール
sh build-binutil.sh > build-binutil.log
# gcc-3.4.6 のビルド・インストール
sh build-gcc.sh > build-gcc.log
# gdb-6.7.1 のビルド・インストール
sh build-gdb.sh > build-gdb.log

# テスト
cd sr_test
make       テストプログラムをクロスコンパイル
make check シミュレータで実行、結果をリファレンスと比較

シミュレーション実行

gdbに含まれるプログラム bin/sr-elf-run に クロスコンパイルリンクしたabsファイルを与えると、シミュレーション実行できる。-t オプションで命令実行トレースが得られるので、HDLのシミュレーションとの突合せが出来る。

クロスgdbを target sim で実行し、gcc 移植の不具合追跡、プログラムのバグ追跡を行う。
gdbのGUIフロントエンド ddd を用いることで、効率的に不具合追跡が行えた。


*1 cgen : the Cpu tools GENerator アセンブラ、リンカ、シミュレータの移植を容易にする→link

powered by QHM 6.0.8 haik
based on PukiWiki 1.4.7 License is GPL. QHM

最新の更新 RSS  Valid XHTML 1.0 Transitional