ARM教材第7章 嵌入式系统调试.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM教材第7章 嵌入式系统调试

嵌入式系统的调试 陈文智 wzchen@cad.zju.edu.cn 浙江大学计算机学院 2005年4月 提纲 1. 远程调试环境的搭建原理 2. 使用GDB 3. Linux内核调试 4. 实验 实验一:利用GDB进行本地调试 实验二:利用GDB进行远程调试 实验三:arm-linux内核调试 1. 远程调试环境的搭建原理 通用的桌面操作系统与嵌入式操作系统在调试环境上存在明显的差别 远程调试,调试器运行于通用桌面操作系统的应用程序,被调试的程序则运行于基于特定硬件平台的嵌入式操作系统(目标操作系统) 远程调试带来以下问题: 调试器与被调试程序如何通信 被调试程序产生异常如何及时通知调试器 调试器如何控制、访问被调试程序 调试器如何识别有关被调试程序的多任务信息并控制某一特定任务 调试器如何处理某些与目标硬件平台相关的信息 1.1 插桩(stub) Stub方案是在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试 这一方案需要目标操作系统提供支持远程调试协议的通信模块和多任务调试接口,并改写异常处理的有关部分 目标操作系统还需要定义一个设置断点的函数 远程调试示意图 : 1.2 GDB介绍 GDB是GNU C自带的调试工具,使用GDB可以完成下面这些任务: 运行程序,可以给程序加上所需的调试任何条件 在给定的条件下让程序停止 检查程序停止时的运行状态 通过改变一些数据,可以更快地改正程序的错误 1.3 GDB远程调试功能介绍 如果需要调试的程序和GDB所运行的环境不同,或者说需要调试的环境上根本无法运行起GDB,就需要使用远程调试功能 指定需要调试的远程机器的方法是使用target remote命令 在远程机器上,需要实现一个stub文件,在这个文件里面提供串口连接的协议,和传送数据信息的方法 GDB远程调试环境原理图: 2. 使用GDB 2.1 GDB命令 补齐功能 键入gdb gdb_test命令来启动GDB并载入程序 gdb_test,命令行进入了GDB模式。 GDB中的常用命令如下: 2.2 断点与条件断点 GDB中的断点有四种状态: 有效(Enabled) 禁止(Disabled) 一次有效(Enabled once) 有效后删除(Enabled for deletion) 条件断点的设置语句: 3. Linux内核调试 需要在Linux内核里面做一些修改,并且提供一个stub文件 把stub,串口驱动程序和Linux内核编译连接在一起 利用这个核心启动的系统,在需要进行调试的时候,激活程序的断点,等待本地主机的连接 然后,就可以进行内核的调试了 3.1 内核调试技术 调试内核代码的时候,则可以用 printk()显示监视信息 printk()可以指定一个记录级别,在头文件 linux/kernel.h 中定义了 8 种可用的日志级别字符串 : KERN_EMERG 用于紧急事件消息,它们一般是系统崩溃之前提示的消息。 KERN_ALERT 用于需要立即采取动作的情况。 KERN_CRIT 临界状态,通常涉及严重的硬件或软件操作失败。 KERN_ERR 用于报告错误状态;设备驱动多用此级来报告来自硬件的问题。 KERN_WARNING 警告可能出现问题,这类情况通常不会对系统造成严重问题。 KERN_NOTICE 正常情形的提示。许多与安全相关的状况用这个级别进行汇报。 KERN_INFO 提示性信息。很多设备驱动启动时,用此级别打印相应的硬件信息。 KERN_DEBUG 用于调试信息。 3.1 内核调试技术(1) 在标准的Linux系统上,用户空间的守护进程klogd从记录缓冲区中获取内核消息 ,通过syslogd守护进程将他们保存在系统日志文件中 根据日志级别,内核可能会把消息打印到当前控制台上 内核在遇到运行错误时,会显示发生错误时处理器的状态 3.1 内核调试技术(2) 大部分错误都是由于 NULL指针的使用或其他不正确的指针值的使用,这些错误通常会导致一个 oops 消息 oops消息给开发者许多信息,但是往往这些原始信息都是一些十六进制的内存地址,有两个工具可用来将其解析为符号: klogd ksymoops 3.2 KGDB分析 KGDB适用于两种情况下的调试: 开发者需要调试内核 开发者需要调试驱动模块 使用KGDB进行内核调试的步骤如下: 下载当前使用内核的kgdb patch 在PC主机端安装patch 运行make menuconfig命令,确保kgdb选项中的KERNEL_HACKING被选上 重新编译内核。 把新生成的内核镜像zImage拷贝到开

文档评论(0)

bokegood + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档