1. 程式人生 > >Linux下CodeBlocks遠端除錯ARM程式環境搭建

Linux下CodeBlocks遠端除錯ARM程式環境搭建

Codeblocks:Release 8.02、宿主機:ubuntu10.04、開發板:嵌入式linux作業系統。

Codeblocks配置交叉編譯環境

如下圖所示,由上到下的選擇,1處直接選擇即可。2處是你交叉編譯器安裝位置,3 4 5 6 可以在你交叉編譯器安裝位置下的bin目錄找到。

注:2處的Compiler's installation directory 目錄一定要設定正確,一定是交叉編譯工具鏈 bin 目錄的上一級目錄,比如我的是 /usr/local/arm/arm-linux-4.4.3/bin/ 目錄的上一級,即為 /usr/local/arm/arm-linux-4.4.3。

注:

arm-linux-gdb和gdbserver預設是不安裝的,需要我們自己安裝。arm-linux-gdb安裝目錄最好也選擇為交叉編譯器安裝目錄,即/usr/local/arm/arm-linux-4.4.3。

image

2 arm-linux-gdb和gdbserver安裝方法

注:如上所述,arm-linux-gdb的安裝路徑建議是/usr/local/arm/arm-linux-4.4.3。

2.1 arm-linux-gdb的編譯安裝 

下載gdb-6.8.tar.bz2至工作目錄,gdb原始碼下載:http://ftp.gnu.org/gnu/gdb/

命令如下:

$tar -jxvf gdb-6.8.tar.bz2 
$cd gdb-6.8 
$./configure --target=arm-linux --enable-sim --prefix=/usr/local/arm/arm-linux-4.4.3

--prefix用於指定安裝路徑

$make 
$sudo make install 
完成後可以在/usr/local/arm/arm-linux-4.4.3/bin下找到arm-linux-gdb檔案 

2.2 arm-linux-gdbserver的編譯安裝 

進入/gdb/gdbserver,命令如下:

$cd gdb/gdbserver./configure --target=arm-linux --host=arm-linux 
$make CC=arm-linux-gcc 
(CC=arm-linux-gcc用於指定arm-linux編譯器) 
編譯成功後在當前目錄下會生成gdbserver檔案,拷貝至開發板上(可放入開發板/usr/bin/目錄,這樣在任何目錄均可執行gdbserver命令)。

3 配置nfs共享檔案目錄

3.1 安裝NFS軟體包

Ubuntu 上預設是沒有安裝 Ubuntu nfs 伺服器的,因此我們首先安裝 Ubuntu nfs 伺服器端: 
$sudo apt-get install nfs-kernel-server 

3.2 新增NFS共享檔案目錄 

安裝完NFS伺服器等相關軟體後,需要指定用於共享的NFS目錄,其方法為在/etc/exports檔案裡面設定對應的目錄及相應的訪問許可權,每一行對應一個設定。

$sudo vi /etc/exports 

在最後加入一行:/home/wcl/nfs_root/ *(rw,sync,no_root_squash) 

注: /rootfs 是要共享的目錄(必須保證真實存在,否則啟動nfs服務時會提示找不到該目錄), *代表允許所有的網段IP均可訪問, rw 是可讀寫許可權,sync 是資料同步寫入記憶體和硬碟,no_root_squash 是 Ubuntu nfs 客戶端分享目錄使用者的許可權,如果客戶端使用的是 root 使用者,那麼對於該共享目錄而言,該客戶端就具有 root 許可權。 

修改掛載點的屬性:

$chmod 777 /home/wcl/nfs_root/

啟動 nfs 服務:

$sudo /etc/init.d/nfs-kernel-server  start

在 nfs 服務已經啟動的情況下,如果修改了 /etc/exports 檔案,需要重啟 nfs 服務,以重新整理 nfs 的共享目錄 :

$sudo /etc/init.d/nfs-kernel-server restart 

3.3 本機測試NFS服務

將已經設定好的 nfs 共享目錄 mount 到另一個目錄下,測試看能否成功,比如:
$sudo mount -t nfs –o nolock 192.168.0.101:/home/wcl/nfs_root/  /mnt/nfs/ 

進入到 /mnt/nfs 目錄下檢視內容是否是掛載的 /home/wcl/nfs_root/ 目錄下的內容:

$cd /mnt/nfs/

$ls -l
注:如果出現 nfs mount device or resource busy ,這可能是因為多次掛載的原因,因此要先umount /mnt/nfs 一下 ,如果還是掛載不成功需要重系統來試試。 

4 修改Codeblock工程的除錯屬性

這裡通過網路來實現gdb的遠端除錯,所以需要將宿主機的一個目錄掛載到開發板上,這裡直接通過 nfs 服務掛載即可。選擇什麼目錄隨意,建議掛載工程所在目錄到ARM需要的位置,比如將宿主機(地址192.168.0.101)的/home/wcl/nfs_root/目錄掛載到ARM板的/mnt/nfs/,則在ARM上執行 

  $mount -t nfs -o nolock 192.168.0.101:/home/wcl/nfs_root/  /mnt/nfs/ 

修改Codeblock專案的工程屬性,在專案名稱上點選右鍵,選擇屬性:

image

image

修改debug的ip地址和埠,埠任意(與ARM板上的gdbserver監聽埠一致即可),ip地址是ARM板的ip地址,這是為了連線開發板的gdbserver而設定的。

5 除錯示例

進入 nfs 掛載的共享目錄下,執行 gdbserver 服務:

$gdbserver 192.168.0.101:1111 ./bin/debug/TestGdb

這裡ip地址是宿主機的,埠自定,但是要和codeblock設定的一致。./bin/debug/TestGdb 為Codeblock生成的ARM二進位制可除錯檔案。

然後再在宿主機中開始除錯,如下圖所示:

image

image