GDB/GDBserverによるクロスターゲットのリモートデバッグ:Programing Bible(2/3 ページ)
Linuxベースの組み込みシステムで動くアプリケーションのデバッグは厄介な仕事だが、GDBを使えば簡単に片付けられる。ここでは、GDBを使う上で最初の難関となるセットアップ周りについて解説する。
GDBのビルド
以下の例ではターゲットプロセッサとして7450 PowerPCを使用する。
作業に入る前にGDBを動かすPCとターゲットプラットフォームの間の通信インタフェースを準備する必要がある。シリアルリンクでもよいが、できればイーサネットネットワークで接続するのが望ましい。クロスターゲットツールチェーンとしてGNU Cコンパイラも必要だ(加えて、Cランタイムライブラリと、binutils、すなわちバイナリユーティリティ群も)。これを開発ワークステーション上で動かしてターゲットプロセッサ用の実行可能プログラムを生成するわけだ。GDBのソースコードから次の2つのバイナリをビルドすることになる。
- クロスターゲット――ホストは開発ワークステーション、ターゲットはターゲットプロセッサ
- ネイティブ――ホストとターゲットはどちらもターゲットプロセッサ
まず、GDBのソースコード圧縮アーカイブをダウンロードし、展開する。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
GDBソースパッケージはGNUビルドシステムを使用しており、バイナリの生成は通常なら数個のコマンド(./configure ; make ; make install)で完了する。しかし、今回のケースは少し注意が必要だ。2種類のホストプロセッサについてのバイナリをビルドし、各バイナリを別の場所にインストールしたいからである。そのため、各バイナリをソースパッケージを展開したディレクトリ内ではなく、それぞれ独自のディレクトリ内でビルドすることにする。さらに、configureスクリプトのコマンドラインオプションでターゲットおよびホストのプロセッサと、インストールディレクトリプレフィックスも指定する。
クロスターゲットのバイナリをビルドするには、--targetオプションでターゲットアーキテクチャを指定する。アーキテクチャ識別子(powerpc-7450-linux-gnu)が、すべてのクロスツールチェーンバイナリのプレフィックスとなる(クロスコンパイラのバイナリはpowerpc-7450-linux-gnu-gcc)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ターゲットネイティブ・バイナリのビルドはもっとややこしい。1つにはホストアーキテクチャ(ターゲットアーキテクチャpowerpc-7450-linux-gnuと同じ)を指定する必要があるからだ。もう1つの問題は欠けているライブラリだ。一部のライブラリがクロスツールチェーンで使えない可能性があり、ターゲットネイティブGDBのビルドに取りかかる前にビルドしておく必要がある。次の例は、ターゲットネイティブtermcapライブラリが欠けていると分かったときの対処法を示している(クロスビルドには多少の違いがあるので、不確かなときは「./configure --help」で調べること)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
検討すべき問題がもう1つある。バイナリを静的にリンクする必要があるかどうかだ。静的リンクが必要になるのは、GDBとGDBserverの運用に必要な共有ライブラリの一部が欠けている場合だが、それで生成される実行可能プログラムは動的リンクの場合よりもずっと大きくなる。静的リンクを指定するには、オプション-staticをLDFLAGS環境変数に追加し、その後にconfigureを実行する。追加ライブラリは、次のようにLDFLAGSとCPPFLAGSの両方で指定する必要がある。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ビルドプロセスの途中でGNUリンカから警告が出るはずだ。静的にリンクするアプリケーションで一部の関数(例えば、dlopen、 gethostbyname、その他幾つか)が使われているときは、実行時にリンク用としてGNU Cランタイムライブラリ版の共有ライブラリが必要になるからだ。それらのライブラリをターゲットプラットフォームにインストールしなければならないだろう。
GDBserverの実行可能プログラムを生成したら、ターゲットプラットフォームにコピーする。powerpc-7450-linux-gnu-stripユーティリティでデバッグ情報を取り除いておけば、ストレージを節約できる。
このビルド手続きを別の種類のターゲットプロセッサ用に書き換えるときは、アーキテクチャ識別子を変更するだけでよい。
Copyright © 2010 OSDN Corporation, All Rights Reserved.