第9章開發(fā)環(huán)境和調(diào)試技術(shù)(初稿)_第1頁
第9章開發(fā)環(huán)境和調(diào)試技術(shù)(初稿)_第2頁
第9章開發(fā)環(huán)境和調(diào)試技術(shù)(初稿)_第3頁
第9章開發(fā)環(huán)境和調(diào)試技術(shù)(初稿)_第4頁
第9章開發(fā)環(huán)境和調(diào)試技術(shù)(初稿)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1、交叉開發(fā)環(huán)境模式概述2、宿主機(jī)環(huán)境3、目標(biāo)板環(huán)境4、交叉編譯工具鏈5、gdb調(diào)試器6、遠(yuǎn)程調(diào)試7、內(nèi)核調(diào)試8、網(wǎng)絡(luò)調(diào)試1、交叉開發(fā)環(huán)境模式概述什么是嵌入式系統(tǒng) “以應(yīng)用為中心、以計算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機(jī)系統(tǒng)?!庇布系木窒扌?存儲空間小 處理器頻率低 缺少存儲、輸入輸出設(shè)備宿主機(jī)目標(biāo)板交叉開發(fā)模式組成部分 宿主機(jī):平時使用的桌面計算機(jī) 目標(biāo)板:嵌入式開發(fā)板介紹 利用宿主機(jī)上已有的成熟的開發(fā)工具,專門針對目標(biāo)板定制一套系統(tǒng),包括引導(dǎo)程序、內(nèi)核和文件系統(tǒng),然后下載到目標(biāo)板上運(yùn)行。宿主機(jī)目標(biāo)板交叉開發(fā)模式開發(fā)過程 在宿主機(jī)

2、上編寫代碼,并通過交叉編譯工具編譯出能夠在目標(biāo)板上運(yùn)行的程序,然后下載到目標(biāo)板上測試執(zhí)行,最后利用宿主機(jī)上的調(diào)試工具對目標(biāo)板上運(yùn)行的程序進(jìn)行遠(yuǎn)程調(diào)試。特點(diǎn) 使用和桌面開發(fā)一樣的工具,降低學(xué)習(xí)成本。 充分利用宿主機(jī)的開發(fā)環(huán)境。宿主機(jī)目標(biāo)板連接方式串口 利用串口給目標(biāo)板發(fā)送命令,同時也可以接受目標(biāo)板返回的信息并顯示。 宿主機(jī)可以通過串口往目標(biāo)板傳送文件; 目標(biāo)板可以把程序運(yùn)行的結(jié)果返回并顯示。 串口驅(qū)動程序的實(shí)現(xiàn)相對比較簡單,缺點(diǎn)是傳輸速度慢,并不適用于傳輸大量數(shù)據(jù)的場合。以太網(wǎng) 以太網(wǎng)是當(dāng)今局域網(wǎng)采用的最通用的通信協(xié)議標(biāo)準(zhǔn)。 它使用簡單,配置靈活,支持廣泛,傳輸速率快,安全可靠,缺點(diǎn)是網(wǎng)絡(luò)驅(qū)動的

3、實(shí)現(xiàn)比較復(fù)雜。宿主機(jī)目標(biāo)板連接方式USB USB是Universal Serial Bus通用串行總線)的縮寫,現(xiàn)已成為PC的標(biāo)準(zhǔn),基于USB標(biāo)準(zhǔn)的設(shè)備被廣泛使用。 一種快速、靈活的總線接口,與其它通信接口相比,USB接口的特點(diǎn)是易于使用。 支持熱插拔,無需用戶自己配置,系統(tǒng)會自動搜索驅(qū)動并安裝。 USB是典型的主從結(jié)構(gòu),兩端分別需要不同的驅(qū)動程序。JTAG JTAG是一種國際標(biāo)準(zhǔn)測試協(xié)議,主要用于芯片內(nèi)部測試及對系統(tǒng)進(jìn)行仿真、調(diào)試。 在嵌入式系統(tǒng)領(lǐng)域,幾乎所有的處理器都支持JTAG,調(diào)試器的單步調(diào)試和斷點(diǎn)都需要和JTAG交涉。 可以使用JTAG將程序燒寫到目標(biāo)板上。2、宿主機(jī)環(huán)境串口終端BO

