第9章开发环境和调试技术(初稿)_第1页
第9章开发环境和调试技术(初稿)_第2页
第9章开发环境和调试技术(初稿)_第3页
第9章开发环境和调试技术(初稿)_第4页
第9章开发环境和调试技术(初稿)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、1、交叉开发环境模式概述2、宿主机环境3、目标板环境4、交叉编译工具链5、gdb调试器6、远程调试7、内核调试8、网络调试1、交叉开发环境模式概述什么是嵌入式系统 “以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。”硬件上的局限性 存储空间小 处理器频率低 缺少存储、输入输出设备宿主机目标板交叉开发模式组成部分 宿主机:平时使用的桌面计算机 目标板:嵌入式开发板介绍 利用宿主机上已有的成熟的开发工具,专门针对目标板定制一套系统,包括引导程序、内核和文件系统,然后下载到目标板上运行。宿主机目标板交叉开发模式开发过程 在宿主机

2、上编写代码,并通过交叉编译工具编译出能够在目标板上运行的程序,然后下载到目标板上测试执行,最后利用宿主机上的调试工具对目标板上运行的程序进行远程调试。特点 使用和桌面开发一样的工具,降低学习成本。 充分利用宿主机的开发环境。宿主机目标板连接方式串口 利用串口给目标板发送命令,同时也可以接受目标板返回的信息并显示。 宿主机可以通过串口往目标板传送文件; 目标板可以把程序运行的结果返回并显示。 串口驱动程序的实现相对比较简单,缺点是传输速度慢,并不适用于传输大量数据的场合。以太网 以太网是当今局域网采用的最通用的通信协议标准。 它使用简单,配置灵活,支持广泛,传输速率快,安全可靠,缺点是网络驱动的

3、实现比较复杂。宿主机目标板连接方式USB USB是Universal Serial Bus通用串行总线)的缩写,现已成为PC的标准,基于USB标准的设备被广泛使用。 一种快速、灵活的总线接口,与其它通信接口相比,USB接口的特点是易于使用。 支持热插拔,无需用户自己配置,系统会自动搜索驱动并安装。 USB是典型的主从结构,两端分别需要不同的驱动程序。JTAG JTAG是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试。 在嵌入式系统领域,几乎所有的处理器都支持JTAG,调试器的单步调试和断点都需要和JTAG交涉。 可以使用JTAG将程序烧写到目标板上。2、宿主机环境串口终端BO

4、OTP协议TFTP协议交叉编译Make工具串口的用途 作为终端执行命令,管理嵌入式系统。 使用zmodem协议等传送小文件。串口终端 超级终端 (Windows XP) Minicom (Linux)BOOTP协议协议什么是BOOTP协议 引导协议(Bootstrap Protocol,BOOTP)是一种基于TCP/IP的协议,它最初在RFC951中定义,如今在通用计算机上广泛使用的DHCP协议就是从BOOTP协议扩展而来。BOOTP协议使用TCP/IP网络协议中的UDP 67/68两个通讯端口。BOOTP协议用途 用于无盘客户机从服务器得到自己的IP地址、服务器的IP地址、启动映象文件名、网

5、关信息等等第一步,在主机平台运行BOOTP服务的情况下,目标板由Boot Loader启动BOOTP,此时目标板还没有IP地址,它就用广播形式以IP地址向网络中发出IP地址查询的请求,这个请求帧中包含了客户机的网卡MAC地址。第二步,主机平台上的BOOTP服务器接收到的这个请求帧,根据这帧中的MAC地址在Bootptab启动数据库中查找这个MAC的记录,如果没有此MAC的记录则不响应这个请求;如果有就将FOUND帧发送回目标板。FOUND帧中包含的主要信息有目标板的IP地址、服务器的IP地址、硬件类型、网关IP地址、目标板MAC地址和启动映象文件名。第三步,目标板就根据FOUND

6、帧中的信息通过TFTP服务器下载启动映象文件。TFTP协议协议什么是BOOTP协议 TFTP的全称是Trivial File Transfer Protocol,即“简单文件传输协议”,它是TCP/IP协议族中的一个在客户端和服务端之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP特点 不提供用户名和口令 TFTP 协议传输由客户端发起交叉编译交叉编译背景 目标文件在不同架构间由于采用的CPU指令集不同等原因不能通用。定义 交叉编译就是在一个架构的机器下编译另一个架构的目标文件。 需要安装交叉编译工具链make工具工具GNU make是一种常用的编译工具,通过它,开发人员

7、可以很方便地管理软件编译的内容、方式和时机,从而能够把主要精力集中在代码的编写上。make会自动根据文件修改时间来判断源文件中哪些部分有更新,通过解释Makefile文件内的规则并执行相应的命令,重新编译链接这些更新过的文件。make工作过程工作过程编写Makefile Makefile由一系列规则组成,每条规则说明要生成哪些目标文件、生成目标文件所依赖的其它文件以及生成目标文件所需要的命令。编译过程 通过查看时间戳来确认依赖文件是否比目标文件更新,如果是则重新执行这条规则的命令,并进一步地执行依赖这些中间目标文件的规则,层层推进,最后生成新的结果文件。所有的依赖文件都没有被编译过,则对每个源

8、文件进行编译并进行链接,生成最后的可执行程序 。源文件在上次编译之后被修改过,则在本次执行make的时候将会被重新编译。头文件在上次编译之后被修改过,则所有包含此头文件的源文件在本次执行make的时候将将会被重新编译。# Makefile Example for Mathmath : main.o display.o plus.o minus.o multi.o divide.o mod.o gcc -o math main.o display.o plus.o minus.o multi.o divide.o mod.omain.o : main.c defs.h display.h gcc

