先日のARM開発環境をというネタからの流れではあるものの随分と手こずっています。手こずっているのはgccやglibcなどの
クロス環境のツールチェインのmakeでして、今のところ失敗の連続です。
それで寄り道をして gdbserver をmakeしてみようと思います。ターゲット環境で gcc が使用可能な状態であることが条件です。幸いにして、Jetson TK1 は最初からgccが使用可能で、gdbもあるのであまりこの必要性は感じませんが、gdbserver を用意しておくことは開発時において貢献してくれそうです。
準備
gdb(gdbserver)だけではコンパイルできないので依存関係にある物をインストールしておきます。
$ sudo apt-get install texinfo $ wget http://ftp.gnu.org/gnu/gdb/gdb-7.8.tar.gz $ wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz $ tar xzf termcap-1.3.1.tar.gz $ tar xzf gdb-7.8.tar.gz $ cd termcap-1.3.1 $ mkdir build $ cd build $ ../configure $ make $ sudo make install $ cd ../..
コンパイルとインストール
gdb(gdbserver) をmakeします。
$ cd gdb-7.8 $ mkdir build $ cd build $ ../configure --prefix=/home/ubuntu/tools/debugger $ make $ make install
/home/ubuntu/tools/debugger/bin/gdbserver の場所にインストールされます。都合が悪い場合には prefixの値を変更して下さい。
動作テスト
別のUbuntu環境で arm linux eabihf対応の gdb を用いて、gdbserver に接続して動作確認をします。
手っ取り早くやるためには、UbuntuでLinaro gcc-linaro-arm-linux-gnueabihf-4.7 をダウンロードして展開し、この中のgdbを使用しました。
他にも
sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install gcc-arm-linux-gnueabihf
とかやったのですが、うまく対象の gdb をいれることができなかったためです。
また、linaroのパッケージの物が 32bit のものだったので、下記のコマンドを入力して 32bit のものが動作するようにしています。
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
これら、昔は apt-get install ia32-libs でインストールしていましたが、今(14.04)は上記のようにやるような感じでした。
今回のターゲットは Jetson TK1 だったのですが、無事にホストPCからgdbコマンドを実行しつつ、ソースコードデバッグができるところまでを確認しました。
注意点としては、当然ですが EABIのgdbではうまく動作しません。ターゲットのABIにあわせたシロモノが必要になります(だから今回はEABIHF となっています