4、OTP協(xié)議TFTP協(xié)議交叉編譯Make工具串口的用途 作為終端執(zhí)行命令,管理嵌入式系統(tǒng)。 使用zmodem協(xié)議等傳送小文件。串口終端 超級終端 (Windows XP) Minicom (Linux)BOOTP協(xié)議協(xié)議什么是BOOTP協(xié)議 引導(dǎo)協(xié)議(Bootstrap Protocol,BOOTP)是一種基于TCP/IP的協(xié)議,它最初在RFC951中定義,如今在通用計算機(jī)上廣泛使用的DHCP協(xié)議就是從BOOTP協(xié)議擴(kuò)展而來。BOOTP協(xié)議使用TCP/IP網(wǎng)絡(luò)協(xié)議中的UDP 67/68兩個通訊端口。BOOTP協(xié)議用途 用于無盤客戶機(jī)從服務(wù)器得到自己的IP地址、服務(wù)器的IP地址、啟動映象文件名、網(wǎng)

5、關(guān)信息等等第一步,在主機(jī)平臺運(yùn)行BOOTP服務(wù)的情況下,目標(biāo)板由Boot Loader啟動BOOTP,此時目標(biāo)板還沒有IP地址,它就用廣播形式以IP地址向網(wǎng)絡(luò)中發(fā)出IP地址查詢的請求,這個請求幀中包含了客戶機(jī)的網(wǎng)卡MAC地址。第二步,主機(jī)平臺上的BOOTP服務(wù)器接收到的這個請求幀,根據(jù)這幀中的MAC地址在Bootptab啟動數(shù)據(jù)庫中查找這個MAC的記錄,如果沒有此MAC的記錄則不響應(yīng)這個請求;如果有就將FOUND幀發(fā)送回目標(biāo)板。FOUND幀中包含的主要信息有目標(biāo)板的IP地址、服務(wù)器的IP地址、硬件類型、網(wǎng)關(guān)IP地址、目標(biāo)板MAC地址和啟動映象文件名。第三步,目標(biāo)板就根據(jù)FOUND

6、幀中的信息通過TFTP服務(wù)器下載啟動映象文件。TFTP協(xié)議協(xié)議什么是BOOTP協(xié)議 TFTP的全稱是Trivial File Transfer Protocol,即“簡單文件傳輸協(xié)議”,它是TCP/IP協(xié)議族中的一個在客戶端和服務(wù)端之間進(jìn)行簡單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù)。TFTP特點(diǎn) 不提供用戶名和口令 TFTP 協(xié)議傳輸由客戶端發(fā)起交叉編譯交叉編譯背景 目標(biāo)文件在不同架構(gòu)間由于采用的CPU指令集不同等原因不能通用。定義 交叉編譯就是在一個架構(gòu)的機(jī)器下編譯另一個架構(gòu)的目標(biāo)文件。 需要安裝交叉編譯工具鏈make工具工具GNU make是一種常用的編譯工具,通過它,開發(fā)人員

7、可以很方便地管理軟件編譯的內(nèi)容、方式和時機(jī),從而能夠把主要精力集中在代碼的編寫上。make會自動根據(jù)文件修改時間來判斷源文件中哪些部分有更新,通過解釋Makefile文件內(nèi)的規(guī)則并執(zhí)行相應(yīng)的命令,重新編譯鏈接這些更新過的文件。make工作過程工作過程編寫Makefile Makefile由一系列規(guī)則組成,每條規(guī)則說明要生成哪些目標(biāo)文件、生成目標(biāo)文件所依賴的其它文件以及生成目標(biāo)文件所需要的命令。編譯過程 通過查看時間戳來確認(rèn)依賴文件是否比目標(biāo)文件更新,如果是則重新執(zhí)行這條規(guī)則的命令,并進(jìn)一步地執(zhí)行依賴這些中間目標(biāo)文件的規(guī)則,層層推進(jìn),最后生成新的結(jié)果文件。所有的依賴文件都沒有被編譯過,則對每個源

8、文件進(jìn)行編譯并進(jìn)行鏈接,生成最后的可執(zhí)行程序 。源文件在上次編譯之后被修改過,則在本次執(zhí)行make的時候?qū)恢匦戮幾g。頭文件在上次編譯之后被修改過,則所有包含此頭文件的源文件在本次執(zhí)行make的時候?qū)恢匦戮幾g。# Makefile Example for Mathmath : main.o display.o plus.o minus.o multi.o divide.o mod.o gcc -o math main.o display.o plus.o minus.o multi.o divide.o mod.omain.o : main.c defs.h display.h gcc

