嵌入式操作系统方案

上传人:xmg****18 文档编号:119995535 上传时间:2020-01-31 格式:PPT 页数:110 大小:2.06MB
返回 下载 相关 举报
嵌入式操作系统方案_第1页
第1页 / 共110页
嵌入式操作系统方案_第2页
第2页 / 共110页
嵌入式操作系统方案_第3页
第3页 / 共110页
嵌入式操作系统方案_第4页
第4页 / 共110页
嵌入式操作系统方案_第5页
第5页 / 共110页
点击查看更多>>
资源描述

《嵌入式操作系统方案》由会员分享,可在线阅读,更多相关《嵌入式操作系统方案(110页珍藏版)》请在金锄头文库上搜索。

1、嵌入式操作系统 陈香兰xlanchen 助教 陈博 李春华 GNU开发工具链介绍 工欲善其事 必先利其器 论语 2020 1 22 EmbeddedOperatingSystems 3 107 主要内容 GNUTools简介GNUTools交叉开发环境及其安装 2020 1 22 EmbeddedOperatingSystems 4 107 本地开发vs交叉平台开发 本地开发 一般软件的开发属于本地开发 也就是说开发软件的系统与运行软件的系统是相同的 交叉平台开发 本课程所涉及到的嵌入式系统开发属于交叉平台开发 也就是说开发软件的系统与运行软件的系统不同 2020 1 22 EmbeddedO

2、peratingSystems 5 107 交叉开发平台 主机 开发软件的平台 称为主机 往往是通用电脑 目标机 运行软件的平台 称为目标机 在这里是嵌入式系统 2020 1 22 EmbeddedOperatingSystems 6 107 嵌入式交叉开发工具 掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一与主流开发工具类似 嵌入式交叉开发工具也包括编译器 即能够把一个源程序编译生成一个可执行程序的软件调试工具 即能够对执行程序进行源码或汇编级调试的软件软件工程工具 用于协助多人开发或大型软件项目的管理的软件 2020 1 22 EmbeddedOperatingSystems 7

3、107 GNUtools GNUtools和其他一些优秀的开源软件可以完全覆盖上述类型的软件开发工具 为了更好的开发嵌入式系统 需要熟悉如下一些软件GCCBinutils 辅助GCC的主要软件Gdbmakecvs 2020 1 22 EmbeddedOperatingSystems 8 107 一 GCC 很多人认为GCC只是一个C编译器 其实GCC GNUCompilerCollection目前 GCC可以支持多种高级语言 如C C ADAObjectCJAVAFortranPASCAL 2020 1 22 EmbeddedOperatingSystems 9 107 GCC下的工具 cpp

4、 预处理器GNUC编译器在编译前自动使用cpp对用户程序进行预处理gcc 符合ISO等标准的C编译器g 基本符合ISO标准的C 编译器gcj GCC的java前端gnat GCC的GNUADA95前端 2020 1 22 EmbeddedOperatingSystems 10 107 GNUTools gcc gcc是一个强大的工具集合 它包含了预处理器 编译器 汇编器 链接器等组件 它会在需要的时候调用其他组件 输入文件的类型和传递给gcc的参数决定了gcc调用具体的哪些组件 对于开发者 它提供的足够多的参数 可以让开发者全面控制代码的生成 这对嵌入式系统级的软件开发非常重要 2020 1

5、22 EmbeddedOperatingSystems 11 107 gcc使用举例 1 源程序 2020 1 22 EmbeddedOperatingSystems 12 107 gcc使用举例 2 编译和运行 编译 运行 2020 1 22 EmbeddedOperatingSystems 13 107 gcc的工作过程 1 如果使用 v选项 则可以看到许多被隐藏的信息 2020 1 22 EmbeddedOperatingSystems 14 107 2020 1 22 EmbeddedOperatingSystems 15 107 gcc的编译过程 一般情况下 c程序的编译过程为1 预

6、处理2 编译成汇编代码3 汇编成目标代码4 链接 2020 1 22 EmbeddedOperatingSystems 16 107 1 预处理 预处理 使用 E参数输出文件的后缀为 cpp gcc E ogcctest cppgcctest c使用wc命令比较预处理后的文件与源文件 可以看到两个文件的差异 2020 1 22 EmbeddedOperatingSystems 17 107 行数单词数字节数 预编译 2020 1 22 EmbeddedOperatingSystems 18 107 预处理文件 汇编代码1 使用 x参数说明根据指定的步骤进行工作 cpp output指明从预处理

7、得到的文件开始编译2 使用 S说明生成汇编代码后停止工作gcc xcpp output S ogcctest sgcctest cpp也可以直接编译到汇编代码gcc Sgcctest c 2 编译成汇编代码 2020 1 22 EmbeddedOperatingSystems 19 107 预处理文件 汇编代码 直接编译到汇编代码 s 2020 1 22 EmbeddedOperatingSystems 20 107 3 编译成目标代码 汇编代码 目标代码gcc xassembler cgcctest s直接编译成目标代码gcc cgcctest c使用汇编器生成目标代码as ogcctest

8、 ogcctest s 2020 1 22 EmbeddedOperatingSystems 21 107 汇编代码 目标代码 直接编译成目标代码 使用汇编器 2020 1 22 EmbeddedOperatingSystems 22 107 4 编译成执行代码 目标代码 执行代码gcc ogcctestgcctest o直接生成执行代码gcc ogcctestgcctest c 2020 1 22 EmbeddedOperatingSystems 23 107 目标代码 执行代码 直接生成执行代码 2020 1 22 EmbeddedOperatingSystems 24 107 gcc的高

