newlibをベースとした標準Cライブラリ(libc
)を使用可能であり、
それらを使用して記述されたCソースコードをコンパイルすることができる。
※ただし、現時点ではライブラリを使うために必要なシステムコールを
シミュレータ側に実装していないため、実行はできない。(将来対応予定)
cygwin環境(windowsで動くUNIX模倣環境)で
動作するため、(cygwinが導入してあれば)
2Fネットワーク実験室以外の環境でも利用可能である。
Cソースプログラム(.cファイル)やARMアセンブリソースプログラム(.Sファイル)を
arm-elf-gccによりコンパイルおよびアセンブルを行い、
(リロケータブル)オブジェクトファイル(.oファイル)を生成する。
オブジェクトファイル(.oファイル)を
arm-elf-ldによりランタイムライブラリ等とリンクして、
実行可能バイナリコードファイル(ELF形式ファイル)を生成する。
シミュレータで読み込み可能な形式(モトローラSレコード形式)の
ダンプテキストファイル(.srecファイル)に変換するために
arm-elf-objcopyを使用する。
また、デバッグを行う際に参考になる逆アセンブルリスト(.asmファイル)を
生成するために
arm-elf-objdumpを使用する。
export PATH=/usr/local/arm-tools/bin:$PATH
作業を省力化するため、
このファイル(setup-arm.sh)を
作業ディレクトリにコピー後、以下のコマンドを実行しても良い。
※あるいは、.bashrc(Z:の直下にあるファイルの一つ)に上記のPATH設定を記述 しておくと、コマンドラインシェル(bash)の起動時に自動的に設定を行ってくれる。. setup-arm.sh # ←ピリオドに続けて空白の後にファイル名
次に、
サービスコールの記述を簡略化するためのマクロを定義したヘッダファイル
army.h
をダウンロードして作業ディレクトリに置く。
この作業は最初に一度だけ行えばよい。
# Cソースファイルからオブジェクトファイルを生成 arm-elf-gcc -O {ファイル名}.c -c # オブジェクトファイルをリンクして実行可能バイナリファイルを生成 arm-elf-ld {ファイル名}.o -Tarmy.ld -o {ファイル名}.bin # 実行可能バイナリファイルをシミュレータに読み込み可能な形式に変換 arm-elf-objcopy -Osrec {ファイル名}.bin {ファイル名}.srec # 実行可能バイナリファイルを逆アセンブル arm-elf-objdump -d {ファイル名}.bin > {ファイル名}.asm
最初の2つのコマンドは以下のようにすれば、1回のコマンド実行にすることが
できる。
# Cソースファイルから(直接)実行可能バイナリファイルを生成 arm-elf-gcc -O {ファイル名}.c -Tarmy.ld -o {ファイル名}.bin
シミュレータに入力するプログラムファイルは.srecファイル
を使用する。
また、逆アセンブルファイルである.asmファイル
はデバッグ作業の際に
有用な情報が含まれている。
逆アセンブルファイルについて、上記の方法ではレジスタ名がソフトウェア
レジスタ名となり、シミュレータのデバッグ作業の際に使いづらい。
以下の通りに、"-M reg-names-raw" オプションを
付けることで、(物理)レジスタ番号で表示してくれる。
# 実行可能バイナリファイルを逆アセンブル (物理レジスタ番号で表示) arm-elf-objdump -M reg-names-raw -d {ファイル名}.bin > {ファイル名}.asm
本クロス環境を導入する前に cygwin環境を整えておく必要がある。
cygwinについてはここからダウンロード
できるので、先に cygwinを導入しておく。
(インストーラを実行して表示される指示に従うだけでOK)
cygwinの環境が整えた後、cygwinのシェル(bash)から以下のコマンドを
実行して、
上記のファイル(arm-tools.tar.bz2)を展開するだけでクロス環境の導入は
完了である。
tar xvfj arm-tools.tar.bz2 -C /usr/local
※cygwin環境自体の使い方については
Google等で検索。