




版權(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 工程管理7.3 調(diào)試器7.1 GNU ToolsGNU Tools綜述GCC 編譯與鏈接GCC 工具引見C言語庫ELF文件格式GNU Tools綜述 GNU Tools是Linux環(huán)境下的開發(fā)工具,用于代碼的生成。GNU Tools的重要組成部分是GCC。GCC 是GNU Compiler Collection 的縮寫,是一個非常優(yōu)秀的跨平臺編譯器集合,支持x86、ARM、MIPS 和PowerPC 等多種目的平臺,支持C、C+、Java、ADA、Fortran 和Pascal 等多種高級言語。G
2、NU 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鏈接器。用于將一個或多個目標(biāo)文件.o、庫組合成一個可執(zhí)行程序;或者生成靜態(tài)庫和動態(tài)庫。ar歸檔工具,可以將多個文件組合成一個大文件,并且可以讀取原始文件的內(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可以將一個可執(zhí)行程序的地址映射到源文件的對應(yīng)行。Gprof顯示程序調(diào)用段的各種數(shù)據(jù)GNU Tools綜述 GNU Tools是Linux環(huán)境下的開發(fā)工具,用于代碼的生成。GNU Tools的重要組成部分是GCC。GCC 是GNU Compiler Collection 的縮寫,是一個非常優(yōu)秀的跨平臺編譯器集合,支持x8
4、6、ARM、MIPS 和PowerPC 等多種目的平臺,支持C、C+、Java、ADA、Fortran 和Pascal 等多種高級言語。GNU Tools綜述 預(yù)處置 編譯 匯編 鏈接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(void) printf (Hello world!n )
5、; 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òu)造保證了可以從中檢索并得到原始的被包含文件稱做此歸檔文件的成員。被包含的原始文件的內(nèi)容、方式權(quán)限、時(shí)間戳、一切者和組等屬性都保管在歸檔文件中,并且可在提取后,恢
6、復(fù)原始文件的相關(guān)屬性。ar - p mod relpos archive member .移除符號工具strip strip工具用于去除文件中的符號。運(yùn)用strip既可以移除目的中文件中的某個符號,也可以移除整個節(jié)。運(yùn)用strip,至少要有一個輸入文件,也可以輸入一個文件列表。 strip -F bfdname |-target=bfdname -I bfdname |-input-target=bfdname -O bfdname |-output-target=bfdname -s|-strip-all -S|-g|-d|-strip-debug-K symbolname |-keep-s
7、ymbol=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工具的功能是列出目的文件中的符號,這樣可以協(xié)助程序員分析可執(zhí)行程序,獲得目的文件中的符號信息和它的屬性。 nm -a | -debug-syms -g | -extern-o
8、nly -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= format -defined-only -l | -line-numbers -no-deman
9、gle -V | -version -help object-file .目的文件復(fù)制工具objcopy objcopy工具用來把某種格式的目的文件內(nèi)容進(jìn)展轉(zhuǎn)換,并輸出為另一種格式的目的文件。objcopy運(yùn)用GNU BFD庫讀寫目的文件,經(jīng)過這個BFD庫,objcopy可以以一種不同于源目的文件的格式來生成目的文件。objcopy -F bfdname | -target= bfdname -I bfdname | -input-target=bfdname -O bfdname | -output-target= bfdname -S | -strip-all -g | -strip-de
10、bug -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 | -interleave= interleave -R sectionname | -remove
11、-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= flags -add-section= sectionname= filename -chang
12、e-leading char -remove-leading-char -weaken -v | -verbose -V | -version -help input-file outfile目的文件信息工具objdump objdump 工具用于顯示一個或多個目的文件的信息。由其選項(xiàng)來控制顯示哪些特定的信息。objdump -a | -archive-headers -b bfdname | -target= bfdname -debugging -C | -demangle -d | -disassemble -D | -disassemble-all -disassemble-zeroe
13、s -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 -s | -full-contents -stabs -t | -syms -T | -dynam
14、ic-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ùn)用程序所依賴的根底。在C言語庫中,提供一些C言語中程序運(yùn)轉(zhuǎn)的根底,包括規(guī)范的庫函數(shù),如:printf、malloc、字符串處置等根本函數(shù)操作。ELF文件格式 ELFExecutable and Linking F
15、ormat,可執(zhí)行鏈接格式是UNIX系統(tǒng)實(shí)驗(yàn)室USL作為運(yùn)用程序二進(jìn)制接口Application Binary Interface,ABI而開發(fā)和發(fā)布的。工具接口規(guī)范委員會(TIS)選擇了正在開展中的ELF規(guī)范作為任務(wù)在32位INTEL體系上不同操作系統(tǒng)之間可移植的二進(jìn)制文件格式。 ELF文件格式包括三種主要的類型: 可執(zhí)行文件 可重定向文件*.o 共享庫*.soELF文件格式 ELF文件從鏈接器linker的角度看,是一些節(jié)sections的集合;從程序裝載器loader的角度看,它是一些段segments的集合。 ELF格式的程序和共享庫具有一樣的構(gòu)造,只是段的集合和節(jié)的集合上有些不同。7
16、.2工程管理工程管理工具M(jìn)ake與Makefile版本控制工程管理工具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;i argc; i+) printf(argv%d = %sn,i,argvi); return 0;/* hello.h */int hell
17、o(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:%c$(CC) $(CFLAGS) -c $ -o $ clean:rm -f *.o $(TT)工程管理工具M(jìn)ake與Makefile# m
18、akegcc -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-gcc;OBJS:= hello.o main.o指定本工程所有的目標(biāo)文件,在后面的規(guī)則$(TT):$(OBJS)使用;TT:= hello工程最終
19、需要得到的可執(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ùn)用的、開源的、透明于網(wǎng)絡(luò) 、程序代碼版本的分合控制。明于網(wǎng)絡(luò)的版本控制系統(tǒng)。CVS支持程序代碼版本的儲存與維護(hù)、程序代碼版本的追蹤回溯、支持多人協(xié)作開發(fā)工程等。不過這個廣為運(yùn)用的版本控制工具還有不少問題,包括中文支持和二進(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共同承包甲方合同范例
- 醫(yī)藥物流收購合同范例
- 培養(yǎng)學(xué)生審美素養(yǎng)的幼兒園教研計(jì)劃
- 兒童心理學(xué)家的咨詢項(xiàng)目與研究計(jì)劃
- 2025年自我保護(hù)中班標(biāo)準(zhǔn)教案
- 班級交流平臺建設(shè)計(jì)劃
- 品牌體驗(yàn)經(jīng)濟(jì)的興起與趨勢計(jì)劃
- 《貴州盛聯(lián)新能源投資有限公司赫章縣松林坡鄉(xiāng)騰達(dá)煤礦〔兼并重組(調(diào)整)〕礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》專家組評審意見
- 縫紉機(jī)操作知識培訓(xùn)課件
- 營銷人員心理素質(zhì)專業(yè)培訓(xùn)教程優(yōu)化方案
- 興隆街辦拆遷規(guī)劃方案
- 2《秦腔》公開課一等獎創(chuàng)新教學(xué)設(shè)計(jì) 統(tǒng)編版高中語文選擇性必修下冊
- 2024年城市軌道交通行車值班員(三級)考試題庫匯總(附答案)
- 老藥新用與用藥創(chuàng)新趨勢
- 特種作業(yè)人員管理規(guī)定
- 安全管理之雙重預(yù)防機(jī)制
- 《銳器傷應(yīng)急處理》課件
- 建筑工程趕工補(bǔ)償費(fèi)用計(jì)算表
- 2024屆陜西省西安市西北工業(yè)大學(xué)高考語文一模試卷含解析
- 2024年興湘集團(tuán)全資子公司招聘筆試參考題庫含答案解析
- 第十七課 《虛擬與現(xiàn)實(shí)》(課件)2023-2024學(xué)年北師大版(2013)初中心理健康七年級上冊
評論
0/150
提交評論