1. 程式人生 > >用Eclipse和GDB構建ARM交叉編譯和線上除錯環境

用Eclipse和GDB構建ARM交叉編譯和線上除錯環境

再次強調一次,GDB遠端除錯套件包括Host端的gdb和Target端的gdbserver,對於gdb,宿主機上發行版本自帶的PC版gdb是不能用的,它沒有目標架構(ARM)相關的除錯支援。所以我們應該使用gdb的原始碼,針對ARM平臺編譯一個(toolchain還是Host上的)特別的版本。當然,如果晶片商提供的交叉編譯套件中已經包含了arm-linux-gdb,我們就不用重新編譯gdb了,直接用它即可。不管怎麼說,gdbserver還是需要用目標板的toolchain重新編譯一遍,因為晶片商提供的交叉開發套件通常不包括gdbserver。

下載完後,解壓:

#cd /opt
#tar xzvf /tmp/gdb-6.8.tar.gz

建立配置檔案,編譯:

#cd /opt
#mkdir -p arm-gdb/build
#cd arm-gdb/build
#/opt/gdb-6.8/configure --target=arm-linux --prefix=/opt/arm-gdb
#make
#make install

上面命令中,–target配置gdb的目標平臺,–prefixp指定了編譯結果的存放位置,也就是安裝目錄。編譯完後可以在/opt/arm-gdb/bin目錄下找到可執行的arm-linux -gdb, arm-linux -gdbtui, arm-linux-run。 拷貝arm-linux-gdb 到/usr/bin目錄:

#cd /opt/arm-gdb/bin/
#cp arm-linux-gdb /usr/bin/

下面把 gdbserver 移植到ARM平臺。要點是指定目標平臺的交叉編譯鏈(gcc和ar)。我們建立一個臨時的編譯目錄,以避免弄髒原始碼。

#cd /home/kim
#mkdir gdb-build
#CC="/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-gcc" \
  AR=/data/Linux/ti-sdk5/linux-devkit/bin/arm-arago-linux-gnueabi-ar \
  /opt/gdb-6.8/gdb/gdbserver/configure  --target=arm-linux --host=arm-linux
#make

上面命令中,–target=arm-linux表示目標平臺,–host表示主機端執行的是arm-linux-gdb,不需要配置—prefix,因為gdbserver不在主機端安裝執行。臨時環境變數CC和AR用於指定交叉編譯和彙編選項,在同一行命令的configure執行時將應用這些選項。

沒有錯誤的話就在/home/kim/gdb-build目錄下生成gdbserver可執行檔案,注意此時要更改其屬性,否則可能會出現無法訪問的情況,chmod 777 gdbserver將其更改為任何人都可以讀寫執行;使用arm-linux-strip命令處理一下gdbserver,將多餘的符號資訊刪除,可讓elf檔案更精簡,通常在應用程式的最後釋出時使用;然後把它燒寫到flash的根檔案系統分割槽的/usr/bin(在此目錄下,系統可以自動找到應用程式,否則必須到gdbserver所在目錄下執行之),或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上執行就行。

編譯好gdbserver後,把它拷貝到目標板上的 /usr/bin 目錄下,執行,如果能顯示幫助資訊,則交叉編譯成功,如:

#gdbserver
Usage:  gdbserver [OPTIONS] COMM PROG [ARGS ...]
        gdbserver [OPTIONS] --attach COMM PID
        gdbserver [OPTIONS] --multi COMM

COMM may either be a tty device (for serial debugging), or 
HOST:PORT to listen for a TCP connection.

Options:
  --debug               Enable general debugging output.
  --remote-debug        Enable remote protocol debugging output.
  --version             Display version information and exit.
  --wrapper WRAPPER --  Run WRAPPER to start new programs.
  --once                Exit after the first connection has closed.

如果提示其它錯誤資訊,如二進位制檔案無法執行,則表示編譯不成功。注意我們交叉編出來的gdbserver是無法在開發主機上執行的。