第七章 嵌入式開發(fā)工具_第1頁
第七章 嵌入式開發(fā)工具_第2頁
第七章 嵌入式開發(fā)工具_第3頁
第七章 嵌入式開發(fā)工具_第4頁
第七章 嵌入式開發(fā)工具_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第七章第七章嵌入式開發(fā)工具嵌入式開發(fā)工具導論導論GNU(GNU is not UNIX)是由Richard Stallman開發(fā)的一個與UNIX兼容的軟件系統(tǒng)。大多數(shù)Linux軟件是經(jīng)過自由軟件基金會FSF的GNU()公開認證授權的,因此通稱為GNU軟件。 GNU軟件免費提供給用戶使用,并被證明是非??煽亢透咝?,如GNU gcc編譯器,GNU make項目管理器等。gcc和make都是建立在內核基礎上的開發(fā)工具和編譯工具,其中,gcc是Linux程序開發(fā)的基礎。主要內容主要內容7.1 GNU gcc編譯器編譯器7.2 GNU make工具工具7.1 GNU gcc7.1

2、GNU gcc工具工具7.1 GNU gcc工具工具編譯器的作用是將用高級語言或匯編語言編寫的源代碼翻譯成處理器上等效的一系列操作指令。針對嵌入式系統(tǒng)來說,編譯器數(shù)不勝數(shù)。gcc編譯器和匯編器as是非常優(yōu)秀的編譯工具。7.1.1 gcc簡介簡介gcc是GNU C Complier的縮寫。Linux系統(tǒng)下的gcc是GNU推出的功能強大、性能優(yōu)越的多平臺編譯器,是GNU的代表作之一。gcc可以在多種硬件平臺上編譯出可執(zhí)行程序的超級編譯器,其執(zhí)行效率與一般的編譯器相比,平均效率要高20%-30%。gcc編譯器能將C、C+語言源程序、匯編語言程序和目標程序編譯、鏈接成可執(zhí)行文件。7.1.1 gcc簡介

3、簡介gcc是通過后綴名來區(qū)別輸入文件的類型,下面是gcc所遵循的部分約定規(guī)則。 .c.c為后綴的文件,為后綴的文件,C C語言源代碼文件;語言源代碼文件; .a.a為后綴的文件,是由目標文件構成的檔案庫文件;為后綴的文件,是由目標文件構成的檔案庫文件;.C.C,.cc.cc或或.cxx.cxx 為后綴的文件,是為后綴的文件,是C+C+源代碼文件;源代碼文件;.h.h為后綴的文件,是程序所包含的頭文件;為后綴的文件,是程序所包含的頭文件; .i .i 為后綴的文件,是已經(jīng)預處理過的為后綴的文件,是已經(jīng)預處理過的C C源代碼文件;源代碼文件;.ii.ii為后綴的文件,是已經(jīng)預處理過的為后綴的文件,

4、是已經(jīng)預處理過的C+C+源代碼文件;源代碼文件;.m.m為后綴的文件,是為后綴的文件,是Objective-CObjective-C源代碼文件;源代碼文件; .o.o為后綴的文件,是編譯后的目標文件;為后綴的文件,是編譯后的目標文件;.s.s為后綴的文件,是匯編語言源代碼文件;為后綴的文件,是匯編語言源代碼文件;.S.S為后綴的文件,是經(jīng)過預編譯的匯編語言源代碼文件為后綴的文件,是經(jīng)過預編譯的匯編語言源代碼文件。 7.1.2 gcc所包含的工具所包含的工具cccc C編譯器cppcpp C預處理器。編譯器用它來將#include和#define 這類聲明在源文件中展開。 g+g+ C+編譯器

