国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標(biāo)題: 怎么調(diào)試跑在 arm+linux系統(tǒng) 上的程序??? [打印本頁]

作者: linux_Ultra    時間: 2009-9-11 12:58
標(biāo)題: 怎么調(diào)試跑在 arm+linux系統(tǒng) 上的程序???
ARM板上構(gòu)造gdb +gdbserver調(diào)試環(huán)境


                S3C2410 ARM板上構(gòu)造gdb +gdbserver調(diào)試環(huán)境

遠(yuǎn)程調(diào)試環(huán)境由宿主機gdb和目標(biāo)機調(diào)試stub共同構(gòu)成,兩者通過串口或TCP連接。使用GDB標(biāo)準(zhǔn)程串行協(xié)議協(xié)同工作,實現(xiàn)對目標(biāo)機上的系統(tǒng)內(nèi)核和上層應(yīng)用的監(jiān)控和調(diào)試功能。調(diào)試stub是嵌入式系統(tǒng)中的一段代碼,作為宿主機GDB和目標(biāo)機調(diào)試程序間的一個媒介而存在。
         
       就目前而言,嵌入式Linux系統(tǒng)中,主要有三種遠(yuǎn)程調(diào)試方法,分別適用于不同場合的調(diào)試工作:
       用ROMMonitor調(diào)試目標(biāo)機程序、
       用KGDB調(diào)試系統(tǒng)內(nèi)核
       用gdbserver調(diào)試用戶空間程序。
      
       這三種調(diào)試方法的區(qū)別主要在于,目標(biāo)機遠(yuǎn)程調(diào)試stub的存在形式的不同,而其設(shè)計思路和實現(xiàn)方法則是大致相同的。
而我們最常用的是調(diào)試應(yīng)用程序。就是采用gdb+gdbserver的方式進行調(diào)試。在很多情況下,用戶需要對一個應(yīng)用程序進行反復(fù)調(diào)試,特別是復(fù)雜的程序。采用GDB方法調(diào)試,由于嵌入式系統(tǒng)資源有限性,一般不能直接在目標(biāo)系統(tǒng)上進行調(diào)試,通常采用gdb+gdbserver的方式進行調(diào)試。Gdbserver在目標(biāo)系統(tǒng)中運行,gdb則在宿主機上運行。

     目標(biāo)系統(tǒng)必須包括gdbserver程序,宿主機也必須安裝gdb程序。一般linux發(fā)行版中都有一個可以運行的gdb,但開發(fā)人員不能直接使用該發(fā)行版中的gdb來做遠(yuǎn)程調(diào)試,而要獲取gdb的源代碼包,針對arm平臺作一個簡單配置,重新編譯得到相應(yīng)gdb如armv4l-unknown-linux-gdb  。
1.source compile
download  from  http://cygwin.mirrors.pair.com/gdb/old-releases/
$ tar jxf gdb-5.2.1.tar.bz2
$ cd gdb-5.2.1
$ mkdir obj
$ cd obj
../configure --target=armv4l-unknown-linux \
        --enable-shared --prefix=/tmp/g \
        --without-x --disable-gdbtk --disable-tui \
        --without-included-regex --without-included-gettext
$ make
$ make install
$ mkdir gdb/gdbserver  
$ cd gdb/gdbserver
$ chmod +x ../../../gdb/gdbserver/configure
$ CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc \
        ../../../gdb/gdbserver/configure armv4l-unknown-linux \
        --without-included-regex --without-included-gettext
$ make
$ cp -vf gdbreplay gdbserver /tmp/g/bin

2.remote debugging

o cp  gdbserver from  host  to  target machine

o target machine
        gdbserver 59.69.74.87:2345 hello
   
出現(xiàn)
Process hello created; pid = 68

o host
        /tmp/g/bin/armv4l-unknown-linux-gdb hello
       (gdb) b main
       (gdb) target remote 203.239.30.207:2345
      出現(xiàn) Remote debugging using 59.69.75.186:2345
           0x40002a00 in ?? ()

       (gdb) c  //相當(dāng)于主機gdb的run命令
      
此時目標(biāo)機上出現(xiàn)
Remote debugging from host 59.69.74.87
hello,world

  連接成功后,這時候就可以輸入各種gdb命令如list、run、next、step、break等進行程序調(diào)試了。
調(diào)試結(jié)束出現(xiàn)                                                                                
Child exited with retcode = 0
                                                                                
