Linux嵌入式開發偵錯程式的搭建和使用(mips)
阿新 • • 發佈:2019-02-10
1
下載偵錯程式原始碼偵錯程式的原始碼可以在GNU的網站上下載到:
http://www.gnu.org/software/gdb/download/
本文件以網站上最新的版本7.0.1為編譯物件。
2
編譯偵錯程式原始碼2.1
伺服器環境在編寫本文件的時候,所使用的伺服器環境如下:
CPU
: Intel(R) Pentium(R) D CPU 2.80GHz
MEM
: 1.5GB
OS
: Fedora 9 ,x86_64位版本
2.2
原始碼檔案結構下載的原始碼包檔名是gdb-7.0.tar.tar,需要在Linux下解壓縮:
# tar xzvf gdb-7.0.tar.tar
解壓縮後會生成一個新的目錄gdb-7.0,目錄結構如下:
2.3
編譯gdb在編譯gdb之前,首先需要建立一個資料夾。我們建立一個跟gdb-7.0平行的資料夾:
進入資料夾buildgdb:
# cd buildgdb
然後執行configure指令:
# ../gdb-7.0/configure --target=mips-linux --prefix=/home/wangtq/test/buildgdb
(注:--target是指目標機器的cpu架構,我們現在用的是mips架構的cpu,所以使用mips-linux。如果你用的是ARM架構的cpu,則target的值設為arm-linux。--prefix指定了將檔案安裝在什麼地方,示例中將檔案安裝在buildgdb所在的目錄。)
指令執行的效果如下圖所示:
Configure執行後,會去檢測Linux系統中是否安裝了執行所需要的工具以及當前系統的配置,並根據這些資訊生成Makefile檔案。
執行完成後,依次執行下列的指令:
# make
# make install
這時,我們看到在buildgdb目錄下有如下的目錄結構:
在bin/目錄下,有三個檔案:
這三個檔案就是我們所需要的檔案。將這三個檔案複製到/bin目錄下:
# cp mips-linux-* /bin
gdb的編譯到此完成。
2.4
編譯gdbserver跟編譯gdb一樣,編譯gdbserver時,我們也需要建立一個資料夾,比如:
# mkdir buildgdbserver
這時,目錄結構如下:
我們進入目錄buildgdbserver,然後執行gdbserver的configure檔案:
# cd buildgdbserver
# ../gdb-7.0/gdb/gdbserver/configure --host=x86_64-linux --target=mips-linux CC=/cross_compile_path/cross_compile_gcc
(注:--host是指Linux Server的CPU架構。我們使用的是x86的64位機,所以指定為x86_64-linux,如果是32位的x86,則為x86-linux。 --target的含義跟編譯gdb時的定義一樣。CC定義了交叉編譯工具,請輸入實際所使用的交叉編譯工具gcc。)
跟gdb的編譯一樣,configure會檢測系統配置,然後生成Makefile檔案。
下圖是configure的一個示例:
執行完成後,執行make指令:
# make
這時,在buildgdbserver下會生成gdbserver和gdbreplay兩個工具。將這兩個工具copy到你的NFS目錄下的bin資料夾裡,比如在我們的Linux Server下的目錄/var/lib/tftpboot/rootfs.liqh/bin/,或者通過工具把它們下載到板子上。
3
開始除錯下圖是基本的除錯架構:
目標開發板和主機通過網路連線在一起,目標板上執行gdbserver,開發板上執行gdb。
首先,在開發板啟動u-boot並等進入了NFS後,輸入命令:
# gdbserver HostIPort prog
其中HostIP是指Linux Server的IP,Port可以隨意指定為大於1024的值。prog是你需要除錯的程式碼。注意,在編譯prog的時候,必須加上-g選項。
比如在除錯PVRDemo的時候,等板子啟動完成後,將驅動等裝載後,輸入:
# gdbserver 10.2.100.251:2222 PVRDemo
這時會出現”Listening on port 2222”的提示,如下圖:
接著在Linux Server上依次輸入:
# mips-linux-gdbtui /nfs_path/prog
#(gdb) target remote TargetIPort
mips-linux-gdbtui是一個帶除錯程式碼的工具,可以在執行到斷點的時候,顯示出斷點處的程式碼。如下圖所示:
“/nfs_path/prog”是指你當前執行的帶除錯資訊的程式。這個程式必須跟我們在板子上啟動的程式是同一個。
“target remote TargetIPort”:target remote使得我們在Host端偵錯程式和板子上的gdbserver建立TCP/IP通訊,TargetIP是板子的IP地址,Port跟板子上使用gdbserver時使用的Port相同。
通訊成功以後,我們能夠在Host端的偵錯程式上看到類似於如下的資訊:
(gdb) target remote 10.2.100.249:2222
Remote debugging using 10.2.100.249:2222
這時,在Linux Server上輸入:
(gdb) c
程式開始執行。
下載偵錯程式原始碼偵錯程式的原始碼可以在GNU的網站上下載到:
http://www.gnu.org/software/gdb/download/
本文件以網站上最新的版本7.0.1為編譯物件。
2
編譯偵錯程式原始碼2.1
伺服器環境在編寫本文件的時候,所使用的伺服器環境如下:
CPU
: Intel(R) Pentium(R) D CPU 2.80GHz
MEM
: 1.5GB
OS
: Fedora 9 ,x86_64位版本
2.2
原始碼檔案結構下載的原始碼包檔名是gdb-7.0.tar.tar,需要在Linux下解壓縮:
# tar xzvf gdb-7.0.tar.tar
解壓縮後會生成一個新的目錄gdb-7.0,目錄結構如下:
2.3
編譯gdb在編譯gdb之前,首先需要建立一個資料夾。我們建立一個跟gdb-7.0平行的資料夾:
進入資料夾buildgdb:
# cd buildgdb
然後執行configure指令:
# ../gdb-7.0/configure --target=mips-linux --prefix=/home/wangtq/test/buildgdb
(注:--target是指目標機器的cpu架構,我們現在用的是mips架構的cpu,所以使用mips-linux。如果你用的是ARM架構的cpu,則target的值設為arm-linux。--prefix指定了將檔案安裝在什麼地方,示例中將檔案安裝在buildgdb所在的目錄。)
指令執行的效果如下圖所示:
Configure執行後,會去檢測Linux系統中是否安裝了執行所需要的工具以及當前系統的配置,並根據這些資訊生成Makefile檔案。
執行完成後,依次執行下列的指令:
# make
# make install
這時,我們看到在buildgdb目錄下有如下的目錄結構:
在bin/目錄下,有三個檔案:
這三個檔案就是我們所需要的檔案。將這三個檔案複製到/bin目錄下:
# cp mips-linux-* /bin
gdb的編譯到此完成。
2.4
編譯gdbserver跟編譯gdb一樣,編譯gdbserver時,我們也需要建立一個資料夾,比如:
# mkdir buildgdbserver
這時,目錄結構如下:
我們進入目錄buildgdbserver,然後執行gdbserver的configure檔案:
# cd buildgdbserver
# ../gdb-7.0/gdb/gdbserver/configure --host=x86_64-linux --target=mips-linux CC=/cross_compile_path/cross_compile_gcc
(注:--host是指Linux Server的CPU架構。我們使用的是x86的64位機,所以指定為x86_64-linux,如果是32位的x86,則為x86-linux。 --target的含義跟編譯gdb時的定義一樣。CC定義了交叉編譯工具,請輸入實際所使用的交叉編譯工具gcc。)
跟gdb的編譯一樣,configure會檢測系統配置,然後生成Makefile檔案。
下圖是configure的一個示例:
執行完成後,執行make指令:
# make
這時,在buildgdbserver下會生成gdbserver和gdbreplay兩個工具。將這兩個工具copy到你的NFS目錄下的bin資料夾裡,比如在我們的Linux Server下的目錄/var/lib/tftpboot/rootfs.liqh/bin/,或者通過工具把它們下載到板子上。
3
開始除錯下圖是基本的除錯架構:
目標開發板和主機通過網路連線在一起,目標板上執行gdbserver,開發板上執行gdb。
首先,在開發板啟動u-boot並等進入了NFS後,輸入命令:
# gdbserver HostIPort prog
其中HostIP是指Linux Server的IP,Port可以隨意指定為大於1024的值。prog是你需要除錯的程式碼。注意,在編譯prog的時候,必須加上-g選項。
比如在除錯PVRDemo的時候,等板子啟動完成後,將驅動等裝載後,輸入:
# gdbserver 10.2.100.251:2222 PVRDemo
這時會出現”Listening on port 2222”的提示,如下圖:
接著在Linux Server上依次輸入:
# mips-linux-gdbtui /nfs_path/prog
#(gdb) target remote TargetIPort
mips-linux-gdbtui是一個帶除錯程式碼的工具,可以在執行到斷點的時候,顯示出斷點處的程式碼。如下圖所示:
“/nfs_path/prog”是指你當前執行的帶除錯資訊的程式。這個程式必須跟我們在板子上啟動的程式是同一個。
“target remote TargetIPort”:target remote使得我們在Host端偵錯程式和板子上的gdbserver建立TCP/IP通訊,TargetIP是板子的IP地址,Port跟板子上使用gdbserver時使用的Port相同。
通訊成功以後,我們能夠在Host端的偵錯程式上看到類似於如下的資訊:
(gdb) target remote 10.2.100.249:2222
Remote debugging using 10.2.100.249:2222
這時,在Linux Server上輸入:
(gdb) c
程式開始執行。
這個時候,你可以設定斷點,觀察變數,檢視函式呼叫堆疊等等。
文章出處:http://bbs.chinaunix.net/thread-1940280-1-1.html