5、gccgcc C編譯器 gccbuggccbug 一個shell腳本,幫助創(chuàng)建有價值的bug報告。 gcovgcov 覆蓋測試工具,用來分析在程序的哪里做優(yōu)化的效果最好。libgcclibgcc gccgcc的運行時庫 libstdclibstdc+ 準C+庫,包含許多常用的函數(shù)。libsupclibsupc+ 為C+語言提供支持的庫函數(shù)。7.1.3 gcc的執(zhí)行過程的執(zhí)行過程使用gcc由C語言源代碼文件生成可執(zhí)行文件的過程不僅僅是編譯的過程,而是要經(jīng)歷四個相互關聯(lián)的步驟預處理(也稱預編譯,Preprocessing)編譯(Compilation)匯編(Assembly) 連接(Linking

6、)1、命令gcc首先調用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。7.1.3 gcc的執(zhí)行過程的執(zhí)行過程2、接著調用cc1進行編譯,這個階段根據(jù)輸入文件生成以.o為后綴的目標文件。3、匯編過程是針對匯編語言的步驟,調用as進行工作,一般來講,.S為后綴的匯編語言源代碼文件和匯編、.s為后綴的匯編語言文件經(jīng)過預編譯和匯編之后都生成以.o為后綴的目標文件。4、當所有的目標文件都生成之后,gcc就調用ld來完成最后的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執(zhí)行程序中的恰當?shù)奈恢茫瑫r,該程序所

7、調用到的庫函數(shù)也從各自所在的檔案庫中連到合適的地方。 7.1.4 gcc的基本語法和選項的基本語法和選項 gcc最基本的用法是最基本的用法是 gcc options filenamesoptions就是編譯器所需要的參數(shù),filenames給出相關的文件名稱。 -c,只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標文件,通常用于編譯不包含主程序的子程序文件。 -o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執(zhí)行文件a.out。 -g,產生符號調試工

8、具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。 -O,對程序進行優(yōu)化編譯、連接,采用這個選項,整個源代碼會在編譯、連接過程中進行優(yōu)化處理,這樣產生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。 7.1.4 gcc的基本語法和選項的基本語法和選項gcc基于命令行的。當作為交叉編譯工具使用時,gcc支持很多種的平臺和“宿主機目標機”的組合。對應交叉編譯,常用的命令就是arm-linux-gcc 。這樣,當用C語言寫好一個應用程序時,使用此命令就是以生成可以在目標平臺上執(zhí)行的可執(zhí)行文件,通過超級終端執(zhí)行后,就可以在目標板上看到程序的結果

9、。7.2 GNU make7.2 GNU make工具工具7.2.1 GNU make工具工具在大型的開發(fā)項目中,通常有幾十個到上百個的源文件,如果每次均手工鍵入gcc命令進行編譯,會非常不方便。Linux專門為軟件開發(fā)提供了一個自動化的管理工具GNU make。make可以自動地更新和編譯程序。make將整個軟件項目的代碼分開在幾個小的源文件里,在改動其中一個文件的時候,可以只對該文件重新進行編譯,然后重新連接所有的目標文件。7.2.1 make概述概述make依靠Makefile文件完成。默認情況下,GNU make工具在當前工作目錄中按如下順序搜索makefile:”GNU makefi

10、le” ”makefile” ”Makefile”。在Linux系統(tǒng)中,習慣使用Makefile作為makefile文件。如果要使用其他文件作為makefile,則可利用下面make命令指令makefile文件:”#make f Makefile.debug”。 Makefile是一個文本格式的數(shù)據(jù)庫文件,包含一些規(guī)則,告訴make編譯哪些文件,在什么條件下編譯。7.2.1 make概述概述Makefile中的每條規(guī)則包括下面內容:一個目標體(target):make最終需創(chuàng)建的對象。包含一個或多個依賴體(Dependency)的列表,依賴體指明編譯目標時需要用到的其它文件。 命令(Comma

11、nd)列表,指明從依賴體文件創(chuàng)建出目標對象所需要執(zhí)行的命令。樣式: (注:每個命令行前必須是一個Tab字符)target: dependency dependency command command 7.2.2 實例通過實例通過automake產生產生makefile文件文件Makefile 基本構造雖然簡單,許多剛開始學習寫 Makefile 時會感到?jīng)]有規(guī)范可循,而且常常會受限於自己的開發(fā)環(huán)境,只要環(huán)境變數(shù)不同或路徑改一下,可能Makefile 就得跟著修改。為了減輕程式設計師維護 Makefile 的負擔,因此有了 Automake。 程式設計人員只需寫一些預先定義好的巨集 (macro

12、),交給 Automake 處理後會產生一個可供 Autoconf 使用的 Makefile.in 檔。再配合利用Autoconf 產生的自動設定檔 configure 即可產生一份符合 GNU Makefile慣例的 Makefile 了。 步驟一步驟一1、編寫一個簡單的c程序#cd /home#mkdir hello#cd hello#vi hello.c#include “stdio.h”int main() printf(“hello GNUn”); return 0; 步驟二步驟二2、用 autoscan 產生一個 configure.in 的雛型,執(zhí)行 autoscan 后會產生一

