




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第7章嵌入式Linux應用程序開發與調試嵌入式應用開發過程的實質和樂趣。
2本章內容7.1開發環境與工具
17.2Linux下的C語言編程27.3嵌入式系統開發軟件與調試工具
37.4ARM仿真器43簡介本章介紹嵌入式Linux應用程序開發及調試相關的軟件環境及開發調試工具。首先闡述了嵌入式Linux環境下交叉編譯的基本概念,結合例程講解了常用的編譯器和調試器的使用方法。接下來,概要介紹Linux系統下的C語言編程的開發環境和代碼的編譯及下載方法。針對所開發的程序代碼,分析對比了常見的調試方式和ADS集成開發環境的使用方法。隨后結合實際情況介紹了UArmJtag調試工具及UP-ICE200仿真器的使用,為讀者進一步使用并掌握調試和仿真工具起到拋磚引玉的作用。47.1開發環境與工具由于一般的嵌入式系統目標機的片上資源有限,不能為編譯過程提供足夠的資源,因此通常都要在資源較為豐富的PC機上建立一個交叉編譯環境。交叉編譯是指在一種體系結構的平臺上(如X86架構的PC機)上編譯生成可以運行于另一種不同體系結構平臺(如ARM架構的開發板)的代碼的過程。交叉編譯環境通常是建立在PC機上,由交叉編譯器、交叉鏈接器和解釋器等組成的一個集成開發環境。7.1.1交叉編譯交叉編譯環境也是由一系列的工具包組成:針對ARM目標板的gcc(GNUCompilerCollection)編譯器。其中,包括C與C++的編譯器和預處理器;目標板的二進制開發工具包Binutils。其中,包括連接器、匯編器以及其它用于目標文件和檔案的工具;提供系統調用和基本函數的標準C庫Glibc。Glibc提供系統調用和基本函數C庫以及目標板的Linux內核頭文件。57.1.2gcc編譯器Gcc是GNU組織開發的一套免費的編程語言編譯器,遵循GPL及LGPL許可證,也是GNU計劃的關鍵組成部分。Gcc最初是指C語言編譯器(GNUCCompiler),是一個功能強大的ANSI(American
National
Standards
Institute,美國國家標準協會)C兼容編譯器。隨著多年發展,Gcc已經不僅僅支持C和C++語言,還可以編譯Java、Fortran、COBOL、Pascal、Objective-C、Modual-3以及Ada等多種語言。Gcc的含義已經變成了GNU編譯器家族(GNUCompilerCollection),已經廣泛使用在各個Linux版本中。6Gcc編譯器幾乎對所有常見的硬件平臺都提供了完善的支持,因此可以將編寫的源程序編譯為適應多種硬件平臺的目標代碼。Gcc是一個交叉平臺編譯器,可以在當前CPU體系結構的硬件開發平臺上為其他多種不同架構類型的開發板編譯代碼,因此尤其適合嵌入式系統領域源代碼的編譯工作。7使用gcc/g++由C源代碼文件生成可執行文件的過程不僅僅是編譯過程,還包括四個相互關聯的過程,預處理(也稱預編譯,Preprocessing),編譯(Compilation),匯編(Assembly),鏈接(Linking),如下圖所示。89使用gcc編譯器的一般命令格式為:
gcc[options][filenames]其中的可選項options是以“-”開始的各種編譯選項。filenames是相關程序的文件名,包括即將生成的可執行文件的名字(可選項)和要編譯的源程序的名字。在使用gcc進行編譯的時候,需要給出必要的選項和完整的帶后綴名的源文件名。107.1.3GDB調試器Linux系統下GNU提供了一個名為gdb(GNUDeBug)的調試程序,通過與Gcc編譯器的配合使用,為基于Linux操作系統的軟件開發提供了一個完善的調試環境。gdb是一個用來調試C和C++語言源程序的高效調試器。在程序調試運行時,用戶可以通過gdb調試器觀察程序的內部結構和內存的使用情況。gdb所提供的具體功能包括:單步逐行執行代碼或程序跟蹤,觀察程序的運行狀態;動態監視或修改程序中變量的值;設置斷點以使程序在指定的代碼行上暫停執行;程序停止時可以檢查程序的狀態;分析程序崩潰產生的core文件。11當gdb調試器被適當地集成到某個嵌入式系統程序中的時候,其遠程調試功能允許開發人員設置斷點、分步調試程序代碼、檢驗內存,并且同目標板交換信息。開發人員可以將運行gdb的宿主機通過串行端口、網絡接口或是其他方式連接到目標板進行遠程調試。使用gdb調試器對應用程序進行調試時,為了使gdb正常工作,在使用gcc編譯器對源代碼進行編譯的時候,必須使用-g編譯選項開關來通知編譯器,開發者希望進行程序調試。12Gdb調試方式采用文本界面下的交互式調試方式。在Linux系統下的終端命令行提示符下鍵入gdb并按回車鍵即可啟動運行gdb調試器。此外,如果想直接指定想要調試的程序,也可以使用下面的命令來運行gdb:gdb<filename>137.1.4Vi編輯器的使用用戶要在Linux系統下編寫一般文本、數據文件或是語言程序,首先都必須選擇一種編輯器工具。圖形模式下有grdit、OpenOffice、kwrite等,文本模式下有Vi、VIM(ViImproved)、Emacs、nano等。Vi文本編輯器已經成為Linux系統下最常用的工具之一。Vi即“VisualInterface”的簡稱,是Linux/Unix自帶的可視化全屏幕文本編輯器,工作在字符模式下。由于不需要圖形界面,使它成了效率很高的交互式文本編輯工具。14Vi編輯器在Linux操作系統上的地位就像Edit程序在DOS上一樣。它可以執行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據自己的需要對其進行定制,這也是其他編輯程序所沒有的。Vi有三種基本工作模式分別為命令模式(commandmode)、插入模式(Insertmode)以及底行模式(lastlinemode)。15(1)命令模式當進入Vi編輯器時,首先進入的就是命令模式,此時光標位于屏幕上方。在該模式下鍵盤的各種輸入都被作為命令來對待。用戶可以執行控制光標移動,刪除字符,復制段落等操作。用戶可以輸入各種合法的Vi命令,用于管理自己的文檔。需要注意的是,所輸入的命令通常是不回顯的(并不在屏幕上顯示出來),在該模式下也無法編輯文字。如果用戶在該模式下輸入非法的Vi命令,計算機將鳴響報警。命令模式是vi的核心模式,其他模式是從命令模式轉入的,其他任意模式按“Esc”鍵也都可回到命令模式。16(2)插入模式插入模式也稱為文本編輯模式。用戶在命令模式下,通過輸入命令i、附加命令a、打開命令o、修改命令c、取代命令r或替換命令s都可以使vi編輯器進入插入模式。此時屏幕底部出現“INSERT”的提示。只有在插入模式下,用戶才可以進行文本的編輯輸入和修改。在該模式下,用戶輸入的任何字符都被Vi編輯器當做文件內容保存起來,并將其顯示在屏幕上。在新增文字及修改文字結束后,按“Esc”鍵可回到命令模式。17(3)底行模式在命令模式下,用戶按一般命令“:”鍵、正向搜索“/”鍵或反向搜索“?”鍵即可進入底行模式下,此時Vi會在屏幕窗口左下角的最后一行,顯示一個“:”符號作為底行模式的提示符,光標位于此提示符后等待用戶輸入命令。在底行模式下,所有命令都要以“:”開始,此時從鍵盤上輸入的任何字符都被當作編輯命令進行解釋處理,如“:q”代表退出,“:w”表示存盤。18需要注意的是,表中所有命令前的冒號是底行模式的提示符,而不是命令本身的一部分。多數文件管理命令都是在此模式下執行的,功能包括:將文件進行保存或退出Vi的操作,也可以設置編輯環境,如尋找字符串、列出行號等其他操作。底行命令輸入完畢后按Enter鍵盤即可執行,之后Vi將自動回到命令模式。19上述三種模式是可以相互切換,它們之間的相互轉換關系如圖所示。具體切換方法為:命令模式→i鍵或a鍵或o鍵→編輯模式編輯模式→Esc→命令模式,命令模式→:→底行模式。207.1.5Makefile文件和Make命令如果在一個軟件工程中包含了幾十個甚至成百上千個源代碼文件,而這些源代碼文件中的某個或某幾個又包含在其他的源碼文件中,那么,如果其中一個源代碼文件被改動,則包含它的那些源文件都要重新使用編譯器執行編譯鏈接過程,這樣做的工作量將是十分龐大的。
GNU提供了make命令工具及Makefile文件,可以取代復雜的編譯命令操作。make及Makefile工具可以高效地處理各個源文件之間的復雜關系,提高應用程序的開發效率。同時,用戶在編譯時只需要執行一次make命令,使得程序的編譯過程變得更為簡單。211.Makefile文件GNUmake命令執行時,需要一個對應的Makefile文件,通過讀入makefile配置文件的相關內容自動完成大量的編譯和鏈接工作。一個工程中的源文件可能有很多,按其類型、功能、模塊分別存放在若干個目錄中。Makefile文件描述了目標文件之間的依賴關系,指定了工程編譯過程中使用的編譯工具和鏈接規則。22Makefile主要包括顯式規則、隱晦規則、變量定義、文件指示及注釋五部分。它們定義了一系列的規則,來指定工程中哪些文件需要編譯以及如何編譯;哪些文件需要先編譯,哪些文件需要后編譯以及哪些文件需要重新編譯;需要創建哪些庫文件以及如何創建;如何產生最后的可執行文件甚至于進行更復雜的功能操作。23Makefile的作用是根據配置的情況,構造出需要編譯的源文件列表,然后分別編譯,并把目標代碼鏈接到一起,最終形成可執行的二進制文件。這樣做帶來的好處就是“自動化編譯”,一旦Makefile文件寫好,只需要直接在命令行下執行make命令,make命令會自動找當前目錄的Makefile文件來執行,整個工程將實現完全自動編譯,極大地提高了軟件開發的效率。24Makefile文件是make命令規則的描述腳本,其文件中代碼規則的格式如下:targets:prerequisitescommands//該行必須以“Tab”鍵開頭或targets:prerequisites;commandscommands252.Make命令GNUmake是一個解釋Makefile文件指令的命令工具,格式為:make[-ffilename][options][targets]該make命令常用的命令行參數見表7.8所示。如果直接運行make命令而不加可選項,則只建立makefile文件中的第一個目標。26make命令的具體工作過程如下:首先在當前目錄下依次尋找名為“GNUmakefile”、“makefile”或“Makefile”的文件,找到后將會尋找Makefile文件中的第一個目標文件targets。如果targets文件不存在,或是targets文件所依賴的后面的.o文件比它還要更新,則make會執行后面的命令來生成目標文件targets;否則會在當前文件中尋找.o文件的依賴性,找到后再根據規則生成.o文件。之后再用生成的.o文件鏈接生成可執行文件。277.2Linux下的C語言編程由于ARM處理器具有較強的運算能力,并且與匯編語言、C++語言相比,C語言結構性較好、容易理解且有大量的支持庫,因此基于ARM的程序代碼可以使用匯編語言與C語言混合編程。C語言已經成為嵌入式系統程序設計中經常會用到的程序設計語言。嵌入式C語言程序設計就是利用基礎的C語言知識,面向嵌入式軟件工程實際應用進行程序設計。287.2.1嵌入式C語言程序設計Linux系統下的C語言程序設計與其他操作系統環境下的C程序設計是一樣的,主要涉及程序編輯器、編譯器、調試器和項目管理器等四種環境工具。(1)程序編輯器最早時Linux系統下并沒有類似于Windows系統下的VisualC++、C++Builder等集成化程序開發環境,程序的編輯工具與編譯工作是分開的。程序編輯器主要完成程序代碼的編輯、錄入等功能。Linux系統下C語言編程常用的文本編輯器包括Vi、VIM(ViImproved)以及Emacs、nano等。Vi編輯器功能強大且使用方便,已經成為開發人員常用的程序編輯工具。29(2)編譯器Linux系統下常用的C語言編譯器主要是GNU的Gcc編譯器,其具體編譯過程如圖7.20所示。Gcc編譯器采用命令行交互式編譯方式。與其他一般的編譯工具相比,Gcc編譯器功能強大、執行效率高,性能更為優越。30(3)調試器在一個軟件工程開發運行過程中,如果發現Bug就需要確定程序出錯的位置、原因和參數,因此程序代碼的調試是必不可少的。Linux下C語言編程常用的調試器是GDB調試器。該調試器在執行設置斷點、單步跟蹤等操作時使用較為方便、功能更為強大。31(4)項目管理器如果所開發的嵌入式源程序包括很多源文件,則需要把每個源文件都編譯成目標代碼,最后再鏈接成可執行文件,該過程需要手工輸入大量的命令,無疑是非常繁瑣的。幸運的是,在Linux下C語言編程過程中,GNU提供了make項目管理器編譯工具及Makefile文件,可以自動編譯、管理編譯軟件的內容、時間和方式,以取代復雜的編譯命令和操作。這些措施使得程序員能夠真正把精力集中在代碼的開發上而不是源代碼文件的組織上。327.2.2程序的編譯與下載使用RS232串口通過超級終端向目標板燒寫文件是常用一種的燒寫方式。該方式使用loadflash命令通過串口將代碼文件從PC機下載至ARM開發平臺。受制于串口數據傳輸速率的限制,串口常用來下載Bootloader(vivi)、操作系統內核映像文件(zImage)和根文件系統文件(root.cramfs)等。33另外一種就是PC機與ARM開發平臺之間使用網絡連接方式下載文件,主要是使用網絡文件系統NFS協議的方式,將PC機上需要下載的代碼所在的共享文件夾安裝(mount)到目標板上,之后在目標板上就能像訪問本機目錄一樣方便地訪問PC用戶的共享目錄了。此外,也可以利用FTP文件傳輸協議(FileTransgerProtocol),通過網絡接口將應用程序的壓縮包下載到ARM開發平臺的Flash存儲空間內。347.3嵌入式系統開發軟件與調試工具開發人員在進行嵌入式系統的工程開發過程中,選擇一套含有程序文本編輯軟件、編譯工具、鏈接工具、調試軟件、項目管理和函數庫的集成開發環境IDE是必不可少的,如ARM公司的ADS(ARMDeveloperSuite)、SDT和RealView等。一般來說,使用集成開發環境開發嵌入式系統工程項目的時候,程序文本的編輯、編譯、匯編和鏈接過程都是在宿主機上進行的,程序的下載和調試則需要相應的借助仿真調試工具。357.3.1嵌入式系統調試方法概述7.3.2常用調試方式嵌入式系統常用的系統仿真調試技術主要包括:模擬器調試方式、駐留監控軟件調試方式、在線仿真器方式、在線調試器(如JTAG)方式等。367.3.3ADS集成開發環境的使用ADS(ARMDeveloperSuite)集成開發環境是ARM公司開發的新一代ARM核嵌入式微控制器集成開發工具,用來取代之前推出的ARMSDT工具。ADS目前比較成熟的版本為1.2版,支持C/C++源程序,支持軟件調試和JTAG硬件仿真調試,是一種快速高效的嵌入式系統應用程序開發解決方案。37ADS1.2可以安裝在微軟WindowsXP以及RedHatLinux等多款操作系統上,支持ARM7、ARM9、ARM9E、ARM10、StrongARM、Xscale等ARM10之前所有系列的多種類型的處理器內核,具有功能強大的系統庫、編譯效率高等優點。ADS主要用于無操作系統(可理解成高級單片機)的ARM嵌入式系統的開發,有良好的測試環境和極佳的偵錯性能,有助于開發人員對ARM處理器和底層原理的理解。38ADS主要由以下6個部分組成:(1)CodeWarrior集成開發環境(2)AXD調試器(3)ARM應用庫(4)ARM指令集模擬器ARMulator(5)ARM開發包(6)代碼生成工具和實用程序工具397.3.4用AXD進行代碼調試AXD代碼調試器即ADS軟件中獨立于CodeWarriorIDE的ARM擴展調試器(ARMeXtendedDebugger),其主窗口如下圖所示。AXD支持硬件仿真或是指令集軟件仿真(ARMulator),包括了ADW/ADU的所有特性。仿真時AXD可以將映像文件裝載到目標板的Flash中,支持單步、全速和斷點調試,在調試過程中可以方便地查看寄存器值、變量的值以及某個內存單元的數值等。40417.4ARM仿真器UArmJtag2.0是博創科技開發的一款高性能、低成本的ARM仿真調試工具,支持ADS1.2開發環境,支持常見的并口模擬簡易仿真器,可獨立實現開發板Flash芯片的在線編程和燒寫功能,支持ARM7/ARM9系列嵌入式微處理器的在線調試。UArmJtag2.0性能穩定可靠,在ADS1.2開發環境下,使簡易仿真器在仿真調試的速度和功能方面達到甚至超過部分通用的ARM硬件仿真器。427.4.1UArmJtag的JTAG在線仿真調試7.4.2UP-ICE200仿真器的使用UP-ICE200仿真器是博創科技開發的一款實時硬件仿真器,可用于程序調試及目標板Flash的編程與燒寫。它支持常見的ARM7、ARM9等系列的ARM處理器,內置了專門針對JTAG狀態機優化的硬件系統,完全支持大型程序在ADS1.2和ARMSDT2.51環境下的JTAG仿真調試,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 東莞高中數學試題及答案
- 商業領域的心理隱私泄露風險及防范
- 技術推動的當代文學生態變革
- 小檗胺衍生物與化合物TPN171 - G的合成工藝及應用前景探究
- 小學生幾何直觀學習現狀、問題與提升路徑研究
- 企業文化如何適應并引領數字化轉型趨勢
- 2025年中學教師資格考試《綜合素質》教育理念辨析題及答案匯編
- 商業零售空間規劃的數字化解決方案
- 職場溝通能力提升計劃
- 倉庫風險管理的有效措施計劃
- 血栓與止血檢驗及其相關疾病-血栓與止血檢驗(血液學檢驗課件)
- 深圳中考志愿表格模板
- 村衛生室醫保自查自糾報告及整改措施
- 部編版道德與法治五年級下冊期末綜合測試卷含答案(共6套)
- 衢州市建筑工程質量通病防治措施
- 【電氣專業】15D501建筑物防雷設施安裝
- 中國傳統文化知到章節答案智慧樹2023年西安理工大學
- 新疆維吾爾自治區初中學業水平考試英語答題卡
- 四位數乘四位數乘法題500道
- 電動單梁起重機(雙速)設計計算書
- 三室兩廳家具、家電采購清單
評論
0/150
提交評論