嵌入式Linux开发环境课件_第1页
嵌入式Linux开发环境课件_第2页
嵌入式Linux开发环境课件_第3页
嵌入式Linux开发环境课件_第4页
嵌入式Linux开发环境课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章嵌入式Linux开发环境2022/7/29第7章嵌入式Linux开发环境第1页,共28页。第7章 嵌入式Linux开发环境7.1 GNU Tools7.2 项目管理7.3 调试器第7章嵌入式Linux开发环境第2页,共28页。7.1 GNU ToolsGNU Tools综述GCC 编译与链接GCC 工具介绍C语言库ELF文件格式第7章嵌入式Linux开发环境第3页,共28页。GNU Tools综述 GNU Tools是Linux环境下的开发工具,用于代码的生成。GNU Tools的重要组成部分是GCC。GCC 是GNU Compiler Collection 的缩写,是一个非常优秀的跨平

2、台编译器集合,支持x86、ARM、MIPS 和PowerPC 等多种目标平台,支持C、C+、Java、ADA、Fortran 和Pascal 等多种高级语言。第7章嵌入式Linux开发环境第4页,共28页。GNU Tools综述文件类型扩展名文件说明文本文件*.c C语言源文件*.C / *.cxx / *.ccC+语言源文件*.i预处理后的C语言源文件*.ii预处理后的C+语言源文件*.s *.S汇编语言*.h头文件二进制文件.o目标文件.so动态库.a静态库第7章嵌入式Linux开发环境第5页,共28页。GNU Tools综述工具名称说明asGNU汇编器。用以将处理器的汇编代码转换成可执行

3、代码,并存储到目标文件.o文件中ldGNU链接器。用于将一个或多个目标文件.o、库组合成一个可执行程序;或者生成静态库和动态库。ar归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容。stripe去除文件中的符号nm用以显示目标文件中的符号objectcopy转换二进制代码的工具objdump显示目标文件的反汇编工具readelf显示ELF文件中的各种信息string显示文件中的可打印字符ranlib产生归档文件的系引,并将其保存到归档文件中,系引同时列出归档文件各成员所定义的可重分配目标文件。addr2line可以将一个可执行程序的地址映射到源文件的对应行。Gprof显示程

4、序调用段的各种数据第7章嵌入式Linux开发环境第6页,共28页。GNU Tools综述 GNU Tools是Linux环境下的开发工具,用于代码的生成。GNU Tools的重要组成部分是GCC。GCC 是GNU Compiler Collection 的缩写,是一个非常优秀的跨平台编译器集合,支持x86、ARM、MIPS 和PowerPC 等多种目标平台,支持C、C+、Java、ADA、Fortran 和Pascal 等多种高级语言。第7章嵌入式Linux开发环境第7页,共28页。GNU Tools综述 预处理 编译 汇编 链接第7章嵌入式Linux开发环境第8页,共28页。GCC 编译与链

5、接# gcc hello.c -o hello# ./helloHello world!预处理# 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 ); return 0;第7章嵌入式Linux开发环境第9页,共28页。GCC 编译与链接一步完成:# gcc foo1.c foo2.c -o foo源程序: foo1.c foo2.c多步完成:#

6、gcc -c foo1.c -o foo1.o# gcc -c foo2.c -o foo2.o# gcc foo1.o foo2.o -o foo第7章嵌入式Linux开发环境第10页,共28页。归档工具ar ar 工具用于建立、修改、提取归档文件(archive)。一个归档文件是包含多个文件的单个文件(也可以把它认为是一个库文件),其结构保证了可以从中检索并得到原始的被包含文件(称做此归档文件的成员)。被包含的原始文件的内容、模式(权限)、时间戳、所有者和组等属性都保存在归档文件中,并且可在提取后,恢复原始文件的相关属性。ar - p mod relpos archive member .

7、第7章嵌入式Linux开发环境第11页,共28页。移除符号工具strip strip工具用于去除文件中的符号。使用strip既可以移除目标中文件中的某个符号,也可以移除整个节。使用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-symbol=symbolname -N

8、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.第7章嵌入式Linux开发环境第12页,共28页。列出文件符号工具nm nm工具的功能是列出目标文件中的符号,这样可以帮助程序员分析可执行程序,获得目标文件中的符号信息和它的属性。 nm -a | -debug-syms -g | -ext

