第7章嵌入式Linux開發(fā)環(huán)境_第1頁
第7章嵌入式Linux開發(fā)環(huán)境_第2頁
第7章嵌入式Linux開發(fā)環(huán)境_第3頁
第7章嵌入式Linux開發(fā)環(huán)境_第4頁
第7章嵌入式Linux開發(fā)環(huán)境_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章 嵌入式Linux開發(fā)環(huán)境第7章 嵌入式Linux開發(fā)環(huán)境7.1 GNU Tools7.2 項(xiàng)目管理7.3 調(diào)試器7.1 GNU ToolspGNU Tools綜述pGCC 編譯與鏈接pGCC 工具介紹pC語言庫pELF文件格式GNU Tools綜述 GNU Tools是Linux環(huán)境下的開發(fā)工具,用于代碼的生成。GNU Tools的重要組成部分是GCC。GCC 是GNU Compiler Collection 的縮寫,是一個(gè)非常優(yōu)秀的跨平臺編譯器集合,支持x86、ARM、MIPS 和PowerPC 等多種目標(biāo)平臺,支持C、C+、Java、ADA、Fortran 和Pascal 等多種高

2、級語言。GNU Tools綜述文件類型擴(kuò)展名文件說明文本文件*.c C語言源文件*.C / *.cxx / *.ccC+語言源文件*.i預(yù)處理后的C語言源文件*.ii預(yù)處理后的C+語言源文件*.s *.S匯編語言*.h頭文件二進(jìn)制文件.o目標(biāo)文件.so動態(tài)庫.a靜態(tài)庫GNU Tools綜述工具名稱說明asGNU匯編器。用以將處理器的匯編代碼轉(zhuǎn)換成可執(zhí)行代碼,并存儲到目標(biāo)文件.o文件中l(wèi)dGNU鏈接器。用于將一個(gè)或多個(gè)目標(biāo)文件.o、庫組合成一個(gè)可執(zhí)行程序;或者生成靜態(tài)庫和動態(tài)庫。ar歸檔工具,可以將多個(gè)文件組合成一個(gè)大文件,并且可以讀取原始文件的內(nèi)容。stripe去除文件中的符號nm用以顯示目標(biāo)

3、文件中的符號objectcopy轉(zhuǎn)換二進(jìn)制代碼的工具objdump顯示目標(biāo)文件的反匯編工具readelf顯示ELF文件中的各種信息string顯示文件中的可打印字符ranlib產(chǎn)生歸檔文件的系引,并將其保存到歸檔文件中,系引同時(shí)列出歸檔文件各成員所定義的可重分配目標(biāo)文件。addr2line可以將一個(gè)可執(zhí)行程序的地址映射到源文件的對應(yīng)行。Gprof顯示程序調(diào)用段的各種數(shù)據(jù)GNU Tools綜述 GNU Tools是Linux環(huán)境下的開發(fā)工具,用于代碼的生成。GNU Tools的重要組成部分是GCC。GCC 是GNU Compiler Collection 的縮寫,是一個(gè)非常優(yōu)秀的跨平臺編譯器集合

4、,支持x86、ARM、MIPS 和PowerPC 等多種目標(biāo)平臺,支持C、C+、Java、ADA、Fortran 和Pascal 等多種高級語言。GNU Tools綜述p 預(yù)處理預(yù)處理p 編譯編譯 p 匯編匯編p 鏈接鏈接GCC 編譯與鏈接# gcc hello.c -o hello# ./helloHello world!預(yù)處理# gcc -E hello.c -o hello.i編譯和匯編# gcc -c hello.i -o hello.o鏈接# gcc hello.o -o hello一步完成:一步完成:分布完成:分布完成:/* hello.c */#include int main(

5、void) printf (Hello world!n ); return 0;GCC 編譯與鏈接一步完成:一步完成:# gcc foo1.c foo2.c -o foo源程序:源程序: foo1.c foo2.c多步完成:多步完成:# gcc -c foo1.c -o foo1.o# gcc -c foo2.c -o foo2.o# gcc foo1.o foo2.o -o foo歸檔工具ar ar 工具用于建立、修改、提取歸檔文件(archive)。一個(gè)歸檔文件是包含多個(gè)文件的單個(gè)文件(也可以把它認(rèn)為是一個(gè)庫文件),其結(jié)構(gòu)保證了可以從中檢索并得到原始的被包含文件(稱做此歸檔文件的成員)。被

