1. 程式人生 > >linux交叉編譯gdb/gdbserver

linux交叉編譯gdb/gdbserver

在對嵌入式進行除錯之前,必須要生成偵錯程式。經典地,Linux平臺下的偵錯程式為gdb。
本文僅講述如何生成偵錯程式,不涉及其中的論理——要找理論,找老師或者課本。

1、下載gdb:
下載地址為:
http://ftp.gnu.org/gnu/gdb/

按照一般的想法,最新版本越好,因此下載7.2這個版本。當然,凡事無絕對。
我們以gdb-7.2.tar.bz2 這個檔案為例。
2、解壓縮:

$ tar jxvf gdb-7.2.tar.bz2

注:小技巧:Linux下一般壓縮檔案字尾為.tar.bz2和.tar.gz,它們解壓命令有兩三個選項是一致的:

xf(v),前者再加上j選項,後者再加上z選項。

3、進入該目錄

$ cd gdb-7.2/

4、配置

$./configure --target=arm-linux --program-prefix=arm-linux- --prefix=/usr/local/arm-gdb

:--target=arm-linux意思是說目標平臺是運行於ARM體系結構的linux核心;--program-prefix=arm-linux-是指生成的可執行檔案的字首,比如arm-linux-gdb,--prefix是指生成的可執行檔案安裝在哪個目錄,這個目錄需要根據實際情況作選擇。如果該目錄不存在,會自動建立,當然,許可權足夠的話。

5、編譯、安裝

$  make

$ make install

幸運的話,會在--prefix指定的目錄下生成三個子目錄:bin、lib、share,我們需要的arm-linux-gdb就在其中的bin目錄下。
如果你不小心檢視它的大小的話,會發覺它有14MB那麼大!天吶!怎麼會佔這麼多空間?沒關係,我們可以為它瘦身。沒錯!就是使用strip命令!

$ strip arm-linux-gdb -o arm-linux-gdb-stripped
$ ls -lh 
總計 33M

-rwxr-xr-x 1 latelee root 14M 12-14 16:16 arm-linux-gdb

-rwxr-xr-x 1 latelee
 root 3.1M 12-14 16:25 arm-linux-gdb-stripped

可以看到,strip後的檔案大小隻有3.1MB,瘦身效果明顯!如果做廣告的話,絕對有說服力。
這個檔案就是我們以後遠端除錯時在主機上執行的交叉偵錯程式了:在主機上執行,除錯的卻是另一種體系結構的程式碼。但是,光有主機的偵錯程式還不夠。還需要在目標板上執行一個叫gdbserver的東東。這個東東是怎麼來的呢?

1、在剛才那個gdb解壓後的目錄:gdb-7.2,進入./gdb/gdbserver子目錄

$ cd gdb/gdbserver

$ pwd 

/home/gotohell/soft/gdb-7.2/gdb/gdbserver

2、配置

$ ./configure --target=arm-linux --host=arm-linux

這裡的--host指定了生成可執行檔案執行的平臺和系統:運行於ARM平臺的Linux系統
3、編譯

$  make

一切如果沒有問題的話,會在當前目錄下生成gdbserver這個只有在ARM下執行的檔案。

注:網上絕大部分資料顯示,這裡的make會出錯,說某個標頭檔案不存在。經本人親自掛帥出征,在gdb的7.2版本不存在那個問題。低於7.2版本的就要注意了。解決方法也簡單,在配置後(執行./configure後),將生成的config.h檔案中

#define HAVE_SYS_REG_H 1

語句註釋掉即可。
另外,也有資料說編譯gdbserver需要指定交叉編譯器(即執行make CC=arm-linux-gcc),但此處直接make,也沒問題。當然,交叉編譯器需要安裝好並設定好環境變數。我們看一下這個是什麼傢伙:

$ file gdbserver

gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses 

shared libs), for GNU/Linux 2.6.14, not stripped

32位,ARM平臺,動態連結,未strip。
同樣,我們也減小它的體積:

$ arm-linux-strip gdbserver -o gdbserver-stripped

$ ls -lh | grep gdbserver 