Child exited with status 236
GDBserver exiting

        
說明:  
1)目標(biāo)機上的被調(diào)試程序hello, 與主機上的程序hello, 是相同的程序, 但位置不一樣,并非是用網(wǎng)絡(luò)共享的同一個位置的同一個文件, 一個在目標(biāo)機上 ,一個在主機上, 沒有關(guān)系.
2) host ip  : 59.69.74.87
    target  2410  ip is  59.69.75.186               
都是局域網(wǎng)ip.


作者: linux_Ultra    時間: 2009-9-11 13:06
構(gòu)建自己的gdb+gdbserver調(diào)試arm程序
沒做過之前感覺很深奧的,所以一直沒有嘗試過。現(xiàn)在要用了,只好搞起來,原來不過如此。:-)。從網(wǎng)上baidu了一些資料,照著做起來。人家講的都很清楚了,可你不一定行的。需要根據(jù)自己的情況,因地制宜。
我遇到的問題有:
首先就是編譯的問題。這個和你的系統(tǒng),gcc有關(guān)系了。比如我的系統(tǒng)是fedora6,gdb的低版本(6.2,5.2.1),編譯都通不過。只有6.6可以通過。我的交叉編譯器是赫赫有名的2.95.3,:-)。
再有就是調(diào)試中的問題。板子的lib庫中缺少一個文件:libthread_dd.so.1。解決方法就是從交叉編譯器的lib庫中copy一個了。 copy前用arm-linux-strip處理一下先。不處理,不好使。反正我的是不好使。沒處理前l(fā)ist命令無效,處理后就天下太平了。以下的內(nèi)容就是我的參考文獻(xiàn)了。:-)

嵌入式Linux的GDB調(diào)試環(huán)境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。調(diào)試時,應(yīng)用程序在嵌入式目標(biāo)系統(tǒng)上運行,而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)試的程序為test.c。
#arm-linux-gcc -g test.c -o test
2、在Target Board開啟gdbserver
#gdbserver  :2345 test
gdbserver開始監(jiān)聽2345端口(你也可以設(shè)其他的值),然后啟動test,你會看到“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上運行,但是調(diào)試目標(biāo)是ARM代碼。
(gdb)target remote :2345
注意:你的端口號必須與gdbserver開啟的端口號一致,這樣才能進行通信。
建立鏈接后,就可以進行調(diào)試了。調(diào)試在Host端,跟gdb調(diào)試方法相同。注意的是要用“c”來執(zhí)行命令,不能用“r”。因為程序已經(jīng)在Target Board上面由gdbserver啟動了。結(jié)果輸出是在Target Board端,用超級終端查看。

發(fā)表于: 2007-05-11,修改于: 2007-05-11 10:57 已瀏覽3141次,有評論5條 推薦 投訴
作者: 匿名    時間: 2009-12-4 08:48
哥們: 你好! 問個問題: run命令不能用, 要把目標(biāo)板上的程序從頭到尾執(zhí)行一遍, 該怎么弄? 發(fā)個答案到我Email:  yinmin_7966@126.com  行不? 謝謝!
作者: geyingzhen    時間: 2009-12-4 20:55
收藏到個人空間




歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: www.日本视频| 亚洲国产日韩欧美 | 国产99热| 日韩欧美一区二区中文字幕 | www福利视频 | 国产成人宗合 | 四虎成人www国产精品 | 一二三四免费视频社区 | 国产精品不卡在线 | h动漫免费观看 | 国产精品一区二区免费 | 网友自拍区一区二区三区 | 陆贞传奇第58集在线观看 | 太大了黑人温泉在线播放 | 天堂在线观看免费观看 | 成年女美黄网站大全免费播放 | 亚洲男人在线天堂 | 最新黄色网址在线观看 | 午夜视频在线观看一区 | 受胎岛无删减全集在线观看 | 日韩在线 在线播放 | 操狠狠| 日韩国产第一页 | www.99精品视频在线播放 | 欧美视频在线一区二区三区 | 日本处888xxxx | 亚洲国产成人久久精品动漫 | 98香蕉草草视频在线精品看 | 一区国严二区亚洲三区 | 羞羞网站在线看 | 欧美视频在线观看免费 | 香蕉欧美成人精品a∨在线观看 | 婷婷激情久久 | 欧美精品一区二区三区四区 | 精品一区二区三区四区五区 | 日本快播 | 91亚洲自偷手机在线观看 | 97在线播放 | 99久久精品免费 | 国产日韩中文字幕 | 欧美1314www伊人久久香网 |