9、 -c main.c display.o : display.c defs.h display.h gcc -c display.c plus.o : plus.c defs.h gcc -c plus.cminus.o: minus.c defs.h gcc -c minus.cmulti.o: multi.c defs.h gcc -c multi.cdivide.o: divide.c defs.h gcc -c divide.cmod.o: mod.c defs.h gcc -c mod.c .PHONY: cleanclean : -rm main.o display.o plus.

10、o minus.o multi.o divide.o mod.oTARGET : PREREQUISITESCOMMAND # command前面使用tab縮進(jìn)說明:TARGET:規(guī)則的目標(biāo)。通常是最后所要生成的可執(zhí)行文件名或者為了生成這個目標(biāo)而必需的中間過程的目標(biāo)文件名。PREREQUISITES:規(guī)則的依賴。生成規(guī)則目標(biāo)所需要的文件列表,通常一個目標(biāo)依賴于一個或多個文件。COMMAND:規(guī)則執(zhí)行的命令。生成規(guī)則目標(biāo)所需要執(zhí)行的命令,可以是shell下面的任何命令組合。3、目標(biāo)目標(biāo)板環(huán)境板環(huán)境JTAG接口Boot LoaderJTAG接口接口簡介簡介作為硬件測試手段,JTAG的功能與CPU狀

11、態(tài)無關(guān),可驅(qū)動設(shè)備的所有外部引腳并讀入數(shù)據(jù),而且在設(shè)備內(nèi)部奪取外部的連接點(diǎn)(與通往外部的各個pin腳一一連接)。各個cell為了形成 Serial Shift Register而相連。整體的接口由5個pin腳來控制(TDI,TMS,TCK,nTRST,TDO)。其功能包括:測試線路連線和端子的連接狀態(tài);測試設(shè)備間的連接狀態(tài);進(jìn)行Flash memory 燒寫等Boot Loader簡介簡介Boot Loader是系統(tǒng)加電后運(yùn)行的第一段代碼。完成初始化硬件設(shè)備、創(chuàng)建內(nèi)核需要的信息等工作,最后調(diào)用操作系統(tǒng)內(nèi)核。對硬件的依賴非常強(qiáng),不同的體系結(jié)構(gòu)、不同的嵌入式板級設(shè)備配置都會對Boot Loader

12、有不同的需求。4、交叉編譯交叉編譯工具工具鏈鏈交叉編譯工具鏈?zhǔn)且粋€由編譯器、鏈接器和解釋器組成的集成開發(fā)環(huán)境。和本地編譯類似,交叉編譯的過程也是由編譯、鏈接等階段組成,源程序通過交叉編譯器編譯成目標(biāo)模塊,并由交叉鏈接器加載庫最后鏈接成可在目標(biāo)平臺上執(zhí)行的程序代碼。交叉編譯交叉編譯的的構(gòu)建構(gòu)建從頭編譯 編譯難度大,不適合初學(xué)者。腳本編譯 需要選擇合適的腳本工具,例如crosstool下載使用 下載指定平臺編譯好的二進(jìn)制包。相關(guān)相關(guān)工具工具交叉編譯工具鏈主要包括: 標(biāo)準(zhǔn)庫:glibc 編譯器:gcc 鏈接器:ld 匯編器:as 調(diào)試器:gdbglibc最初是自由軟件基金會為其GNU操作系統(tǒng)所寫,但

13、目前最主要的應(yīng)用是配合Linux內(nèi)核,成為GNU/Linux操作系統(tǒng)一個重要的組成部分。是Linux系統(tǒng)中最底層的API,幾乎其它任何運(yùn)行庫都會直接或間接地依賴于glibc。除了封裝系統(tǒng)調(diào)用之外,還提供一些基本的功能,例如open、malloc、printf、exit等等。 gcc支持不同的編程語言,它被目前許多Unix/Linux系統(tǒng)作為默認(rèn)的標(biāo)準(zhǔn)編譯器。支持多種處理器架構(gòu)上,并且在商業(yè)、專利和開源軟件開發(fā)環(huán)境中廣泛使用。支持嵌入式系統(tǒng)平臺。binutils是一組開發(fā)工具包,包括連接器、匯編器和其他用于目標(biāo)文件和檔案的工具。其中包括:addr2line、ar 、as、ld、nm、objdum