-rwxr-xr-x 1 latelee root 534K 12-14 15:50 gdbserver

-rwxr-xr-x 1 latelee root 173K 12-14 16:36 gdbserver-stripped

瘦身效果同樣那麼明顯!
注意,這裡必須使用strip的交叉版本,也就是arm-linux-strip

到此,我們生成了兩個重量級別的檔案:arm-linux-gdbgdbserver。它們的版本是一致的,這一點非常重要。我們需要將gdbserver下載到開發板中,——可以通過各種各樣的手段,包括但不限於NFS。除錯時需要在開發板中執行這個程式。同時在主機中執行arm-linux-gdb偵錯程式。

(HTML語法著色工具由遲思堂工作室李遲提供,“latelee”為系統保留詞,以紅色加粗字型出現,特此說明)

至於除錯的技術及除錯的步驟,不在本文範圍內。在後續文章中,應該也許大概可能會有相關內容的出現。大家就不用等待了。

轉載:http://blog.csdn.net/hejianhua/article/details/7254836

相關推薦

linux交叉編譯gdb/gdbserver

在對嵌入式進行除錯之前,必須要生成偵錯程式。經典地,Linux平臺下的偵錯程式為gdb。 本文僅講述如何生成偵錯程式,不涉及其中的論理——要找理論,找老師或者課本。 1、下載gdb: 下載地址為: http://ftp.gnu.org/gnu/gdb/ 按照一般的想法,最新

交叉編譯gdb+gdbserver實現遠端除錯

 總結一下linux下交叉編譯gdb並遠端除錯程式的知識  1.配置交叉編譯工具鏈到系統環境變數PATH下 export PATH=$PATH:'交叉編譯工具鏈的絕對路徑‘ 2.編譯主機端執行的gdb,但是處理的程式碼是arm平臺 ./configure --target=

GDB arm-linux交叉編譯移植和使用方法(特別是對於正在執行的程式或者段錯誤的程式進行分析)

