因為有很多的小伙伴是從單片機轉過來的,用慣了單片機上的JLINK調試程序,換到Linux上非常的不習慣。確實,如果能設置斷點,單步調試,查看變量,那確實是太爽了,那么在我們的Linux可以做到嗎,答案當然是可以的。 在之前的文章中,對gdb調試做過一期簡單的介紹番外篇|使用gdb對程序進行調試,但是之前的文章我們是在ubuntu上對應用程序進行的調試,不是在ARM板上進行的調試,相對于其他的軟件開發,嵌入式軟件的調試手段比較有限,我相信一定有很多人的調試手段依然是使用最原始的打印的辦法。這一期我們就介紹一種可以在ARM板上調試應用代碼的辦法。 基本思路 采用這種的方式進行遠程調試,目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序。一般linux發行版中都有一個可以運行的gdb,但我們不能直接使用該發行版中的gdb來做遠程調試,而要獲取gdb的源代碼包,針對arm平臺作一個簡單配置,重新編譯得到相應gdb,如armv4。 接下來,大家跟著法師的思路,一起來搭建這個調試環境。在任意ARM板,都可以搭建。 iTOP4412搭建環境 ![]() 搭建步驟 第一步:下載gdb壓縮包 下載地址:http://ftp.gnu.org/gnu/gdb/ 這里我們下載的是gdb-7.8.1.tar.gz這個版本。 第二步:編譯并安裝gdb 把gdb壓縮包放到ubuntu之后,我們進入到解壓生成的文件,如下圖示: ![]() 生成Makefile,輸入以下命令:target為目標平臺,prefix為安裝路徑。 /configure -target=arm-none-linux-gnueabi --prefix=/home/arm-linux-gdb/arm-linux-gdb 如下圖所示: ![]() 編譯gdb,輸入make,編譯成功如下圖所示: ![]() 安裝gdb,輸入命令make install,一會我們在ubuntu上啟動的就是這個gdb,安裝成功如下圖所示: ![]() 進入gdb源碼下的gdb/gdbserver目錄,如下圖所示: ![]() 生成Makefile,輸入以下命令:target為目標平臺,prefix為安裝路徑。 ./configure -target=arm-none-linux-gnueabi --prefix=/home/arm-linux-gdb/arm-linux-gdbserver ![]() 然后執行make命令,注意,這里交叉編譯器一定要寫絕對路徑。如下圖所示: make CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc編譯過程中會出現以下錯誤: ![]() 我們打開當前路徑下的config.h文件,如下圖所示: ![]() 注釋掉196行左右的HAVE_SYS_REG_H這個宏定義,如下圖所示: ![]() 注釋掉116行#include ![]() 保存退出,然后再次編譯。編譯成功如下圖所示: ![]() 編譯完成后,使用make install 命令安裝,安裝完成后會在安裝路徑生成一個文件夾,如下圖所示: ![]() 第三步,在ARM板上搭建遠程調試環境 把gdb/gdbserver下的gdbserver 拷貝到開發板的bin文件夾下。 ![]() 拷貝完成如下圖所示: ![]() 測試 測試代碼: ![]() 編譯測試程序,編譯的時候要加-g參數,編譯完成之后,我們把測試代碼通過NFS放在開發板上,然后在測試代碼所在的路徑下輸入以下命令啟動服務器,其中192.168.2.230為ubuntu的IP,5000為端口號。 gdbserver 192.168.2.230:5000 ./test啟動成功如下圖所示: ![]() 在測試程序test所在目錄啟動ubuntu上的gdb,這里啟動的gdb為我們剛剛安裝的gdb,我們輸入以下命令: /home/arm-linux-gdb/arm-linux-gdb/bin/arm-none-linux-gnueabi-gdb test 啟動成功后如下圖所示: ![]() 連接開發板,輸入以下命令,192.168.2.23為開發板的IP,5000為端口號。 target remote 192.168.2.23:5000連接成功后開發板會打印以下信息,如下圖所示: ![]() 接下來,我們就可以在ubuntu上使用命令來設置斷點,單步調試開發板上的程序了 ![]() |