9、级选项 Wall 打开所有的警告信息 2020 1 22 EmbeddedOperatingSystems 25 107 根据警告信息检查源程序 Main函数的返回值为int 在函数的末尾应当返回一个值 2020 1 22 EmbeddedOperatingSystems 26 107 修改源程序 2020 1 22 EmbeddedOperatingSystems 27 107 优化编译 优化编译选项有 O0缺省情况 不优化 O1 O2 O3等等 不同程度的优化 2020 1 22 EmbeddedOperatingSystems 28 107 gcc的优化编译举例 1 考虑如下的源代码 不

10、同的优化编译选项 2020 1 22 EmbeddedOperatingSystems 29 107 gcc的优化编译举例 2 使用time命令统计程序的运行 2020 1 22 EmbeddedOperatingSystems 30 107 二 GNUbinutils binutils是一组二进制工具程序集 是辅助GCC的主要软件 它主要包括addr2line把程序地址转换为文件名和行号 在命令行中给它一个地址和一个可执行文件名 它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号 ar建立 修改 提取归档文件 归档文件是包含多个文件内容的一个大文件 其结构保证了可以恢复原

11、始文件内容 2020 1 22 EmbeddedOperatingSystems 31 107 as是GNU汇编器 主要用来编译GNUC编译器gcc输出的汇编文件 他将汇编代码转换成二进制代码 并存放到一个object文件中 该目标文件将由连接器ld连接C filt解码C 符号名 连接器使用它来过滤C 和Java符号 防止重载函数冲突 gprof显示程序调用段的各种数据 ld是连接器 它把一些目标和归档文件结合在一起 重定位数据 并链接符号引用 最终形成一个可执行文件 通常 建立一个新编译程序的最后一步就是调用ld 2020 1 22 EmbeddedOperatingSystems 32 1

12、07 nm列出目标文件中的符号 objcopy把一种目标文件中的内容复制到另一种类型的目标文件中 objdump显示一个或者更多目标文件的信息 使用选项来控制其显示的信息 它所显示的信息通常只有编写编译工具的人才感兴趣 ranlib产生归档文件索引 并将其保存到这个归档文件中 在索引中列出了归档文件各成员所定义的可重分配目标文件 readelf显示elf格式可执行文件的信息 2020 1 22 EmbeddedOperatingSystems 33 107 size列出目标文件每一段的大小以及总体的大小 默认情况下 对于每个目标文件或者一个归档文件中的每个模块只产生一行输出 strings打印

13、某个文件的可打印字符串 这些字符串最少4个字符长 也可以使用选项 n设置字符串的最小长度 默认情况下 它只打印目标文件初始化和可加载段中的可打印字符 对于其它类型的文件它打印整个文件的可打印字符 这个程序对于了解非文本文件的内容很有帮助 strip丢弃目标文件中的全部或者特定符号 2020 1 22 EmbeddedOperatingSystems 34 107 libiberty包含许多GNU程序都会用到的函数 这些程序有 getopt obstack strerror strtol和strtoul libbfd二进制文件描述库 libopcodes用来处理opcodes的库 在生成一些应用

14、程序的时候也会用到它 比如objdump Opcodes是文本格式可读的处理器操作指令 2020 1 22 EmbeddedOperatingSystems 35 107 binutils开发工具使用举例 arnmObjcopyObjdumpreadelf 2020 1 22 EmbeddedOperatingSystems 36 107 1 ar ar用于建立 修改 提取归档文件 archive 一个归档文件 是包含多个被包含文件的单个文件 也可以认为归档文件是一个库文件 被包含的原始文件的内容 权限 时间戳 所有者等属性都保存在归档文件中 并且在提取之后可以还原 2020 1 22 Emb

15、eddedOperatingSystems 37 107 使用ar建立库文件 1 源程序add c和minus c 2020 1 22 EmbeddedOperatingSystems 38 107 使用ar建立库文件 2 编译成目标文件 将库文件拷贝到 usr lib目录下 Ar的rv参数的说明 r 将多个文件组成一个文件v 输出信息 建立库文件 2020 1 22 EmbeddedOperatingSystems 39 107 库文件使用举例在代码中使用Add和Minus函数 2020 1 22 EmbeddedOperatingSystems 40 107 在编译时指定库文件 指明将li

16、btest a链接进来 运行结果 2020 1 22 EmbeddedOperatingSystems 41 107 2 nm nm的主要功能是列出目标文件中的符号 这样程序员就可以定位和分析执行程序和目标文件中的符号信息和它的属性 2020 1 22 EmbeddedOperatingSystems 42 107 nm显示的符号类型 A 符号的值是绝对值 并且不会被将来的链接所改变B 符号位于未初始化数据部分 BSS段 C 符号是公共的 公共符号是未初始化的数据 在链接时 多个公共符号可能以相同的名字出现 如果符号在其他地方被定义 则该文件中的这个符号会被当作引用来处理D 符号位于已初始化的数据部分T 符号位于代码部分U 符号未被定义 符号类型未知 或者目标文件格式特殊 2020 1 22 EmbeddedOperatingSystems 43 107 nm使用举例 如果对test可执行文件使用nm 会有什么结果呢 作业 2020 1 22 EmbeddedOperatingSystems 44 107 3 objcopy 可以将一种格式的目标文件内容进行转换 并输出为另一种格式的目

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号