9、 -c main.c display.o : display.c defs.h display.h gcc -c display.c plus.o : plus.c defs.h gcc -c plus.cminus.o: minus.c defs.h gcc -c minus.cmulti.o: multi.c defs.h gcc -c multi.cdivide.o: divide.c defs.h gcc -c divide.cmod.o: mod.c defs.h gcc -c mod.c .PHONY: cleanclean : -rm main.o display.o plus.

10、o minus.o multi.o divide.o mod.oTARGET : PREREQUISITESCOMMAND # command前面使用tab缩进说明:TARGET:规则的目标。通常是最后所要生成的可执行文件名或者为了生成这个目标而必需的中间过程的目标文件名。PREREQUISITES:规则的依赖。生成规则目标所需要的文件列表,通常一个目标依赖于一个或多个文件。COMMAND:规则执行的命令。生成规则目标所需要执行的命令,可以是shell下面的任何命令组合。3、目标目标板环境板环境JTAG接口Boot LoaderJTAG接口接口简介简介作为硬件测试手段,JTAG的功能与CPU状

11、态无关,可驱动设备的所有外部引脚并读入数据,而且在设备内部夺取外部的连接点(与通往外部的各个pin脚一一连接)。各个cell为了形成 Serial Shift Register而相连。整体的接口由5个pin脚来控制(TDI,TMS,TCK,nTRST,TDO)。其功能包括:测试线路连线和端子的连接状态;测试设备间的连接状态;进行Flash memory 烧写等Boot Loader简介简介Boot Loader是系统加电后运行的第一段代码。完成初始化硬件设备、创建内核需要的信息等工作,最后调用操作系统内核。对硬件的依赖非常强,不同的体系结构、不同的嵌入式板级设备配置都会对Boot Loader

12、有不同的需求。4、交叉编译交叉编译工具工具链链交叉编译工具链是一个由编译器、链接器和解释器组成的集成开发环境。和本地编译类似,交叉编译的过程也是由编译、链接等阶段组成,源程序通过交叉编译器编译成目标模块,并由交叉链接器加载库最后链接成可在目标平台上执行的程序代码。交叉编译交叉编译的的构建构建从头编译 编译难度大,不适合初学者。脚本编译 需要选择合适的脚本工具,例如crosstool下载使用 下载指定平台编译好的二进制包。相关工具相关工具交叉编译工具链主要包括: 标准库:glibc 编译器:gcc 链接器:ld 汇编器:as 调试器:gdbglibc最初是自由软件基金会为其GNU操作系统所写,但

13、目前最主要的应用是配合Linux内核,成为GNU/Linux操作系统一个重要的组成部分。是Linux系统中最底层的API,几乎其它任何运行库都会直接或间接地依赖于glibc。除了封装系统调用之外,还提供一些基本的功能,例如open、malloc、printf、exit等等。 gcc支持不同的编程语言,它被目前许多Unix/Linux系统作为默认的标准编译器。支持多种处理器架构上,并且在商业、专利和开源软件开发环境中广泛使用。支持嵌入式系统平台。binutils是一组开发工具包,包括连接器、汇编器和其他用于目标文件和档案的工具。其中包括:addr2line、ar 、as、ld、nm、objdum

14、p 、ranlib、readelf是一款功能非常强大的调试器,既支持多种硬件平台,也支持多种编程语言,目前gdb支持的调试语言有C/C+、Java、Fortran、Modula-2等多种语言。不仅用于本地调试,还可以用于远程调试,非常适合嵌入式系统开发使用。使用gdb可以完成下面这些任务: 运行程序,可以给程序加上所需的任何调试条件; 在给定的条件下让程序停止; 检查程序停止时的运行状态; 通过改变一些数据,可以更快地改正程序的错误。6、远程调试远程调试以调试器和被调试程序是否在同一台机器区分 本地调试 远程调试嵌入式系统大多使用远程调试方式远程调试解决方案插桩方案 需要在目标操作系统和宿主机

15、调试器内分别添加一些功能模块,然后二者互通信息调试,这种方案称为插桩(stub) 运行在目标板上的被调试程序,一经初始化,在入口点会调用设置断点的函数,主动触发异常然后由异常处理程序控制,异常处理程序将会调用调试端口通信模块,监听宿主机调试器发送的调试信息。双方通信一旦建立,就可以根据远程调试协议进行调试。使用ROM Monitor调试目标机目标板程序使用kgdb调试系统内核使用gdbserver调试用户空间应用程序gdb远程调试远程调试功能功能由宿主机gdb和目标板调试stub共同构成。两者通过串口或TCP连接,采用gdb远程串行协议(Remote Serial Protocol, RSP)

16、连接。RSP定义了宿主机gdb和被调试的目标板程序进行通信时数据包的格式。它是一种基于消息的ASCII码协议,包含了内存读写、寄存器查询、程序运行等命令。gdbserver远程调试远程调试7、内核调试内核调试Linux内核的规模之庞大,单靠阅读代码查找BUG已经非常困难。而Linux内核的开发人员出于保证内核代码正确性的考虑,不愿意在Linux内核源代码中添加调试器。所以对Linux内核进行调试一直是项艰苦的工作。内核调试技术 内核打印函数 printk 内核源代码调试kgdbprintk函数具有良好的健壮性,不受内核运行条件的限制,在系统运行的任何阶段都可以使用。和C标准库中的printf函数不同的是,printk函数可以指定一个日志级别。内核根据这个级别来判断是否在终端上打印消息。在头文件中定义了可用的日志级别kgdb内核调试k

温馨提示

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

评论

0/150

提交评论