- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式移植相关问题
中国科学院声学研究所 Institute of Acoustics, Chinese Academy of Sciences * * 嵌入式移植相关问题 内容提要 编译链接介绍 Makefile介绍 嵌入式移植一般步骤 嵌入式移植举例 编译的概念 编译:把源文件(c/cpp)编译成目标文件,在Windows下也就是?.obj?文件,Linux下是?.o?文件。 词法分析及语法分析:检查语法、函数与变量声明等; 目标代码生成:根据源文件生成目标CPU的汇编文件。每个源文件对应一个目标文件。 链接的概念 链接:主要链接函数和全局变量。将自己代码生成的Object File合并成可执行文件(如果用了别的库,需要找到或者合并其他库提供的函数。) 打包:将多个Object文件打包成一个文件。Linux下为.a文件,Windows下为.lib文件。Linux下用”ar”命令可完成该操作。 Linux链接错误:unrefenced xxx 编译Helloworld Helloworld 词法分析及语法分析 识别int,void,printf, “”,return, 0 检查{}配对,”type functionname(param)” 中间代码生成 特别注意:符号表 #include stdio.hint main(void){? ? printf(Hello World!\n);? ? return 0;} Helloworld符号表 Helloworld.o的符号表 外部符号:puts,用到了标准C库(libc)函数 SYMBOL TABLE:l??? df *ABS*?hello.cl??? d? .text?00000000 l??? d? .data?00000000 l??? d? .bss??00000000 l??? d? .rodata.str1.100000000 l??? d? .comment??????00000000 g??? F? .text?main??????? *UND*?puts Helloworld链接过程 静态链接(链接libc.a) 链接时,将puts的代码搬移到Helloworld可执行程序中 运行时,直接执行在Helloworld中的puts代码 动态链接(链接libc.so) 链接时,检查是否可以找到puts符号,并记录提供puts执行码的动态库(这里是libc.so)以及其他一些信息 运行时,当需要执行puts时,加载libc.so,找到puts的地址,执行puts 内容提要 编译链接介绍 Makefile介绍 嵌入式移植一般步骤 嵌入式移植举例 Makefile规则 规则描述 规则解释 target也就是一个目标文件,可以是Object?File,也可以是执行文件。 prerequisites就是,要生成那个target所需要的文件或是目标。 command也就是make需要执行的命令。 target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。 target?...?:?prerequisites?... ????????????command ????????????... ????????????... Makefile举例 依赖关系解释,TAB键… 输入命令“make”就可以生成执行文件edit。make会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么,make就会执行后续定义的命令 输入命令“make clean”就可以删除执行文件和所有的中间目标文件 Makefile中的变量 针对前面的例子 常用的变量 CC, AR, … CC = mipsel-linux-gcc AR = mipsel-linux-ar CFLAGS, LDFLAGS, … CFLAGS = -I$(dir_for_include) –O2 LDFLAGS = -L$(dir_for_lib) –l$(libname) 内容提要 编译链接介绍 Makefile介绍 嵌入式移植一般步骤 嵌入式移植举例 开发环境准备 编译链接环境:工具链(交叉编译器) 自己编译工具链:arm-elf-gcc … 使用现成的工具链: mipsel-linux-gcc … 将工具链
文档评论(0)