測試程式碼中的test1是用來定位堆疊段錯誤,Delay函式是用來定位程式阻塞,都可以用gdb定位出來,如下:  (1)測試程式執行時首先會有個段錯誤:./gdbtest & [[email protected] user0]$ [65334.020000] pgd = c3e14000 [

arm linux交叉編譯gdb除錯工具

       由於嵌入式系統資源有限性,一般不能直接在目標系統上進行除錯,通常採gdb+gdbserver的方式進行除錯。Gdbserver在目標系統中執行,gdb則在宿主機上執行。要進行GDB除錯,目標系統必須包括gdbserver程式,宿主機也必須安裝gdb程式,一般li

linux powerpc 交叉編譯gdb

1、下載termcap-1.3.1.tar.gz和gdb-7.5.tar.gz  2、編譯termcap:  ./configure --host=powerpc-none-linux-gnuspe --prefix=/home/admin/gdb/install/  修改

debain實現交叉編譯gdbgdbserver

        最近工作比較忙,終於用休息時間了,就寫點東西吧, 在進入主題之前,我先聊聊歐洲盃義大利對德國的比賽(我不是一個足球迷,有一個朋友是一個足球迷,被他拉著看的),當巴神打進 第二個球時有一個鏡頭上有個球迷掉下眼淚,我為足球的魅力縮感動,也為這個偉大的運動所感到

Linux交叉編譯GDB

$ tar jxvf gdb-7.2.tar.bz2 小技巧:Linux下一般壓縮檔案字尾為.tar.bz2和.tar.gz,它們解壓命令有兩三個選項是一致的: xf(v),前者再加上j選項,後者再加上z選項。 3、進入該目錄 $ cd gdb-7.2/ 4、配置 $.

linux交叉編譯gcc4.8.3

切換目錄 all make multi req 交叉 gcc arm-linux 生成 1.環境: Ubuntu 16.04 2.獲取 wget mirrors.ustc.edu.cn/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2 3.解壓 tar

交叉編譯 gdb-8.1.1

工具鏈:arm-linux-gnueabihf-*** 下載路徑:http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/index_FDS.html   gdb原始碼 下載路徑:ftp://sourc

esp8266~入坑sdk 3.0 IDF框架和linux交叉編譯環境搭建

一、交叉編譯環境搭建步驟 1、安裝virtualbox、ubuntu虛擬機器共享windows資料夾,注!virtualbox最好裝在C盤,不然安裝虛擬工具經常會失敗。 2、新建共享目錄,掛載共享目錄到虛擬機器中 sudo mount -t vboxsf share /mn

linux交叉編譯和核心編譯

20181005記 一、交叉編譯arm-linux-gcc 由於嵌入式系統資源匱乏,一般不能像 PC 一樣安裝本地編譯器和偵錯程式,不能在本地編寫、編譯和除錯自身執行的程式,而需藉助其它系統如 PC 來完成這些工作,這樣的系統通常被稱為宿主機。 宿主機通常是 L

bitcoin 0.10.0 版本 linux 交叉編譯 windows 版本 (gitian 編譯) 踩坑指南

因為 bitcoin 最新版本沒有挖礦程式碼,所以本人基於 bitcoin 0.10.0 版本修改創世塊重新打包了一個新的幣 修改創世快教程 https://blog.csdn.net/wab719591157/article/details/80747043 linux 版本編譯

記一次grpc arm-hisiv400-linux交叉編譯

時間緊,先大概說明一下,有時間了再補充詳細的說明 grpc 交叉編譯 需要先編譯出pc版的protobuff 和 grpc,安裝到指定的路徑,在做交叉編譯時需要protoc 和grpc_cpp_plugin工具。這兩個工具也也是在編譯時會生成,交叉編譯過程中要遮蔽掉使用交叉

基於android2.3.5系統:Andriod與Linux交叉編譯工具[二]

*************************************************************************************************************************** 作者:EasyWave

Linux交叉編譯(Android-NDK-r5)

最近一段時間在做Kobo專案,主要是Android-ndk-r5的交叉編譯,有一個已經寫好了的程式庫,但是呢,是用vc寫的,而Android裡面的Java是不能直接呼叫VC寫的程式碼,所以我們需要將vc寫的程式庫交叉編譯成Java能呼叫的.so動態連結庫。 首先,是使用ubu

交叉編譯GDB工具

GDB是Linux下用來除錯驅動的利器,可以單步、設定端點、檢視變數等等,簡直跟一個硬體偵錯程式一樣,很方便。現在要在Linux虛擬機器中編譯一個GDB,然後下載到Linux開發板中執行,好方便除錯開發板的驅動。 如下步驟: 1 下載資源,共需要兩個資源,一個是termca

製作mipsel-linux交叉編譯工具1

1 前言    在嵌入式開發中,MIPs處理器是常見的幾中處理器型別之一。另一方面,Linux是開源軟體,應用範圍很廣, 因其對包括MIPS在內的多種嵌入式處理器架構的良好支援. 因此在嵌入式應用也.也大量採用Linux。在嵌入式開發過程中,很容易獲得運行於x86架構PC上的

arm-Linux交叉編譯

平常我們做的編譯叫本地編譯,也就是在當前平臺編譯編譯得到的程式也是愛本地執行。相對而言的交叉編譯指的是在一個平臺上生成另一個平臺的可執行程式碼。 常見的交叉編譯有以下三種 在windows pc 上,利用ads,使用arm cpu的可執行程式碼。在linux pc 上,利用

linux交叉編譯的安裝

初學者適用 我是在ubuntu16.04上安裝的,其他版本應該也沒問題 前言: 對於初學者來說,安裝交叉編譯可能會浪費很多時間。網上的教程很多但是卻不是對所有人都適用的,以下是個人的總結。 安裝交叉編譯工具5.4.0(版本較新)提取碼:btmw (https

交叉編譯gdb,並解決no termcap library found的方法

交叉編譯8.0版本之前的gdb(編譯gdb-8.0沒有出現這個問題)時總是出現no termcap library found,網上提供了很多不同的辦法,這裡參考hi3516的開發環境提供的解決方案,