注意!
本クロスコンパイラ/アセンブラ環境は
2Fネットワーク実験室のPCのうち baby22〜baby36でのみ利用可能である。
newlibをベースとした標準Cライブラリ(libc
)を使用可能であり、
それらを使用して記述されたCソースコードをコンパイルすることができる。
(ただし、現時点ではライブラリを使うために必要なシステムコールを
シミュレータに実装していないため、実行はできない)
cygwin環境(windowsで動くUNIX模倣環境)で
動作するため、(cygwinが導入してあれば)学科2F以外の環境でも利用可能である。
Cソースプログラム(.cファイル)やMIPSアセンブリソースプログラム(.Sファイル)を
mipsel-elf-gccによりコンパイルおよびアセンブルを行い、
(リロケータブル)オブジェクトファイル(.oファイル)を生成する。
オブジェクトファイル(.oファイル)を
mipsel-elf-ldによりランタイムライブラリ等とリンクして、
実行可能バイナリコードファイル(ELF形式ファイル)を生成する。
シミュレータで読み込み可能な形式(モトローラSレコード形式)の
ダンプテキストファイル(.srecファイル)に変換するために
mipsel-elf-objcopyを使用する。
また、デバッグを行う際に参考になる逆アセンブルリスト(.asmファイル)を
生成するために
mipsel-elf-objdumpを使用する。
export PATH=/usr/local/mips-tools/bin:$PATH export PATH=/usr/local/mips-tools/mipsel-elf/bin:bin:$PATH export PATH=/usr/local/mips-tools/libexec/gcc/mipsel-elf/3.4.6:$PATH
作業を省力化するため、
このファイル(setup.sh)を
作業ディレクトリにコピー後、以下のコマンドを実行しても良い。
. setup.sh # ←ピリオドに続けて空白の後にファイル名
次に作業ディレクトリに
このファイル(mipsy.ld)をダウンロードして置く。
この作業は最初に一度だけ行えばよい。
(新しく作業ディレクトリを作った場合は、同様にダウンロードしてファイルを置く)
補足:
サービスコールの記述を簡略化するためのマクロを定義したヘッダファイル
mipsy.h
を使う場合は、これも作業ディレクトリに
置くこと。
# Cソースファイルからオブジェクトファイルを生成 mipsel-elf-gcc -O $file.c -c # オブジェクトファイルをリンクして実行可能バイナリファイルを生成 mipsel-elf-ld $file.o -Tmipsy.ld -o $file.bin # 実行可能バイナリファイルをシミュレータに読み込み可能な形式に変換 mipsel-elf-objcopy -Osrec $file.bin $file.srec # 実行可能バイナリファイルを逆アセンブル mipsel-elf-objdump -d $file.bin > $file.asm
シミュレータに入力するプログラムファイルは$file.srec
を使用する。
また、逆アセンブルファイルである$file.asm
はデバッグ作業の際に
有用な情報を提供してくれる。
2010年8月6日追記:
逆アセンブルファイルについて、上記の方法ではレジスタ名がソフトウェアレジスタ名となり、
デバッグの際に使いづらい。
以下の通りに、-M reg-names=numeric オプションを付けることで、(物理)レジスタ番号で
表示してくれる。
# 実行可能バイナリファイルを逆アセンブル (物理レジスタ番号で表示) mipsel-elf-objdump -M reg-names=numeric -d $file.bin > $file.asm
本クロス環境を導入する前に cygwin環境を整えておく必要がある。
cygwinについてはここから
ダウンロードできる。
cygwinの環境が整えた後、cygwinのシェル(bash)から以下のコマンドを
実行して、
上記のファイル(mips-tools.tar.bz2)を展開するだけでクロス環境の導入は
完了である。
tar xvfj mips-tools.tar.bz2 -C /usr/local
※cygwin環境自体の使い方については
Google等で検索するとよい。
注意:
新規にcygwinを導入した場合は最新版(バージョン1.7系列)を使うことになるが、
この場合には上記「使用前の設定」で行っているPATHの設定のうち、
2番目と3番目は不要である。(むしろ設定しない方が望ましい)
つまり、以下の設定だけ行えばよい。
設定を省力化するための setup.shはcygwinのバージョンを判定して 自動的に最適な設定を行うようになっている。export PATH=/usr/local/mips-tools/bin:$PATH