第 16 回

クロス・コンパイル環境を作成してコンパイル・デバッグを行う
今回は，Cygwin において PowerPC（PPC）と ARM のクロス・コンパイル環境を構築し，GDB でシミュレーション・デバッグを行う方法について解説する．

1．PowerPC のコンパイル環境を設定する（筆者）● ツール類の展開
ダウンロードしたアーカイブ（圧縮ファイル）は tar.gz 形式です．すべて展開しておきましょう．

まずは，PowerPC コンパイル環境を設定してみましょう．

$tar zxvf binutils-2.10.1.tar.gz$ target=powerpc-eabi$tar zxvf newlib-1.9.0.tar.gz$ prefix=/usr/local/ppc$tar zxvf gcc-2.95.3.tar.gz$ src_root=/usr/local/src/ppc$tar zxvf gdb-6.5.tar.gz

これは bash の設定です．ただし，シェルによっては記述を● binutils のインストール変える必要があります．また，export で恒久的に登録してもまず，binutils をインストールします．これはオブジェクト・よいのですが，今回は一時的なものなので，ログアウトしたらライブラリの管理を行ったり，アセンブルしたり，リンクする消えてしまいます．

ためのツール群です．x86 アーキテクチャのための binutil ツー
ルは，通常はインストール時にインストールされます．しかし，2．クロス・コンパイル用のツールをインストールする

クロス・コンパイル時に使用するものは，自分でコンパイルしてからインストールしなければなりません．
$cd $src_root

それでは，インストールしてみましょう．

$mkdir BUILD;cd BUILD;mkdir binutil;
cd binutil$mkdir -p $src_root

この操作の後，$src_root/BUILD/binutil を作業用ディ$cd $src_root
ソースの置き場所に移動し，ソースをネットワーク環境から取得します．Linux マシンがスタンドアロンで，ネットワークレクトリとして，コンパイルを開始します．
$src_root/binutils-2.10.1/configureにつながらない場合は，以下に示す wget コマンドは実行せずに，メディアを使ってインストールしてください．

● ツール類のダウンロード--prefix=$prefix -v --target=$target
エラーが出なければ make を開始してください．ただし，すぐに処理は終わりません．

設定によっては，以下に示すバージョン以外でも動くと思います．しかし，カーネルのバージョンによってはヘッダ・ファイルを修正しなくてはならないので，以下のバージョンを用い$make
エラーなしで無事終了したら，次はインストールです．
$make install
それでは，試してみましょう．

ると良いでしょう．
$wget http://www.ring.gr.jp/archives/GNU/
binutils/binutils-2.10.1.tar.gz$wget ftp://sources.redhat.com/pub/newlib/newlib-1.9.0.tar.gz$wget http://www.ring.gr.jp/archives/GNU/gcc/gcc-2.95.3.tar.gz$wget http://www.ring.gr.jp/archives/GNU/gdb/gdb-6.5.tar.gz$target-as -h
このように入力すると，作成した as が動作するはずです（図 1）．
$as -hこのように入力すると，もともとインストールされていた asが動作するはずです．しかし，-h というオプションは，このas には存在せず，エラー・メッセージを出して終了します．
as: option '-h' is ambiguous
ここまでうまくいけば binutils ツールはきちんとコンパイルおよびインストールされたはずです．クロス・コンパイル用の

162 KEYWORD ―― GDB，デバッガ，クロス・コンパイル，コンパイル・デバッグ，PowerPC，ARM

Dec. 2006

$ $target-as -hUsage: powerpc-eabi-as [option...] [asmfile...]Options:-a[sub-option...]turn on listingsSub-options [default hls]:
comit false conditionals
domit debugging directives
hinclude high-level source
linclude assembly
minclude macro expansions
nomit forms processing
sinclude symbols
Linclude line debug statistics (if applicable)=FILE list to FILE (must be last sub-option)-D
produce assembler debugging messages--defsym SYM=VAL
define symbol SYM to given value-fskip whitespace and comment preprocessing--gstabs
generate stabs debugging information--gdwarf2
generate DWARF2 debugging information--helpshow this message and exit
-I DIR
add DIR to search list for .include directives-J
don't warn about signed overflow-Kwarn when differences altered for long displacements-L,--keep-locals
keep local symbols (e.g. starting with `L')
-M,--mri
assemble in MRI compatibility mode--MD FILE
write dependency information in FILE (default none)-nocppignored-o OBJFILE
name the object-file output OBJFILE (default a.out)-Rfold data section into text section--statistics
print various measured statistics from execution--strip-local-absolute strip local absolute symbols--traditional-format
Use same format as native assembler when possible--version
print assembler version number and exit
-W --no-warn
suppress warnings--warndon t suppress warnings--fatal-warnings
treat warnings as errors--itbl INSTTBL
extend instruction set to include instructions
matching the specifications defined in file INSTTBL-w
ignored-Xignored-Z
generate object file even after errors--listing-lhs-width
set the width in words of the output data column ofthe listing--listing-lhs-width2set the width in words of the continuation linesof the output data column; ignored if smaller than
the width of the first line--listing-rhs-width
set the max width in characters of the lines fromthe source file--listing-cont-lines
set the maximum number of continuation lines used
for the output data column of the listingPowerPC options:-uignored-mpwrx, -mpwr2
generate code for IBM POWER/2 (RIOS2)-mpwr
generate code for IBM POWER (RIOS1)-m601
generate code for Motorola PowerPC 601-mppc, -mppc32, -m403, -m603, -m604
generate code for Motorola PowerPC 603/604-mppc64, -m620
generate code for Motorola PowerPC 620-mppc64bridge
generate code for PowerPC 64, including bridge insns-mcom
generate code Power/PowerPC common instructions-many
generate code for any architecture (PWR/PWRX/PPC)-mregnames
Allow symbolic names for registers-mno-regnames
Do not allow symbolic names for registers-mrelocatablesupport for GCC's -mrelocatble option-mrelocatable-lib
support for GCC's -mrelocatble-lib option-memb
set PPC_EMB bit in ELF flags-mlittle, -mlittle-endian
generate code for a little endian machine-mbig, -mbig-endian
generate code for a big endian machine-msolaris
generate code for Solaris-mno-solaris
do not generate code for Solaris-V
print assembler version number-Qy, -Qn
ignoredReport bugs to bug-gnu-utils@gnu.org

図 1 as の結果（PowerPC）

Dec. 2006

163