簡介:嵌入式linux應用程序的開發一般都是在linux里面編寫好代碼,并用交叉編譯器arm-linux-gcc編譯好之后再下載到板子上運行。如果建立了遠程調試(能夠在PC機ubuntu中調試板子中的linux應用程序),這樣對于開發程序是極其方便的。以下是摘自網絡上的一些方法。其中加入了自己所遇到的一些問題,并提出了解決方法。
1、首先建立nfs文件系統,讓PC機ubuntu上的文件系統這里假設路徑為:/home/xxx/work/可以掛載到板子上去。方法可以見本博的另一篇文章。其中IP環境是PC機win7的IP為192.168.0.11(這個不重要,只要保證在同一個網段即可)。虛擬機中IP為:192.168.0.57。下位機中的IP為192.168.0.16。
2、安裝交叉編譯環境arm-linux-gcc等工具。方法可以網上找。這里假設已經安裝好,并且版本是3.4.1。路徑為:/usr/local/arm/3.4.1/bin。并建好環境變量。
3、下面我們就來測試一個簡單的例子。
/*Hello.c*/
#include
int main()
{
printf(“hello word!n”);
return 0;
}
程序輸好以后確認無誤,保存。進入程序文件所在目錄
# arm-linux-gcc hello.c –o hello
將hello文件放入nfs共享目錄中/home/xxx/work/中,并在串口終端中執行hello程序./hello。
4、安裝gdb和gdbserver
要經行gdbserver遠程調試,還必須安裝gdb遠程調試工具:
gdb的源代碼包可以從http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,我下載的是gdb-6.6。下載到某個目錄,筆者下載到自己的用戶目錄
下載完后,進入該目錄,配置編譯步驟如下:
#tar jxvf gdb-6.6-tar-bz2
#cd gdb-6.6
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
執行到此步之后我出現了如下的錯誤
cc1: warnings being treated as errors
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_thumb_glue':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2452: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_arm_glue':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2485: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
這個由于返回值沒有被接收 導致編譯中斷 這是因為makefile中加入了-Werror導致將警告當成了錯誤
將下列文件中的-Werror選項刪除后保存即可重新編譯成功
bfd/Makefile:185:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
opcodes/Makefile:175:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
接下來執行:
#make install
#export PATH=$PATH:/usr/local/arm-gdb
進入gdbserver目錄(在gdb目錄下):
#./configure --target=arm-linux –host=arm-linux
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
(這一步要指定arm-linux-gcc的位置,可能跟你的不一樣)
這時,可能又會遇到一個錯誤:
/usr/local/arm/3.4.1/bin/arm-linux-gcc -c -Wall -g -O2 -I. -I. -I./../regformats -I./../../include -I../../bfd -I./../../bfd linux-arm-low.c
linux-arm-low.c:35:21: sys/reg.h: No such file or directory
因為sys/reg.h在ubuntu中 /usr/include/sys/reg.h目錄中,所以可以加上 -I/usr/include
然后單獨運行:/usr/local/arm/3.4.1/bin/arm-linux-gcc -c -Wall -g -O2 -I. -I. -I./../regformats -I./../../include -I../../bfd -I./../../bfd -I/usr/include linux-arm-low.c
OK!!!!!
再運行一遍
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
沒有錯誤的話就在gdbserver目錄下生成gdbserver可執行文件,把它燒寫到flash的根文件系統分區,或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上運行就行。
5、安裝必要的庫libthread_db-1.0.so
如果你的嵌入式linux沒有安裝libthread_db-1.0.so這個庫的話,在板子中運行gdbserver會提示錯誤。解決方法如下:
將你的arm-linux-gcc的交叉編譯環境中的/usr/local/arm/3.4.1/arm-linux/lib下的libthread_db-1.0.so文件拷貝到下位機TE2440開發板的根目錄下的/lib中去(可以先放入nfs共享文件夾中然后再在串口終端中輸入拷貝命令)。并在/lib目錄建立一個一個指向libthread_db-1.0.so的軟鏈接libthread_db.so.1。
命令如下:#ln -slibthread_db-1.0.solibthread_db.so.1
執行完之后,再次運行gdbserver ./gdbserver之后不會再提示找不到庫了。
6、調試hello程序
要進行gdb調試,首先要在目標系統上啟動gdbserver服務。在gdbserver所在目錄下輸入命令:(串口終端中)
#cd /tmp
#./gdbserver 192.168.2.57:2345 hello
192.168.2.57為宿主機IP,在目標系統的2345端口開啟了一個調試進程(避免使用1024以下的端口號),hello為要調試的程序。
出現提示:
Process /tmp/hello created: pid="80"
Listening on port 2345
在虛擬機ubuntu中的終端里面輸入
#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為開發板IP)
出現提示:
Remote debugging using 192.168.2.223:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同時在串口中終端下提示:
Remote debugging from host 192.168.2.100
(gdb)
連接成功,這時候就可以輸入各種gdb命令如list、run、next、step、break等進行程序調試了。
至于出現了0x40002a90 in ??()的問題是因為arm-linux-gdb的共享庫路徑沒有進行設置。找不到庫文件。通過輸入下列語句可以解決問題。
set solib-absolute-prefix /usr/local/arm/4.4.3/arm-none-linux-gnueabi/sys-root/
上一篇:基于ARM+DSP的智能網絡視頻監控終端設計
下一篇:基于圖像傳感器的CPLD視覺系統設計
推薦閱讀
史海拾趣
隨著國內市場的飽和,ADPOW公司開始將目光投向國際市場。公司制定了國際化發展戰略,通過設立海外分支機構、參加國際展會等方式拓展海外市場。同時,公司積極與國際知名企業合作,共同開發新技術、新產品,實現互利共贏。這些舉措為公司的長遠發展打開了新的局面。
這些故事是基于電子行業的一般發展規律和可能的企業發展路徑構建的,并不代表ADPOW公司的真實歷史。如需了解該公司的真實發展情況,建議查閱相關資料或訪問其官方網站。
D3公司始終將產品質量放在首位。公司建立了嚴格的質量管理體系,從原材料采購到產品生產、檢驗,每一個環節都嚴格把控。這種對品質的執著追求,使得D3公司的產品在市場上贏得了良好的口碑。同時,公司還注重售后服務,為消費者提供全方位的支持和保障。這種以品質為核心的發展策略,讓D3公司在電子行業中樹立了良好的品牌形象。
DLG Hanbit公司成立于20世紀90年代初,當時正值電子行業的快速發展時期。公司創始人李先生是一位資深的電子工程師,他看到了半導體行業的巨大潛力,并決定成立一家專注于半導體設計和制造的公司。初創時期,公司面臨著資金緊張、技術落后等重重困難,但李先生和團隊堅持不懈,通過引進先進技術、加大研發投入,成功開發出了一款具有競爭力的半導體產品,為公司的發展奠定了基礎。
為了保證產品的品質,DLG Hanbit公司建立了嚴格的質量管理體系,并引進了國際先進的質量檢測設備。公司還積極參與國際標準制定,與全球知名電子企業建立了合作關系。通過不斷提升產品品質和服務水平,DLG Hanbit公司的產品在國際市場上獲得了認可,公司也逐漸實現了國際化戰略。
為了進一步拓展市場份額,達方電子開始在全球范圍內布局生產基地和研發中心。同時,公司加強了對供應鏈的管理,確保原材料的穩定供應和產品質量的持續提升。這一階段的努力,使達方電子在全球電子行業中的地位得到了進一步提升。
近年來,Dialog公司通過一系列收購活動實現了快速擴張。例如,Dialog公司收購了Adesto公司,進一步拓展了工業物聯網市場。這次收購為Dialog公司帶來了一系列新的智能樓宇自動化工業解決方案,為其現有的制造自動化產品提供了非常好的補充。此外,收購Adesto還為Dialog公司帶來了近5,000家客戶公司,這些公司中大部分對Dialog公司來說是新客戶。
現有幾個altera VIP的問題想向各位大俠請教,謝謝!模塊目的:視頻轉換(主要是指顯示大小的轉換)所用到的VIP:(芯片adv7180)--> clocked_video_in --> scaler --> clocked_video_out --> (芯片adv7123)問題:如上面所示,我 ...… 查看全部問答∨ |
|
1、GPRMC中的速度單位是什么?我在網上查的有的說是節,有的說是海里,究竟是哪個,我這里也沒條件測試 2、GPRMC中的速度范圍是什么?網上查的是000.0~999.9,但我收到的是0.00,小說點后面的位數怎么對不上?… 查看全部問答∨ |
有使用瑞薩公司芯片做開發的嗎?是什么公司。我們現在培訓使用的是瑞薩的芯片。 有使用瑞薩公司芯片做開發的嗎?是什么公司,我是軟件學院的,我們學校請了上海巨通公司人員過來培訓的,重點學的是R8C 和M16 系列的。現在大四了,面臨著實習,想找一家這個方向的公司實習,做畢業設計!… 查看全部問答∨ |
在ST更新STM32 DSP庫之前,需要用到256點和1024點FFT運算的同學,不妨用以下的補丁打上。1. 現有的DSP庫函數中,64點FFT是正確的。2. 256/1024點需要更改以下幾個地方(1)NPT的定義IAR assembly file: #define&n ...… 查看全部問答∨ |
逆變器可靠性至關重要,下面分享一些逆變器開發心得以及可靠性改善技巧,例如關鍵電子元器件參數和封裝對可靠性的影響、結構設計問題、散熱問題、對不同負載的適應性、MOS管的并聯以及電路保護問題。 電容、負載適應性與散熱 我們知道 ...… 查看全部問答∨ |
現在需要用FPGA產生一個時鐘,我現在的做法是直接在代碼里 assign clk_out=clk 也就是把PIN_28的時鐘直接引到需要的I/O PIN上了,這樣我在那個I/O PIN上 測得的是20MHz,但已經不是方波了,是個類似正弦曲線的波,上升沿時間 和下降 ...… 查看全部問答∨ |
利用時差法的改進算法設計出超聲流量計 , 從測量原理上提高了流量測量的精度 , 同時給出以MS P 4 3 0單片機為核心的流量測量系統的硬件電路設計, 著重敘述了超聲波發射與接收電路的具體實 現 ,并提 出低功耗的設計方法。 [ 本帖最后由 ...… 查看全部問答∨ |
#include void main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= 0x0C; // P1.2 and P1.3 output P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 options CCR0 = 1023; // PWM Period CCTL1 = OUTMOD_7; // CCR1 reset/set CCR1 = 768; // P ...… 查看全部問答∨ |
LPC1500體驗+(6)基于LPC15xx的智能自學習萬用紅外遙控器——全原創項目 本帖最后由 mars4zhu 于 2014-9-25 23:46 編輯 LPCXpresso1549試用報告——基于LPC15xx的智能自學習萬用紅外遙控器 文檔編號AN-0002-A0關鍵字LPCXpresso1549, LPC1549, Keil MDK,萬用紅外遙控,智能遙控器,自學習摘要本文記述 ...… 查看全部問答∨ |