




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章开发环境和调试技术 提纲 1 交叉开发环境模式概述2 宿主机环境3 目标板环境4 交叉编译工具链5 gdb调试器6 远程调试7 内核调试8 网络调试 1 交叉开发环境模式概述 什么是嵌入式系统 以应用为中心 以计算机技术为基础 软件硬件可裁剪 适应应用系统对功能 可靠性 成本 体积 功耗严格要求的专用计算机系统 硬件上的局限性存储空间小处理器频率低缺少存储 输入输出设备 宿主机 目标板交叉开发模式 组成部分宿主机 平时使用的桌面计算机目标板 嵌入式开发板介绍利用宿主机上已有的成熟的开发工具 专门针对目标板定制一套系统 包括引导程序 内核和文件系统 然后下载到目标板上运行 宿主机 目标板交叉开发模式 开发过程在宿主机上编写代码 并通过交叉编译工具编译出能够在目标板上运行的程序 然后下载到目标板上测试执行 最后利用宿主机上的调试工具对目标板上运行的程序进行远程调试 特点使用和桌面开发一样的工具 降低学习成本 充分利用宿主机的开发环境 宿主机 目标板连接方式 串口利用串口给目标板发送命令 同时也可以接受目标板返回的信息并显示 宿主机可以通过串口往目标板传送文件 目标板可以把程序运行的结果返回并显示 串口驱动程序的实现相对比较简单 缺点是传输速度慢 并不适用于传输大量数据的场合 以太网以太网是当今局域网采用的最通用的通信协议标准 它使用简单 配置灵活 支持广泛 传输速率快 安全可靠 缺点是网络驱动的实现比较复杂 宿主机 目标板连接方式 USBUSB是UniversalSerialBus通用串行总线 的缩写 现已成为PC的标准 基于USB标准的设备被广泛使用 一种快速 灵活的总线接口 与其它通信接口相比 USB接口的特点是易于使用 支持热插拔 无需用户自己配置 系统会自动搜索驱动并安装 USB是典型的主从结构 两端分别需要不同的驱动程序 JTAGJTAG是一种国际标准测试协议 主要用于芯片内部测试及对系统进行仿真 调试 在嵌入式系统领域 几乎所有的处理器都支持JTAG 调试器的单步调试和断点都需要和JTAG交涉 可以使用JTAG将程序烧写到目标板上 2 宿主机环境 串口终端BOOTP协议TFTP协议交叉编译Make工具 串口终端 串口的用途作为终端执行命令 管理嵌入式系统 使用zmodem协议等传送小文件 串口终端超级终端 WindowsXP Minicom Linux BOOTP协议 什么是BOOTP协议引导协议 BootstrapProtocol BOOTP 是一种基于TCP IP的协议 它最初在RFC951中定义 如今在通用计算机上广泛使用的DHCP协议就是从BOOTP协议扩展而来 BOOTP协议使用TCP IP网络协议中的UDP67 68两个通讯端口 BOOTP协议用途用于无盘客户机从服务器得到自己的IP地址 服务器的IP地址 启动映象文件名 网关信息等等 BOOTP处理过程 第一步 在主机平台运行BOOTP服务的情况下 目标板由BootLoader启动BOOTP 此时目标板还没有IP地址 它就用广播形式以IP地址0 0 0 0向网络中发出IP地址查询的请求 这个请求帧中包含了客户机的网卡MAC地址 第二步 主机平台上的BOOTP服务器接收到的这个请求帧 根据这帧中的MAC地址在Bootptab启动数据库中查找这个MAC的记录 如果没有此MAC的记录则不响应这个请求 如果有就将FOUND帧发送回目标板 FOUND帧中包含的主要信息有目标板的IP地址 服务器的IP地址 硬件类型 网关IP地址 目标板MAC地址和启动映象文件名 第三步 目标板就根据FOUND帧中的信息通过TFTP服务器下载启动映象文件 TFTP协议 什么是BOOTP协议TFTP的全称是TrivialFileTransferProtocol 即 简单文件传输协议 它是TCP IP协议族中的一个在客户端和服务端之间进行简单文件传输的协议 提供不复杂 开销不大的文件传输服务 TFTP特点不提供用户名和口令TFTP协议传输由客户端发起 交叉编译 背景目标文件在不同架构间由于采用的CPU指令集不同等原因不能通用 定义交叉编译就是在一个架构的机器下编译另一个架构的目标文件 需要安装交叉编译工具链 make工具 GNUmake是一种常用的编译工具 通过它 开发人员可以很方便地管理软件编译的内容 方式和时机 从而能够把主要精力集中在代码的编写上 make会自动根据文件修改时间来判断源文件中哪些部分有更新 通过解释Makefile文件内的规则并执行相应的命令 重新编译链接这些更新过的文件 make工作过程 编写MakefileMakefile由一系列规则组成 每条规则说明要生成哪些目标文件 生成目标文件所依赖的其它文件以及生成目标文件所需要的命令 编译过程通过查看时间戳来确认依赖文件是否比目标文件更新 如果是则重新执行这条规则的命令 并进一步地执行依赖这些中间目标文件的规则 层层推进 最后生成新的结果文件 需要重新编译的情况 所有的依赖文件都没有被编译过 则对每个源文件进行编译并进行链接 生成最后的可执行程序 源文件在上次编译之后被修改过 则在本次执行make的时候将会被重新编译 头文件在上次编译之后被修改过 则所有包含此头文件的源文件在本次执行make的时候将将会被重新编译 Makefile示例 MakefileExampleforMathmath main odisplay oplus ominus omulti odivide omod ogcc omathmain odisplay oplus ominus omulti odivide omod omain o main cdefs hdisplay hgcc cmain cdisplay o display cdefs hdisplay hgcc cdisplay cplus o plus cdefs hgcc cplus cminus o minus cdefs hgcc cminus cmulti o multi cdefs hgcc cmulti cdivide o divide cdefs hgcc cdivide cmod o mod cdefs hgcc cmod c PHONY cleanclean rmmain odisplay oplus ominus omulti odivide omod o Makefile基本规则 TARGET PREREQUISITES COMMAND command前面使用tab缩进说明 TARGET 规则的目标 通常是最后所要生成的可执行文件名或者为了生成这个目标而必需的中间过程的目标文件名 PREREQUISITES 规则的依赖 生成规则目标所需要的文件列表 通常一个目标依赖于一个或多个文件 COMMAND 规则执行的命令 生成规则目标所需要执行的命令 可以是shell下面的任何命令组合 3 目标板环境 JTAG接口BootLoader JTAG接口简介 作为硬件测试手段 JTAG的功能与CPU状态无关 可驱动设备的所有外部引脚并读入数据 而且在设备内部夺取外部的连接点 与通往外部的各个pin脚一一连接 各个cell为了形成SerialShiftRegister而相连 整体的接口由5个pin脚来控制 TDI TMS TCK nTRST TDO 其功能包括 测试线路连线和端子的连接状态 测试设备间的连接状态 进行Flashmemory烧写等 BootLoader简介 BootLoader是系统加电后运行的第一段代码 完成初始化硬件设备 创建内核需要的信息等工作 最后调用操作系统内核 对硬件的依赖非常强 不同的体系结构 不同的嵌入式板级设备配置都会对BootLoader有不同的需求 4 交叉编译工具链 交叉编译工具链是一个由编译器 链接器和解释器组成的集成开发环境 和本地编译类似 交叉编译的过程也是由编译 链接等阶段组成 源程序通过交叉编译器编译成目标模块 并由交叉链接器加载库最后链接成可在目标平台上执行的程序代码 交叉编译过程 交叉编译的构建 从头编译编译难度大 不适合初学者 脚本编译需要选择合适的脚本工具 例如crosstool下载使用下载指定平台编译好的二进制包 相关工具 交叉编译工具链主要包括 标准库 glibc编译器 gcc链接器 ld汇编器 as调试器 gdb 标准库 glibc 最初是自由软件基金会为其GNU操作系统所写 但目前最主要的应用是配合Linux内核 成为GNU Linux操作系统一个重要的组成部分 是Linux系统中最底层的API 几乎其它任何运行库都会直接或间接地依赖于glibc 除了封装系统调用之外 还提供一些基本的功能 例如open malloc printf exit等等 编译器 gcc 支持不同的编程语言 它被目前许多Unix Linux系统作为默认的标准编译器 支持多种处理器架构上 并且在商业 专利和开源软件开发环境中广泛使用 支持嵌入式系统平台 binutils 是一组开发工具包 包括连接器 汇编器和其他用于目标文件和档案的工具 其中包括 addr2line ar as ld nm objdump ranlib readelf 调试器 gdb 是一款功能非常强大的调试器 既支持多种硬件平台 也支持多种编程语言 目前gdb支持的调试语言有C C Java Fortran Modula 2等多种语言 不仅用于本地调试 还可以用于远程调试 非常适合嵌入式系统开发使用 5 gdb调试 使用gdb可以完成下面这些任务 运行程序 可以给程序加上所需的任何调试条件 在给定的条件下让程序停止 检查程序停止时的运行状态 通过改变一些数据 可以更快地改正程序的错误 6 远程调试 以调试器和被调试程序是否在同一台机器区分本地调试远程调试嵌入式系统大多使用远程调试方式远程调试解决方案 插桩方案需要在目标操作系统和宿主机调试器内分别添加一些功能模块 然后二者互通信息调试 这种方案称为插桩 stub 远程调试原理 远程调试原理 运行在目标板上的被调试程序 一经初始化 在入口点会调用设置断点的函数 主动触发异常然后由异常处理程序控制 异常处理程序将会调用调试端口通信模块 监听宿主机调试器发送的调试信息 双方通信一旦建立 就可以根据远程调试协议进行调试 远程调试方法 使用ROMMonitor调试目标机目标板程序使用kgdb调试系统内核使用gdbserver调试用户空间应用程序 gdb远程调试功能 由宿主机gdb和目标板调试stub共同构成 两者通过串口或TCP连接 采用gdb远程串行协议 RemoteSerialProtocol RSP 连接 RSP定义了宿主机gdb和被调试的目标板程序进行通信时数据包的格式 它是一种基于消息的ASCII码协议 包含了内存读写 寄存器查询 程序运行等命令 gdbserver远程调试 7 内核调试 Linux内核的规模之庞大 单靠阅读代码查找BUG已经非常困难 而Linux内核的开发人员出于保证内核代码正确性的考虑 不愿意在Linux内核源代码中添加调试器 所以对Linux内核进行调试一直是项艰苦的工作 内核调试技术内核打印函数printk内核源代码调试kgdb 内核打印函数 printk函数具有良好的健壮性 不受内核运行条件的限制 在系统运行的任何阶段都可以使用 和C标准库中的printf函数不同的是 printk函数可以指定一个日志级别 内核根据这个级别来判断是否在终端上打印消息 在头文件中定义了可用的日志级别 kgdb内核调试 k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行新员工试题及答案
- 银行校招笔试题库及答案
- 摄影专业高考试题及答案
- 建材专业试题及答案
- 无机材料专业试题及答案
- 大专烹饪专业试题及答案
- 广东省2025-2026学年高三上学期9月月考化学试题(含答案)
- 机械安全专业试题及答案
- 病理专业试题及答案
- 门头承重加固施工方案
- 2025-2030中国术中神经生理监测行业市场发展趋势与前景展望战略研究报告
- 《YS-T621-2021百叶窗用铝合金带、箔材》
- 2025年国资委企业面试题及答案
- 亚朵酒店前台培训
- QC七大手法培训
- 企业财务分析实践指南
- 体格检查(心肺)
- 215kWh工商业液冷储能电池一体柜用户手册
- 装卸工安全培训课件
- 《孤独的小螃蟹》课件
- 低碳产品评价技术规范 光伏组件-编制说明
评论
0/150
提交评论