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

查看: 7875|回復(fù): 3
打印 上一主題 下一主題

怎么調(diào)試跑在 arm+linux系統(tǒng) 上的程序???

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2009-9-11 12:58:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: arm , linux , 程序 , 調(diào)試 , 系統(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)境由宿主機(jī)gdb和目標(biāo)機(jī)調(diào)試stub共同構(gòu)成,兩者通過串口或TCP連接。使用GDB標(biāo)準(zhǔn)程串行協(xié)議協(xié)同工作,實(shí)現(xiàn)對目標(biāo)機(jī)上的系統(tǒng)內(nèi)核和上層應(yīng)用的監(jiān)控和調(diào)試功能。調(diào)試stub是嵌入式系統(tǒng)中的一段代碼,作為宿主機(jī)GDB和目標(biāo)機(jī)調(diào)試程序間的一個(gè)媒介而存在。
         
       就目前而言,嵌入式Linux系統(tǒng)中,主要有三種遠(yuǎn)程調(diào)試方法,分別適用于不同場合的調(diào)試工作:
       用ROMMonitor調(diào)試目標(biāo)機(jī)程序、
       用KGDB調(diào)試系統(tǒng)內(nèi)核
       用gdbserver調(diào)試用戶空間程序。
      
       這三種調(diào)試方法的區(qū)別主要在于,目標(biāo)機(jī)遠(yuǎn)程調(diào)試stub的存在形式的不同,而其設(shè)計(jì)思路和實(shí)現(xiàn)方法則是大致相同的。
而我們最常用的是調(diào)試應(yīng)用程序。就是采用gdb+gdbserver的方式進(jìn)行調(diào)試。在很多情況下,用戶需要對一個(gè)應(yīng)用程序進(jìn)行反復(fù)調(diào)試,特別是復(fù)雜的程序。采用GDB方法調(diào)試,由于嵌入式系統(tǒng)資源有限性,一般不能直接在目標(biāo)系統(tǒng)上進(jìn)行調(diào)試,通常采用gdb+gdbserver的方式進(jìn)行調(diào)試。Gdbserver在目標(biāo)系統(tǒng)中運(yùn)行,gdb則在宿主機(jī)上運(yùn)行。

     目標(biāo)系統(tǒng)必須包括gdbserver程序,宿主機(jī)也必須安裝gdb程序。一般linux發(fā)行版中都有一個(gè)可以運(yùn)行的gdb,但開發(fā)人員不能直接使用該發(fā)行版中的gdb來做遠(yuǎn)程調(diào)試,而要獲取gdb的源代碼包,針對arm平臺作一個(gè)簡單配置,重新編譯得到相應(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)于主機(jī)gdb的run命令
      
此時(shí)目標(biāo)機(jī)上出現(xiàn)
Remote debugging from host 59.69.74.87
hello,world

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

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

沙發(fā)
 樓主| 發(fā)表于 2009-9-11 13:06:15 | 只看該作者
構(gòu)建自己的gdb+gdbserver調(diào)試arm程序
沒做過之前感覺很深?yuàn)W的,所以一直沒有嘗試過,F(xiàn)在要用了,只好搞起來,原來不過如此。:-)。從網(wǎng)上baidu了一些資料,照著做起來。人家講的都很清楚了,可你不一定行的。需要根據(jù)自己的情況,因地制宜。
我遇到的問題有:
首先就是編譯的問題。這個(gè)和你的系統(tǒng),gcc有關(guān)系了。比如我的系統(tǒng)是fedora6,gdb的低版本(6.2,5.2.1),編譯都通不過。只有6.6可以通過。我的交叉編譯器是赫赫有名的2.95.3,:-)。
再有就是調(diào)試中的問題。板子的lib庫中缺少一個(gè)文件:libthread_dd.so.1。解決方法就是從交叉編譯器的lib庫中copy一個(gè)了。 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)試時(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  :2345 test
gdbserver開始監(jiān)聽2345端口(你也可以設(shè)其他的值),然后啟動(dòng)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上運(yùn)行,但是調(diào)試目標(biāo)是ARM代碼。
(gdb)target remote :2345
注意:你的端口號必須與gdbserver開啟的端口號一致,這樣才能進(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端,用超級終端查看。

發(fā)表于: 2007-05-11,修改于: 2007-05-11 10:57 已瀏覽3141次,有評論5條 推薦 投訴
板凳
匿名  發(fā)表于 2009-12-4 08:48:32
哥們: 你好! 問個(gè)問題: run命令不能用, 要把目標(biāo)板上的程序從頭到尾執(zhí)行一遍, 該怎么弄? 發(fā)個(gè)答案到我Email:  yinmin_7966@126.com  行不? 謝謝!
地板
發(fā)表于 2009-12-4 20:55:47 | 只看該作者
收藏到個(gè)人空間
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 性做久久久久久网站| 国产成人无码精品久久久按摩 | 久久99re6国产在线播放| 无码爽死成人777在线观看网站| 日日欧美| 欧洲精品视频完整版在线| 天堂在线网站| 亚洲精品一区二区三区四区手机版| 2021国产精品| 青娱国产区在线| 青青视频网| 日日精品| 亚洲精品第一国产综合野| 扒开老师粉嫩的泬10P| 色琪琪久久热在线| 日韩欧美一二三区| 色噜噜在线播放| 四虎官网| 边摸边吃奶边做下面视频| 欧美日韩看看2015永久免费| 日本黄色免费一级片| 欧美亚洲综合一区| 亚洲逼逼| 在线看免费视频的网站| 免费人成网站在线观看10分钟| 日韩欧美在| 日本免费一区二区三区看片| 伊人在综合| 御书屋免费自由阅读器官网| 蜜桃精品成人影片| 四虎成人精品免费影院| 日韩精品123| 四虎欧美| 俄罗斯爱爱| 亚洲中文在线精品国产| 婷婷色伊人| 亚洲人成网站999久久久综合| 中国老太婆bbbbbxxxxx| 久久久久亚洲精品影视| 四虎免费在线观看视频| 天天操天天插天天射|