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

電子工程網

標題: 怎么調試跑在 arm+linux系統 上的程序??? [打印本頁]

作者: linux_Ultra    時間: 2009-9-11 12:58
標題: 怎么調試跑在 arm+linux系統 上的程序???
ARM板上構造gdb +gdbserver調試環境


                S3C2410 ARM板上構造gdb +gdbserver調試環境

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

     目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序。一般linux發行版中都有一個可以運行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠程調試,而要獲取gdb的源代碼包,針對arm平臺作一個簡單配置,重新編譯得到相應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
   
出現
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
      出現 Remote debugging using 59.69.75.186:2345
           0x40002a00 in ?? ()

       (gdb) c  //相當于主機gdb的run命令
      
此時目標機上出現
Remote debugging from host 59.69.74.87
hello,world

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

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


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

嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。調試時,應用程序在嵌入式目標系統上運行,而gdb調試在Host端。
一、編譯安裝gdb+gdbserver
首先下載gdb源碼,我下載的是gdb-6.6.tar.gz。
$tar xvzf gdb-6.6.tar.gz
$mkdir mygdb
$cd mygdb
必須要在你想要安裝的目錄下執行下邊的命令。
$../gdb-6.6/configure --target=arm-linux   \ --prefix=/home/a/mygdb
參數說明:target是你的目標板,我的是arm-linux,prefix是你要安裝的目標文件夾。
$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
去除調試信息。不去好像不行,我的就不行,去了就ok了。
復制到你的開發板上就可以了。
二、調試步驟
1、交叉編譯,帶參數-g加入調試信息。
假設要調試的程序為test.c。
#arm-linux-gcc -g test.c -o test
2、在Target Board開啟gdbserver
#gdbserver  :2345 test
gdbserver開始監聽2345端口(你也可以設其他的值),然后啟動test,你會看到“Process test created:pid=88”
3、回到Host端
#arm-linux-gdb test
最后一行顯示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”...
說明此gdb在X86的Host上運行,但是調試目標是ARM代碼。
(gdb)target remote :2345
注意:你的端口號必須與gdbserver開啟的端口號一致,這樣才能進行通信。
建立鏈接后,就可以進行調試了。調試在Host端,跟gdb調試方法相同。注意的是要用“c”來執行命令,不能用“r”。因為程序已經在Target Board上面由gdbserver啟動了。結果輸出是在Target Board端,用超級終端查看。

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




歡迎光臨 電子工程網 (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 久久99久久99精品免观看 | 国产精品k | 国产精品免费观看视频播放 | 久久久久国产精品美女毛片 | 成人爱情动作片 | 精品久久久噜噜噜久久7 | 天天色天天色 | 91视频首页 | 欧美成人在线网站 | 裙底盗摄国产精品 | 成人精品视频 | 成人免费网址在线观看黄动漫 | 男人天堂网在线播放 | 欧美大片无尺码在线观看 | 麻豆影视视频高清在线观看 | 一级特黄aaa大片在线观看 | 国内在线观看精品免费视频 | 天堂网2020| 毛片黄片视频 | 密臀aⅴ | 国产岛国片 | 大片黄| 亚洲视频影院 | 国产精品视频免费的 | 亚洲精品国精品久久99热 | 天天操夜夜摸 | 国产淫语| 91亚洲视频在线观看 | 久久刺激视频 | 亚洲手机在线手机观看高清hd | 国产69精品久久久久999小说 | 亚欧洲精品在线视频免费观看 | www.麻豆| 亚洲精品网站在线观看不卡无广告 | 成年网站未满十八禁毛片免费 | 日韩欧美一区二区三区在线播放 | 免费黄色在线视频 | 成人嫩草影院免费观看 | 日日干天天干 | 91情侣在线视频 | 日本一区二区三区四区不卡 |