第7章嵌入式Linux开发环境

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章嵌入式Linux开发环境第7章嵌入式Linux开发环境7.1GNUTools7.2项目管理7.3调试器7.1GNUToolsGNUTools综述GCC编译与链接GCC工具介绍C语言库ELF文件格式GNUTools综述GNUTools是Linux环境下的开发工具,用于代码的生成。GNUTools的重要组成部分是GCC。GCC是GNUCompilerCollection的缩写,是一个非常优秀的跨平台编译器集合,支持x86、ARM、MIPS和PowerPC等多种目标平台,支持C、C++、Java、ADA、Fortran和Pascal等多种高级语言。GNUTools综述文件类型扩展名文件说明文本文件*.cC语言源文件*.C/*.cxx/*.ccC++语言源文件*.i预处理后的C语言源文件*.ii预处理后的C++语言源文件*.s*.S汇编语言*.h头文件二进制文件.o目标文件.so动态库.a静态库GNUTools综述工具名称说明asGNU汇编器。用以将处理器的汇编代码转换成可执行代码,并存储到目标文件.o文件中ldGNU链接器。用于将一个或多个目标文件.o、库组合成一个可执行程序;或者生成静态库和动态库。ar归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容。stripe去除文件中的符号nm用以显示目标文件中的符号objectcopy转换二进制代码的工具objdump显示目标文件的反汇编工具readelf显示ELF文件中的各种信息string显示文件中的可打印字符ranlib产生归档文件的系引,并将其保存到归档文件中,系引同时列出归档文件各成员所定义的可重分配目标文件。addr2line可以将一个可执行程序的地址映射到源文件的对应行。Gprof显示程序调用段的各种数据GNUTools综述GNUTools是Linux环境下的开发工具,用于代码的生成。GNUTools的重要组成部分是GCC。GCC是GNUCompilerCollection的缩写,是一个非常优秀的跨平台编译器集合,支持x86、ARM、MIPS和PowerPC等多种目标平台,支持C、C++、Java、ADA、Fortran和Pascal等多种高级语言。GNUTools综述*.c源文件*.i预处理文件*.s汇编文件*.o目标文件预处理-E汇编-c(调用as)*.o目标文件预处理+编译+汇编-c链接(调用ld)...编译成汇编语言-S可执行程序、库编译成汇编语言-S预处理+编译+汇编-c预处理编译汇编链接GCC编译与链接#gcchello.c-ohello#./helloHelloworld!预处理#gcc-Ehello.c-ohello.i编译和汇编#gcc-chello.i-ohello.o链接#gcchello.o-ohello一步完成:分布完成:/*hello.c*/#includestdio.hintmain(void){printf(Helloworld!\n);return0;}GCC编译与链接一步完成:#gccfoo1.cfoo2.c-ofoo源程序:foo1.cfoo2.c多步完成:#gcc-cfoo1.c-ofoo1.o#gcc-cfoo2.c-ofoo2.o#gccfoo1.ofoo2.o-ofoo归档工具arar工具用于建立、修改、提取归档文件(archive)。一个归档文件是包含多个文件的单个文件(也可以把它认为是一个库文件),其结构保证了可以从中检索并得到原始的被包含文件(称做此归档文件的成员)。被包含的原始文件的内容、模式(权限)、时间戳、所有者和组等属性都保存在归档文件中,并且可在提取后,恢复原始文件的相关属性。ar[-]p[mod[relpos]]archive[member...]移除符号工具stripstrip工具用于去除文件中的符号。使用strip既可以移除目标中文件中的某个符号,也可以移除整个节。使用strip,至少要有一个输入文件,也可以输入一个文件列表。strip[-Fbfdname|--target=bfdname][-Ibfdname|--input-target=bfdname][-Obfdname|--output-target=bfdname][-s|--strip-all][-S|-g|-d|--strip-debug][-Ksymbolname|--keep-symbol=symbolname][-Nsymbolname|--strip-symbol=symbolname][-x|--discard-all][-X|--discard-locals][-Rsectionname|--remove-section=sectionname][-ofile][-p|--preserve-dates][-v|--verbose][-V|--version][--help]objfile...列出文件符号工具nmnm工具的功能是列出目标文件中的符号,这样可以帮助程序员分析可执行程序,获得目标文件中的符号信息和它的属性。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][-tradix|--radix=radix][-P|--portability][--target=bfdname][-fformat|--format=format][--defined-only][-l|--line-numbers][--no-demangle][-V|--version][--help][object-file...]目标文件复制工具objcopyobjcopy工具用来把某种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。objcopy使用GNUBFD库读写目标文件,通过这个BFD库,objcopy能够以一种不同于源目标文件的格式来生成目标文件。objcopy[-Fbfdname|--target=bfdname][-Ibfdname|--input-target=bfdname][-Obfdname|--output-target=bfdname][-S|--strip-all][-g|--strip-debug][-Ksymbolname|--keep-symbol=symbolname][-Nsymbolname|--strip-symbol=symbolname][-Lsymbolname|--localize-symbol=symbolname][-Wsymbolname|--weaken-symbol=symbolname][-x|--discard-all][-X|--discard-locals][-bbyte|--byte=byte][-iinterleave|--interleave=interleave][-Rsectionname|--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=sectionname=filename][--change-leadingchar][--remove-leading-char][--weaken][-v|--verbose][-V|--version][--help]input-file[outfile]目标文件信息工具objdumpobjdump工具用于显示一个或多个目标文件的信息。由其选项来控制显示哪些特定的信息。objdump[-a|--archive-headers][-bbfdname|--target=bfdname][--debugging][-C|--demangle][-d|--disassemble][-D|--disassemble-all][--disassemble-zeroes][-EB|-EL|--endian={big|little}][-f|--file-headers][-h|--section-headers|--headers][-i|--info][-jsection|--section=section][-l|--line-numbers][-S|--source][-mmachine|--architecture=machine][-p|--private-headers][-r|--reloc][-R|--dynamic-reloc][-s|--full-contents][--stabs][-t|--syms][-T|--dynamic-syms][-x|--all-headers][-w|--wide][--start-address=address][--stop-address=address][--prefix-addresses][--[no]show-raw-insn][--adjust-vma=offset][--version][--help][object-file...]C语言库在嵌入式程序的C语言程序的开发中,C语言库是应用程序所依赖的基础。在C语言库中,提供一些C语言中程序运行的基础,包括标准的库函数,如:printf、malloc、字符串处理等基本函数操作。Linux内核硬件C语言库应用程序驱动程序系统调用接口ELF文件格式ELF(ExecutableandLinkingFormat,可执行链接格式)是UNIX系统实验室(USL)作为应用程序二进制接口(ApplicationBinaryInterface,ABI)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。ELF文件格式包括三种主要的类型:可执行文件可重定向文件(*.o)共享库(*.so)ELF文件格式ELF文件从链接器(linker)的角度看,是一些节(sections)的集合;从程序装载器(loader)的角度看,它是一些段(segments)的集合。ELF格式的程序和共享库具有相同的结构,只是段的集合和节的集合上有些不同。Elf头Programheadertable编程头部表(可选)section1(节1)sectionn(节n)……Sectionheadertable(节头部表)Elf头Programheadertable编程头部表Segment1(段1)Segment2(节2)Sectionheadertable(节头部表,可选)…………链接角度运行角度7.2项目管理工程管理工具Make与Makefile版本控制工程管理工具Make与Makefile/*main.c*/#includehello.hintmain(intargc,char*argv[]){hello(argc,argv);return0;}/*hello.c*/#includestdio.hinthello(intargc,char*argv[]){inti;printf(Helloworld!\n);for(i=0;i

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功