9、ern-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= format -defined-only -l | -line-numbers -no-

10、demangle -V | -version -help object-file .第7章嵌入式Linux开发环境第13页,共28页。目标文件复制工具objcopy objcopy工具用来把某种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。objcopy使用GNU BFD库读写目标文件,通过这个BFD库,objcopy能够以一种不同于源目标文件的格式来生成目标文件。objcopy -F bfdname | -target= bfdname -I bfdname | -input-target=bfdname -O bfdname | -output-target= bfdname

11、-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 | -interleave= inter

12、leave -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= flags -add-section

13、= sectionname= filename -change-leading char -remove-leading-char -weaken -v | -verbose -V | -version -help input-file outfile第7章嵌入式Linux开发环境第14页,共28页。目标文件信息工具objdump objdump 工具用于显示一个或多个目标文件的信息。由其选项来控制显示哪些特定的信息。objdump -a | -archive-headers -b bfdname | -target= bfdname -debugging -C | -demangle -d

14、| -disassemble -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-

15、reloc -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.第7章嵌入式Linux开发环境第15页,共28页。C语言库 在嵌入式程序的C语言程序的开发中,C语言库是应用程序所依赖的基础。在C语言库中,提供一些C语言中程

16、序运行的基础,包括标准的库函数,如:printf、malloc、字符串处理等基本函数操作。第7章嵌入式Linux开发环境第16页,共28页。ELF文件格式 ELF(Executable and Linking Format,可执行链接格式)是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。 ELF文件格式包括三种主要的类型: 可执行文件 可重定向文件(*.o) 共享库(*.so)第7

17、章嵌入式Linux开发环境第17页,共28页。ELF文件格式 ELF文件从链接器(linker)的角度看,是一些节(sections)的集合;从程序装载器(loader)的角度看,它是一些段(segments)的集合。 ELF格式的程序和共享库具有相同的结构,只是段的集合和节的集合上有些不同。第7章嵌入式Linux开发环境第18页,共28页。7.2项目管理工程管理工具Make与Makefile版本控制第7章嵌入式Linux开发环境第19页,共28页。工程管理工具Make与Makefile/* main.c */#include hello.hint main (int argc,char* a

18、rgv) 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 hello(int argc,char* argv);第7章嵌入式Linux开发环境第20页,共28页。工程管理工具Make与Makefile# MakefileCC:= gccHEAD:= hello.hSRC

19、:= 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)第7章嵌入式Linux开发环境第21页,共28页。工程管理工具Make与Makefile# makegcc -pipe -w -I. -c -o hello.o hello.cgcc -pipe -

20、w -I. -c -o main.o main.cgcc -Wall hello.o main.o -o hello# make cleanrm -f *.o hello变量定义含义CC:= gcc 指定编译使用的工具,本编译的目标为x86的体系可执行文件,因此使用gcc,如果需要变异arm体系的可执行文件,需要将gcc更改为arm-linux-gcc;OBJS:= hello.o main.o指定本工程所有的目标文件,在后面的规则$(TT):$(OBJS)使用;TT:= hello工程最终需要得到的可执行文件INC = .包含头文件,本工程只包含了当前路径.CFLAGS = -pipe -w

21、 -I$(INC)编译选项,在语句$(CC) $(CFLAGS) -c $ -o $中使用LDFLAGS = -Wall 链接选项,在语句$(CC)$(LDFLAGS) $(OBJS) -o $中使用第7章嵌入式Linux开发环境第22页,共28页。版本控制 CVS是一种广泛应用的、开源的、透明于网络 、程序代码版本的分合控制。明于网络的版本控制系统。CVS支持程序代码版本的储存与维护、程序代码版本的追踪回溯、支持多人合作开发项目等。不过这个广为使用的版本控制工具还有不少问题,包括中文支持和二进制文件的处理都有或多或少的问题。SVN的出现改变了这一现状。 SVN保留大多数CVS 特性,而且进一步支持更多的特性,包括版本化管理目录、重命名和文件meta-data、提交是真实的原子操作、可以通过WebDAV/DeltaV协议进行访问、可以选择独立服务器模式、分支和标签是代价低廉(固定不变的)的操作、高效处理二进制文件等。第7章嵌入式Linux开发环境第23页,共28页。7.3 调试器GDB调试基础远程GDB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论