13、個configure.scan 的檔案,我們可以用它做為 configure.in檔的藍本。 #autoscan#lsautoscan.log configure.scan hello.c步驟三步驟三3、configure.scan包含了系統(tǒng)配置的基本選項,里面都是一些宏定義,我們需要對它進行編輯。此外,我們需要將它改名為configure.in#vi configure.scan主要內容:AC_INIT(hello.c) #原型AC_INIT(FILE) ,這個宏用來檢查源代碼所在的路徑。AM_INIT_AUTOMAKE(hello,1.0)#這個宏是必須的,它描述了我們將要生成的軟件包的名

14、字及其版本。PACKAGE是軟件包的名字,VERSION是版本號。當你使用make dist命令時,它會給你生成一個類似helloworld-1.0.tar.gz的軟件發(fā)行包,其中就有對應的軟件包的名字和版本號。AC_PROG_CC #這個宏將檢查系統(tǒng)所用的C編譯器。 AC_OUTPUT(Makefile) #這個宏是我們要輸出的Makefile的名字。 #mv configure.scan configure.in#configure.in是configure腳本的輸入文件。步驟四步驟四4、執(zhí)行 aclocal 和 autoconf ,分別會產生 aclocal.m4 及 configure

15、 兩個檔案 。aclocal是一個perl 腳本程序。aclocal根據(jù)configure.in文件的內容,自動生成aclocal.m4文件。aclocal的定義是:“aclocal - create aclocal.m4 by scanning configure.ac”。autoconf是用來產生configure文件的。configure是一個腳本,它能設置源程序來適應各種不同的操作系統(tǒng)平臺,并且根據(jù)不同的系統(tǒng)來產生合適的Makefile,從而可以使你的源代碼能在不同的操作系統(tǒng)平臺上被編譯出來。#aclocal#autoconf步驟五步驟五4. 編輯 Makefile.am 檔#vi M

16、akefile.am AUTOMAKE_OPTIONS= foreign bin_PROGRAMS= hello hello_SOURCES= hello.c automake會根據(jù)你寫的Makefile.am來自動生成Makefile.in。 步驟五步驟五AUTOMAKE_OPTIONS 這個是automake的選項。在執(zhí)行automake時,它會檢查目錄下是否存在標準GNU軟件包中應具備的各種文件,例如AUTHORS、ChangeLog、NEWS等文件。我們將其設置成foreign時,automake會改用一般軟件包的標準來檢查。bin_PROGRAMS這個是指定我們所要產生的可執(zhí)行文件的

17、文件名。如果你要產生多個可執(zhí)行文件,那么在各個名字間用空格隔開。 helloworld_SOURCES 這個是指定產生“helloworld”時所需要的源代碼。如果它用到了多個源文件,那么請使用空格符號將它們隔開。比如需要helloworld.h,helloworld.c那么請寫成helloworld_SOURCES= helloworld.h helloworld.c。步驟六步驟六6、執(zhí)行 automake -add-missing ,Automake 會根據(jù) Makefile.am 檔產生一些檔案,包含最重要的 Makefile.in 。#automake - -add-missing#選

18、項“” -add-missing ,會讓automake加入一個標準的軟件包所必須的一些文件。步驟七、八、九步驟七、八、九7、最后執(zhí)行“./configure”,產生Makefile。#./configure8、根據(jù)Makefile編譯源代碼,連接,生成目標文件,可執(zhí)行文件。#make9、執(zhí)行可執(zhí)行文件#./helloHello GNU!Makefile的預定義操作的預定義操作make clean清除上次的make命令所產生的object文件(后綴為“.o”的文件)及可執(zhí)行文件。make install將編譯成功的可執(zhí)行文件安裝到系統(tǒng)目錄中,一般為/usr/local/bin目錄。make dist 產生發(fā)布軟件包文件(即distribution package)。這個命令將會將可執(zhí)行文件及相關文件打包成一個tar.gz壓縮的文件用來作為發(fā)布軟件的軟件包。它會在當前目錄下生成一個名字類似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我們在confi

溫馨提示

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

評論

0/150

提交評論