6、包含的原始文件的內(nèi)容、模式(權(quán)限)、時(shí)間戳、所有者和組等屬性都保存在歸檔文件中,并且可在提取后,恢復(fù)原始文件的相關(guān)屬性。ar - p mod relpos archive member .移除符號工具strip strip工具用于去除文件中的符號。使用strip既可以移除目標(biāo)中文件中的某個(gè)符號,也可以移除整個(gè)節(jié)。使用strip,至少要有一個(gè)輸入文件,也可以輸入一個(gè)文件列表。 strip -F bfdname |-target=bfdname -I bfdname |-input-target=bfdname -O bfdname |-output-target=bfdname -s|-stri

7、p-all -S|-g|-d|-strip-debug-K symbolname |-keep-symbol=symbolname -N symbolname |-strip-symbol=symbolname -x|-discard-all -X |-discard-locals-R sectionname |-remove-section=sectionname -o file -p|-preserve-dates-v |-verbose -V|-version -helpobjfile.列出文件符號工具nm nm工具的功能是列出目標(biāo)文件中的符號,這樣可以幫助程序員分析可執(zhí)行程序,獲得目標(biāo)

8、文件中的符號信息和它的屬性。 nm -a | -debug-syms -g | -extern-only -B -C | -demangle -D | -dynamic -s | -print-armap -A | -o | -print-file-name -n | -v | -numeric-sort -p | -no-sort -r | -reverse-sort -size-sort -u | -undefined-only -t radix | -radix= radix -P | -portability -target= bfdname -f format | -format=

9、format -defined-only -l | -line-numbers -no-demangle -V | -version -help object-file .目標(biāo)文件復(fù)制工具objcopy objcopy工具用來把某種格式的目標(biāo)文件內(nèi)容進(jìn)行轉(zhuǎn)換,并輸出為另一種格式的目標(biāo)文件。objcopy使用GNU BFD庫讀寫目標(biāo)文件,通過這個(gè)BFD庫,objcopy能夠以一種不同于源目標(biāo)文件的格式來生成目標(biāo)文件。objcopy -F bfdname | -target= bfdname -I bfdname | -input-target=bfdname -O bfdname | -outp

10、ut-target= bfdname -S | -strip-all -g | -strip-debug -K symbolname | -keep-symbol= symbolname -N symbolname | -strip-symbol= symbolname -L symbolname | -localize-symbol= symbolname -W symbolname | -weaken-symbol= symbolname -x | -discard-all -X | -discard-locals -b byte | -byte= byte -i interleave |

11、 -interleave= interleave -R sectionname | -remove-section= sectionname -p | -preserve-dates -debugging -gap-fill= val -pad-to= address -set-start= val -adjust-start= incr -change-address= incr -change-section-address= section=,+,- val -change-warnings -no-change-warnings -set-section-flags= section=

12、 flags -add-section= sectionname= filename -change-leading char -remove-leading-char -weaken -v | -verbose -V | -version -help input-file outfile目標(biāo)文件信息工具objdump objdump 工具用于顯示一個(gè)或多個(gè)目標(biāo)文件的信息。由其選項(xiàng)來控制顯示哪些特定的信息。objdump -a | -archive-headers -b bfdname | -target= bfdname -debugging -C | -demangle -d | -dis

13、assemble -D | -disassemble-all -disassemble-zeroes -EB | -EL | -endian=big | little -f | -file-headers -h | -section-headers | -headers -i | -info -j section | -section= section -l | -line-numbers -S | -source -m machine | -architecture= machine -p | -private-headers -r | -reloc -R | -dynamic-reloc

14、-s | -full-contents -stabs -t | -syms -T | -dynamic-syms -x | -all-headers -w | -wide -start-address= address -stop-address= address -prefix-addresses -noshow-raw-insn -adjust-vma= offset -version -help object-file.C語言庫 在嵌入式程序的C語言程序的開發(fā)中,C語言庫是應(yīng)用程序所依賴的基礎(chǔ)。在C語言庫中,提供一些C語言中程序運(yùn)行的基礎(chǔ),包括標(biāo)準(zhǔn)的庫函數(shù),如:printf、malloc

