第1章
コンパイラ，アセンブラ，リンカのインストールから使い方まで

GNUツールを使ったクロス開発環境の構築
本稿では，GCCなどのGNUツールを使った場合の開発フ
ローやソースの入手，ビルドやインストールの方法，そしてコンパイラ，アセンブラ，リンカの使い方について解説する．
本誌付属のDVD-ROMにはCygwin環境で動作するビルド済
みGCCなどを収録しており，すぐにインストールして使うこ（編集部）とも可能である．

山際 伸一

章では，これらの基本事項を踏まえた上で説明を進めまはじめにす．読んでいて「あれ？ どうだったかな？」というようなA 社の CPU には A 社の開発環境が，B 社の CPU には B社の開発環境が用意されています．一般に CPU には互換疑問が出たときに，この章に戻って読み返すことをお勧めします．

性がなく，開発ツールにも互換性はありません．初めて使う CPU は，その CPU アーキテクチャを理解し，開発ツールの使い方も覚えなければならないわけです．

1．GNU ツールで組み込みプログラミング

しかし GNU ツールで開発環境を構築すると，CPU を変更しても開発環境が大きく異なることはありません．プロ● 組み込み開発環境とはグラマは CPU アーキテクチャの理解に専念でき，使い慣プログラム開発環境には大きく二つの環境があります

れた開発ツールの環境を使い続けることができます．GNU（図 1）．一つはネイティブ開発環境です．プログラム開発

ツールの信頼性とその知名度から，最近では CPU ベンダを行う環境と動作させる環境が同一のものです．例えばも GNU ツールを無視できない状況になっています．

Windows 上で Visual Studio を使って Windows 向けのプ

本稿では，この GNU ツールを使ってプログラム開発をログラムを開発するようなものです．

行う上で必要なプログラム開発環境の構築方法と，知ってもう一つがクロス開発環境と呼ばれるもので，プログラおきたい基本事項を押さえていきます．本特集の後述の各ムを開発する環境と動作させる環境が異なる場合です．組
み込み開発の多くはこちらの環境となります．プログラム開発に用いられるマシンのことをホスト・マシン，そのプロセッサのことをホスト CPU と呼びます．また，ホスト・マシンで作成されたプログラムを実行するマシンをター

開発環境と実行環境が同じゲット・マシン，そのプロセッサをターゲット CPU と呼開発環境と実行環境が異なるびます．

シリアル，USB，Ethernetなど

クロス開発環境では，CPU アーキテクチャが異なるため，ホスト CPU で開発したターゲット CPU 向けの機械語バイナリを直接実行することはできません．そこで，動作

ターゲット・システム（a）ネイティブ開発（b）クロス開発

図 1 ネイティブ開発環境とクロス開発環境

52

ホスト

確認を行うための仕組みが必要となります．ホスト・マシ
ンとターゲット・マシンをシリアル・ケーブルや JTAGケーブルなどの通信ケーブルで接続し，ホスト・マシンでKEYWORD ―― ネイティブ開発，クロス開発，コンパイラ，アセンブラ，リンカ，GCCDec. 2007

第1章

GNU ツールを使ったクロス開発環境の構築

作成したプログラムをターゲット・マシンにダウンロード

ベンダではサポートされていないことが多く，ユーザに多して実行します．

くの基本的な知識が要求されます．本特集は，GNU クロ● モニタ（GDB スタブ）

ス開発ツールが使えるようになることを目標としています．

一般的にシリアル・ケーブルによる接続では，ターゲット・システム側にも通信プログラムが必要です．これを一般にモニタと呼びます．このモニタはあらかじめターゲッ

1
2．GNU ツールを使ったプログラム開発フロー

App1

ト・システムに書き込んでおく必要があります．
本特集では，このモニタに相当するプログラム（GDB ス

まず，ターゲット CPU で動作するプログラムを作成するタブ）を各種ターゲット CPU ごとに用意し，ターゲット過程について理解していきましょう．ここでは，ターゲッ

CPU やターゲット・ボードに説明されている方法でモニト CPU で実行可能なバイナリを作成するまでにどのようなタを書き込んでおきます．

ツールを用いるかについて解説していきます．

3

なお，GDB スタブの構造や作成についても解説していGNU ツールを使った場合，図 2 に示す開発フローをたどるので，クロック周波数や接続に使用するシリアル・ポーります．この開発フローはホスト・マシンで実行されます．

トのチャネルを変更するといった改造も容易だと思います．

● プログラムのコンパイルとアセンブル● ROM 化C，C++ などの高級言語で書かれたソース・プログラム開発したシステムが，最終的に開発時と同じように通信

C言語
プログラム

アセンブリ言語プログラム

Cコンパイラ
（GCC）

アセンブラ
（gas）

プログラムは，半永久的に消えないメモリに書き込まれていなければなりません．ターゲットには ROM が搭載されに設計されているのが普通です．
開発時は，ターゲット CPU の初期化に必要な処理をモニタが実行しているので，ユーザの作成したプログラムには初期化処理がなくてもシステムは動作します．しかし

ライブラリ
オブジェクト・ファイル

リンカ・スクリプト

ROM 化した場合は ROM モニタが行っていた処理と同じ処理を組み込んでおかないと，ユーザのプログラムは起動しません．
また，一般に ROM モニタを介してダウンロードされるプログラム領域は，ROM 化時のアドレスと異なるので，プログラムのアドレス・マップを再設定する必要があります．

● GNU クロス開発ツールを使えるようになろう！
以上の説明で，クロス開発を行うための環境はネイティ
ブ開発環境とは異なるツールを使ったり，ROM モニタなオブジェクト・ファ
イルのライブラリ化

どの基本プログラムが必要となることが理解できたと思い

リンカ
（ld）

実行形式ファイル
（ELFなど）バイナリ・ツール（objdump，objcopy）
実行形式ファイルをROM可能なバイナリ・ファイルへ変換ます．GNU ツールを用いたターゲット CPU 向けのプログ
ラム開発では，クロス・コンパイラやクロス・アセンブラ，クロス・リンカ，デバッガといった一連のクロス開発ツールを無償で手に入れることができます．しかし，それらはDec. 2007

5App2

んが，多くの場合，ターゲットは単体で動作するものになていることが多く，その ROM から CPU が起動するよう4はコンパイラを介して，アセンブリ言語で書かれたソーケーブルを接続した状態で使うのであれば問題はありませるでしょう．そうなると，作成したターゲット CPU 向け2

図2
GNU ツールを使ったプログラム開発フロー

ROM化ファイル

New Products ―― MontaVista，携帯機器向け Linux OS の新版を発表
MontaVista Software 社は，携帯機器向け OS「MontaVista Mobilinux 5.0」を発表した．セキュリティ機能や消費電力管理機能などを強化した．携帯電話や携帯型医療機器，無線 POS 端末などに利用できる．Mobilinux は，スマートホンなどで多くの採用実績がある．

53