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

下載本文檔

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

文檔簡(jiǎn)介

1、第七章第七章嵌入式開發(fā)工具嵌入式開發(fā)工具導(dǎo)論導(dǎo)論GNU(GNU is not UNIX)是由Richard Stallman開發(fā)的一個(gè)與UNIX兼容的軟件系統(tǒng)。大多數(shù)Linux軟件是經(jīng)過(guò)自由軟件基金會(huì)FSF的GNU()公開認(rèn)證授權(quán)的,因此通稱為GNU軟件。 GNU軟件免費(fèi)提供給用戶使用,并被證明是非常可靠和高效,如GNU gcc編譯器,GNU make項(xiàng)目管理器等。gcc和make都是建立在內(nèi)核基礎(chǔ)上的開發(fā)工具和編譯工具,其中,gcc是Linux程序開發(fā)的基礎(chǔ)。主要內(nèi)容主要內(nèi)容7.1 GNU gcc編譯器編譯器7.2 GNU make工具工具7.1 GNU gcc7.1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論