15、、字符串處理等基本函數(shù)操作。ELF文件格式 ELF(Executable and Linking Format,可執(zhí)行鏈接格式)是UNIX系統(tǒng)實(shí)驗(yàn)室(USL)作為應(yīng)用程序二進(jìn)制接口(Application Binary Interface,ABI)而開發(fā)和發(fā)布的。工具接口標(biāo)準(zhǔn)委員會(TIS)選擇了正在發(fā)展中的ELF標(biāo)準(zhǔn)作為工作在32位INTEL體系上不同操作系統(tǒng)之間可移植的二進(jìn)制文件格式。 ELF文件格式包括三種主要的類型:p 可執(zhí)行文件p 可重定向文件(*.o)p 共享庫(*.so)ELF文件格式 ELF文件從鏈接器(linker)的角度看,是一些節(jié)(sections)的集合;從程序裝載器(

16、loader)的角度看,它是一些段(segments)的集合。 ELF格式的程序和共享庫具有相同的結(jié)構(gòu),只是段的集合和節(jié)的集合上有些不同。7.2項(xiàng)目管理p工程管理工具M(jìn)ake與Makefilep版本控制工程管理工具M(jìn)ake與Makefile/* main.c */#include hello.hint main (int argc,char* argv) hello(argc,argv); return 0;/* hello.c */#include int hello(int argc,char* argv) int i; printf (Hello world!n); for(i = 0;

17、i argc; i+) printf(argv%d = %sn,i,argvi); return 0;/* hello.h */int hello(int argc,char* argv);工程管理工具M(jìn)ake與Makefile# MakefileCC:= gccHEAD:= hello.hSRC:= hello.c main.c OBJS:= hello.o main.oTT:= helloINC = .CFLAGS = -pipe -w -I$(INC)LDFLAGS = -Wallall:$(TT)$(TT):$(OBJS)$(CC) $(LDFLAGS) $(OBJS) -o $%.o

18、:%c$(CC) $(CFLAGS) -c $ -o $ clean:rm -f *.o $(TT)工程管理工具M(jìn)ake與Makefile# makegcc -pipe -w -I. -c -o hello.o hello.cgcc -pipe -w -I. -c -o main.o main.cgcc -Wall hello.o main.o -o hello# make cleanrm -f *.o hello變量定義含義CC:= gcc 指定編譯使用的工具,本編譯的目標(biāo)為x86的體系可執(zhí)行文件,因此使用gcc,如果需要變異arm體系的可執(zhí)行文件,需要將gcc更改為arm-linux-gc

19、c;OBJS := hello.o main.o指定本工程所有的目標(biāo)文件,在后面的規(guī)則$(TT):$(OBJS)使用;TT:= hello工程最終需要得到的可執(zhí)行文件INC = .包含頭文件,本工程只包含了當(dāng)前路徑.CFLAGS = -pipe -w -I$(INC)編譯選項(xiàng),在語句$(CC) $(CFLAGS) -c $ -o $中使用LDFLAGS = -Wall 鏈接選項(xiàng),在語句$(CC)$(LDFLAGS) $(OBJS) -o $中使用版本控制 CVS是一種廣泛應(yīng)用的、開源的、透明于網(wǎng)絡(luò) 、程序代碼版本的分合控制。明于網(wǎng)絡(luò)的版本控制系統(tǒng)。CVS支持程序代碼版本的儲存與維護(hù)、程序代碼版本的追蹤回溯、支持多人合作開發(fā)項(xiàng)目等。不過這個(gè)廣為使用的版本控制工具還有不少問題,包括中文支持和二進(jìn)制文件的處理都有或多或少的問題。SVN的出現(xiàn)改變了這一現(xiàn)狀。 SVN保留大多數(shù)CVS 特性,而且進(jìn)一步支持更多的特性,包括版本化管理目錄、重命名和文件meta-data、提交是真實(shí)的原子

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論