14、p 、ranlib、readelf是一款功能非常強(qiáng)大的調(diào)試器,既支持多種硬件平臺,也支持多種編程語言,目前gdb支持的調(diào)試語言有C/C+、Java、Fortran、Modula-2等多種語言。不僅用于本地調(diào)試,還可以用于遠(yuǎn)程調(diào)試,非常適合嵌入式系統(tǒng)開發(fā)使用。使用gdb可以完成下面這些任務(wù): 運(yùn)行程序,可以給程序加上所需的任何調(diào)試條件; 在給定的條件下讓程序停止; 檢查程序停止時的運(yùn)行狀態(tài); 通過改變一些數(shù)據(jù),可以更快地改正程序的錯誤。6、遠(yuǎn)程調(diào)試遠(yuǎn)程調(diào)試以調(diào)試器和被調(diào)試程序是否在同一臺機(jī)器區(qū)分 本地調(diào)試 遠(yuǎn)程調(diào)試嵌入式系統(tǒng)大多使用遠(yuǎn)程調(diào)試方式遠(yuǎn)程調(diào)試解決方案插樁方案 需要在目標(biāo)操作系統(tǒng)和宿主機(jī)

15、調(diào)試器內(nèi)分別添加一些功能模塊,然后二者互通信息調(diào)試,這種方案稱為插樁(stub) 運(yùn)行在目標(biāo)板上的被調(diào)試程序,一經(jīng)初始化,在入口點(diǎn)會調(diào)用設(shè)置斷點(diǎn)的函數(shù),主動觸發(fā)異常然后由異常處理程序控制,異常處理程序?qū){(diào)用調(diào)試端口通信模塊,監(jiān)聽宿主機(jī)調(diào)試器發(fā)送的調(diào)試信息。雙方通信一旦建立,就可以根據(jù)遠(yuǎn)程調(diào)試協(xié)議進(jìn)行調(diào)試。使用ROM Monitor調(diào)試目標(biāo)機(jī)目標(biāo)板程序使用kgdb調(diào)試系統(tǒng)內(nèi)核使用gdbserver調(diào)試用戶空間應(yīng)用程序gdb遠(yuǎn)程調(diào)試遠(yuǎn)程調(diào)試功能功能由宿主機(jī)gdb和目標(biāo)板調(diào)試stub共同構(gòu)成。兩者通過串口或TCP連接,采用gdb遠(yuǎn)程串行協(xié)議(Remote Serial Protocol, RSP)

16、連接。RSP定義了宿主機(jī)gdb和被調(diào)試的目標(biāo)板程序進(jìn)行通信時數(shù)據(jù)包的格式。它是一種基于消息的ASCII碼協(xié)議,包含了內(nèi)存讀寫、寄存器查詢、程序運(yùn)行等命令。gdbserver遠(yuǎn)程調(diào)試遠(yuǎn)程調(diào)試7、內(nèi)核內(nèi)核調(diào)試調(diào)試Linux內(nèi)核的規(guī)模之龐大,單靠閱讀代碼查找BUG已經(jīng)非常困難。而Linux內(nèi)核的開發(fā)人員出于保證內(nèi)核代碼正確性的考慮,不愿意在Linux內(nèi)核源代碼中添加調(diào)試器。所以對Linux內(nèi)核進(jìn)行調(diào)試一直是項艱苦的工作。內(nèi)核調(diào)試技術(shù) 內(nèi)核打印函數(shù) printk 內(nèi)核源代碼調(diào)試kgdbprintk函數(shù)具有良好的健壯性,不受內(nèi)核運(yùn)行條件的限制,在系統(tǒng)運(yùn)行的任何階段都可以使用。和C標(biāo)準(zhǔn)庫中的printf函數(shù)不同的是,printk函數(shù)可以指定一個日志級別。內(nèi)核根據(jù)這個級別來判斷是否在終端上打印消息。在頭文件中定義了可用的日志級別kgdb內(nèi)核調(diào)試k

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論