作者: nguin 出自: http://www.linuxdiyf.com
我采用的是nfs目標(biāo)板掛載本機(jī)目錄的方法,當(dāng)然首先,你得開通本機(jī)的nfs共享服務(wù),具體步驟如下:
1、進(jìn)入/etc目錄,vim exports這個(gè)文件,在里面添加/home 192.168.0.*(rw,sync)保存后退出
注:/home 為要共享的文件夾的名稱,192.168.0.*為本NFS服務(wù)器允許訪問的客戶端ip,若nfs不成功,后面參數(shù)rw ro等標(biāo)志對(duì)文件夾操作權(quán)限,sync:數(shù)據(jù)同步寫入內(nèi)存和硬盤,也可以使用async,此時(shí)數(shù)據(jù)會(huì)先暫存于內(nèi)存中,而不立即寫入硬盤??梢詫⒗ㄌ?hào)里面的sync去掉。
2、重新啟動(dòng)nfs服務(wù),命令為:/sbin/service nfs restart
3、輸入命令route del default來關(guān)閉網(wǎng)關(guān)(加快mount速度)
4、mount 192.168.0.47(為本機(jī)的ip):/home /mnt用以測(cè)試本機(jī)是否開通nfs服務(wù)。
cd /mnt目錄下,看mnt下的內(nèi)容是否與home的內(nèi)容一致,若一致,表明已經(jīng)開通nfs服務(wù)。
當(dāng)本機(jī)的nfs服務(wù)開通后,你還需要配置開發(fā)板的ip地址,由于各個(gè)開發(fā)板ip地址配置方法不一樣,所以,假設(shè)開發(fā)板的ip地址為192.168.2.100.
搭建交叉編譯環(huán)境的步驟:
1、一般在安裝linux時(shí)候,自動(dòng)安裝c編譯環(huán)境,因此不需要再重新安裝gcc編譯器。
2、安裝交叉編譯器
從
ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下載交叉編譯器cross-3.2.tar.bz2, 存放在/usr/local目錄下。
切換致該目錄:
# cd /usr/local
# mkdir arm
然后解壓cross-3.2.tar.bz2:
# tar jxvf cross-3.2.tar.bz2 –C /usr/local/arm
解壓后把/usr/local/arm/usr/local/arm中最后一個(gè)arm拷貝到/usr/local,也就是用命令cd/usr/local/arm/usr/local中,用cp -a arm /usr/local把a(bǔ)rm拷貝到/usr/local中去。
3、把交叉編譯器的路徑加入到PATH。(兩種方法a,b)
a、# export PATH=$PATH:/usr/local/arm/bin
注:(這只能在當(dāng)前的終端下才是有效的,)
b、修改/etc/profile 文件:
# vim /etc/profile
增加路徑設(shè)置,在末尾添加如下:
export PATH=$PATH:/usr/local/arm/bin
4、使新的環(huán)境變量生效。
# source /etc/profile
5、檢查是否將路徑加入PATH的方法。
# echo $PATH
如果顯示的內(nèi)容中有/usr/local/arm/bin,說明已經(jīng)將交叉編譯器的路徑加入PATH。自此,交叉編譯環(huán)境安裝完成。
6、測(cè)試。
下面我們就來測(cè)試一個(gè)簡(jiǎn)單的例子。
/*Hello.c*/
#include
int main()
{
printf(“hello word!\n”);
return 0;
}
程序輸好以后確認(rèn)無誤,保存。進(jìn)入程序文件所在目錄
# arm-linux-gcc hello.c –o hello
(-o可以理解為“目標(biāo)為生成”)arm-linux-gcc是第一次出現(xiàn),有人可能會(huì)問這個(gè)哪里來的,不妨打開剛才安裝的交叉編譯工具目錄/usr/local/arm-linux/arm-linux/bin/可以發(fā)現(xiàn)里面有一個(gè)arm-linux-gcc文件,這個(gè)就是針對(duì)arm的CPU的gcc編譯器了。以后用其它編譯工具鏈?zhǔn)揭部梢酝ㄟ^這種方法看看其編譯器是什么了。編譯好了以后就可以下載到目標(biāo)機(jī)進(jìn)行測(cè)試了。當(dāng)然也可以先在PC機(jī)上測(cè)試正誤。用gcc hello.c –o hello就可以生成PC機(jī)上程序了,在運(yùn)行./hello就可以發(fā)現(xiàn)終端顯示hello!字樣。用arm-linux-gcc編譯的程序在PC機(jī)上是不能運(yùn)行的,運(yùn)行后給出錯(cuò)誤報(bào)告:無法執(zhí)行二進(jìn)制文件。說明經(jīng)過交叉編譯環(huán)境編譯出的文件是硬件可執(zhí)行的二進(jìn)制代碼文件.
7、交叉編譯環(huán)境搭建成功。
要經(jīng)行g(shù)dbserver遠(yuǎn)程調(diào)試,還必須安裝gdb遠(yuǎn)程調(diào)試工具:
gdb的源代碼包可以從http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,最新版本為gdb-6.4。下載到某個(gè)目錄,筆者下載到自己的用戶目錄:/home/vicky。
下載完后,進(jìn)入/home/vicky目錄,配置編譯步驟如下:
#tar jxvf gdb-6.4-tar-bz2
#cd gdb-6.4
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
(這一步的時(shí)候可能會(huì)有問題,提示一個(gè)函數(shù)中(具體函數(shù)名不記得了)parse error,就是unsigned前邊多了一個(gè)”}”,你用vi進(jìn)入那一行把它刪掉就行了。一般都不會(huì)出錯(cuò)的。)
#make install
#export PATH=$PATH:/usr/local/arm-gdb
進(jìn)入gdbserver目錄:
#./configure --target=arm-linux –host=arm-linux
#make CC=/usr/local/arm/bin/arm-linux-gcc
(這一步要指定arm-linux-gcc的位置,可能跟你的不一樣)
沒有錯(cuò)誤的話就在gdbserver目錄下生成gdbserver可執(zhí)行文件,把它燒寫到flash的根文件系統(tǒng)分區(qū),或通過nfs mount的方式都可以。只要保證gdbserver能在開發(fā)板上運(yùn)行就行。
下面就可以用gdb+gdbserver調(diào)試我們開發(fā)板上的程序了。在目標(biāo)板上運(yùn)行g(shù)dbserver,其實(shí)就是在宿主機(jī)的minicom下,我的redhat linux裝在vmware下的。我是在minicom下#mount 192.168.2.100:/ /tmp后做的(這里參數(shù)-onolock可以不加,不加這一步執(zhí)行得反而更快些),hello和gdbserver都是位于linux根目錄下,把主機(jī)根目錄掛在到開發(fā)板的/tmp目錄下。
要進(jìn)行g(shù)db調(diào)試,首先要在目標(biāo)系統(tǒng)上啟動(dòng)gdbserver服務(wù)。在gdbserver所在目錄下輸入命令:
(minicom下)
#cd /tmp
#./gdbserver 192.168.2.100:2345 hello
192.168.2.100為宿主機(jī)IP,在目標(biāo)系統(tǒng)的2345端口開啟了一個(gè)調(diào)試進(jìn)程,hello為要調(diào)試的程序。
出現(xiàn)提示:
Process /tmp/hello created: pid="80"
Listening on port 2345
(另一個(gè)終端下)
#cd /
#export PATH=$PATH:/usr/local/arm-gdb/bin
#arm-linux-gdb hello
(gdb) target remote 192.168.2.223:2345
(192.168.2.223為開發(fā)板IP)
出現(xiàn)提示:
Remote debugging using 192.168.2.223:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同時(shí)在minicom下提示:
Remote debugging from host 192.168.2.100
(gdb)
連接成功,這時(shí)候就可以輸入各種gdb命令如list、run、next、step、break等進(jìn)行程序調(diào)試了。
注:在遠(yuǎn)程調(diào)試的這些步驟中nfs配置和安裝交叉編譯工具,以及安裝gdb工具的沒有什么順序,只是主意再gdbserver遠(yuǎn)程連接前要配置好開發(fā)板的ip地址。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/31/showart_696715.htmlhttp://blog.chinaunix.net/u/24474/showart_213262.html
嵌入式Linux的GDB調(diào)試環(huán)境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。調(diào)試時(shí),應(yīng)用程序在嵌入式目標(biāo)系統(tǒng)上運(yùn)行,而gdb調(diào)試在Host端。
一、編譯安裝gdb+gdbserver
首先下載gdb源碼,我下載的是gdb-6.6.tar.gz。
$tar xvzf gdb-6.6.tar.gz
$mkdir mygdb
$cd mygdb
必須要在你想要安裝的目錄下執(zhí)行下邊的命令。
$../gdb-6.6/configure --target=arm-linux \ --prefix=/home/a/mygdb
參數(shù)說明:target是你的目標(biāo)板,我的是arm-linux,prefix是你要安裝的目標(biāo)文件夾。
$make
$make install
然后建立gdbserver。
$mkdir mygdbserver
$cd mygdbserver
$chmod +x ../gdb-6.6/gdb/gdbserver/configure
$CC=arm-linux-gcc ../gdb-6.6/gdb/gdbserver/configure \
--host=arm-linux --prefix=/home/a/mygdbserver
$make
$make install
$arm-linux-strip gdbserver
去除調(diào)試信息。不去好像不行,我的就不行,去了就ok了。
復(fù)制到你的開發(fā)板上就可以了。
二、調(diào)試步驟
1、交叉編譯,帶參數(shù)-g加入調(diào)試信息。
假設(shè)要調(diào)試的程序?yàn)閠est.c。
#arm-linux-gcc -g test.c -o test
2、在Target Board開啟gdbserver
#gdbserver <host-ip>:2345 test
gdbserver開始監(jiān)聽2345端口(你也可以設(shè)其他的值),然后啟動(dòng)test,你會(huì)看到“Process test created:pid=88”
3、回到Host端
#arm-linux-gdb test
最后一行顯示:This GDB was configured as “--h(huán)ost=i686-pc-linux-gnu,--target=arm-linux”...
說明此gdb在X86的Host上運(yùn)行,但是調(diào)試目標(biāo)是ARM代碼。
(gdb)target remote <target-board-ip>:2345
注意:你的端口號(hào)必須與gdbserver開啟的端口號(hào)一致,這樣才能進(jìn)行通信。
建立鏈接后,就可以進(jìn)行調(diào)試了。調(diào)試在Host端,跟gdb調(diào)試方法相同。注意的是要用“c”來執(zhí)行命令,不能用“r”。因?yàn)槌绦蛞呀?jīng)在Target Board上面由gdbserver啟動(dòng)了。結(jié)果輸出是在Target Board端,用超級(jí)終端查看。