




已阅读5页,还剩47页未读, 继续免费阅读
(计算机应用技术专业论文)虚拟机调试子系统设计和实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江犬学嵌入式系统研究中心虚拟机调试子系统设计和实现 摘要 在嵌入式系统的研究开发过程中,调试技术具有至关重要的意义。调试手段的好坏直接 影响系统开发的效率与软件的质量。目前,存在着基于硬件、软件和虚拟机技术的三大类调 试技术及手段。它们各有其优缺点和适用的场景。在嵌入式软件的调试过程中,往往存在着 各种调试手段相辅相成以确保软件质量的情况。基于虚拟机的调试解决方案以其独特的易用 性、方便性等优良特性正逐渐吸引人们的目光。国内外有很多基于虚拟机的调试解挟方案, 它们存在虚拟性能低导致调试效率低下、缺乏对系统程序管理的内部数据结构的理解等问 题。 为此,在分析了各种调试技术优缺点的基础上,扬长避短,设计实现了一种应用于嵌入 式系统开发中的基于虚拟机的调试系统。不同于其它的远程调试系统,它以具有优异虚拟性 能的w u k o n g 虚拟机为依托,引入先进丰富的调试机制,增加调试方案的适用场合,改善程 序的调试执行效率。它使用统一的调试命令接口,可灵活扩展支持多种调试通信协议,从而 支持使用不同协议的调试器。它支持调试运行在虚拟机上的系统程序,也支持通过用户进程 感知模块来支持调试运行在系统程序中的用户进程。同时,在虚拟机端加入虚拟的硬件调试 单元来扩充调试的适用场合,比如对有特殊需求的实时软件的调试支持。在调试机制的内部 实现中,复用了一些算法来支持常规调试命令的高效执行。在调试系统的设计实现论述中, 还设计实现了远程交叉调试所必需的调试通信协议,设计实现了具有基本调试功能的远程交 叉调试器来调试运行在虚拟机中的程序,验证了调试通信协议的有效性,虚拟机端调试机制 的正确性。虚拟机端调试模块与调试器问采用d c p 调试通信协议进行通信。 基于虚拟机的调试子系统的设计完成,不是作为现有调试手段及技术的替代,而是作为 一种补充。它们共同配合来确保嵌入式软件产品的质量,开发的效率。它是国内虚拟仿真环 境界第一个拥有完全自主知识产权的开源产品w u k o n g 虚拟机的一个重要子系统,它同样开 源。它的出现,期待着能改变嵌入式仿真开发领域的市场占有格局。 关键词:调试器,虚拟机,调试机制,嵌入式系统,开放源代码,调试通信协议 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 a b s t r a c t i nt h i sp a p e rc u i t e n td e b u g g i n g 础o l o g i e sa r ea r l & l y z e d a c c o r d i n gt ot h ed i s a d v a n t a g e so f t h e s et e c h n o l o g i e s ,w ep u tf o r w a r dan o v e lv i r t u a lm a c h i n eb a s e dd e b u g g i n gs y s t e m v i aau n i f i e d d e b u gf u n c t i o n a li n t e r f a c e ,d i f f e r e n tp r o t o c o le n c a p s u l a t e di nam o d u l ec a r lb ee a s i l yi n t e g r a t e d i n t ot h es y s t e mt oe x c h a n g eu s e f u li n f o r m a t i o nb e t w e e nd i v e r s ed e b u g g e r sa n dt h ev i r t u a lm a c h i n e i nt h ev i r t u a lm a c h i n e s o m es p e c i a lv n 1 a ld e b u gh a r d w a r ea r ed e s i g n e dt os u p p o r td e b u g g i n go f d i f f e r e n tr e q u i r e m e n tb a s e dp r o g r a ma n dm a i n t a i nt h eh i g he f f i c i e n c yo ft h ee x e c u t i o no ft h e d e b u gc o m m a n d f u r t h e r m o r e ,a l la p p l i c a t i o n a p p e r e e i v i n gm o d u l ei s i n t r o d u c e dt os u p p o r td e b u g o fb o t ht h ek e r n e lr o n r f i n go nm a c h i n ed i r e c t l ya n dt h ea p p l i c a t i o nw h i c hr d no nm a c h i n e i n d i r e c t l y m o r e o v e r , w ea l s od e s i 髓ad e b u g g i n gp r o t o c o la n di m p l e m e n tar e m o t ed e b u g g e r w h i c hi su s e dt od e b u gt h ep r o g r a mr u n n i n gi nt h ev i r t u a lm a c h i n e t h i sd e b u g g e rv e r i f i e s0 1 1 1 d e s i g no f t h ed e b u g g i n gp r o t o c o la n dt h ed e b u g g i n gm e c h a n i s m i tc o m m u n i c a t e sw i t ht h ev i r t u a l m a c h i n ev i ad e b u g g i n gc o m m u n i c a t i o np r o t o c 0 1 k e yw o r d s :d e b u g g e r , v i r t u a lm a c h i n e ,d e b u g g i n gm e c h a n i s m ,d e b u g g i n gp r o t o c o l , e m b e d d e ds y s t e m ,o p e n $ o t l l e , e 2 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 图录 图2 - 1 嵌入式开发流程6 图2 - 2 宿主机目标机模式图6 图2 3 远程调试结构8 圈3 - 1c r a s ha n db u m ,1 0 图3 - 2r o mm o n i t o r 开发过程11 图5 - 1 调试器指令执行顺序2 3 图5 - 2 调试系统结构2 4 图5 - 3 虚拟机调试结构图2 7 图5 - 4 核心接口2 7 图5 - 5 调试协议模块2 8 图5 6t h r e a d o b s e r v e r 接口2 8 图5 7 调试命令包处理流程2 9 图5 - 8 状态转变图3 4 图5 - 9 机器运行流程3 4 图5 一1 0 调试器结构3 6 图5 - 11 符号管理数据结构_ 3 7 图s 一1 2 编译单元结构图。 图5 - 1 3 符号解析实现 1 1 1 浙江大学墩入式系统研究中心虚拟机调试子系统设计和实现 1 1 研究背景 第1 章绪论 计算机技术发展过程中,计算机的仿真或虚拟一直是一个很重要的分支。虚拟和仿真技 术正逐渐运用到芯片设计的逻辑验证,程序的模拟调试等领域。与传统方法相比,计算机虚 拟最大的好处是,它不需要开发者提供真实的硬件环境。就可以进行完整的试验;而且能提 供被虚拟的目标机所有运行状态以及内部的数据和信息;而且在无硬件支持的条件下可以预 测程序运行变化过程和最终结果,并且可以重现运行过程及结果。使得开发者对过程变化规 律有深入的了解。 计算机技术日新月异的今天,嵌入式系统的应用越来越广泛,因而对嵌入式系统软件及 硬件都提出了更高的要求。由于嵌入式开发应用在不同的领域,硬件体系差别很大。不仅存 在很多嵌入式系统的处理器,嵌入式系统地外设种类也非常多。而针对嵌入式系统的开发由 于自身硬件资源的有限,因此对软件大小也就提出更高的要求。随着硬件技术的发展,人们 需求的增加,对嵌入式软件的功能,规模,质量都提出了很高的要求。而且,在嵌入式系统 的研发过程中,经常会出现软硬件的不同步问题导致系统产品上市周期的增加。此时,就需 要仿真环境来确保软硬件的同步开发。 然而,光有仿真环境还不够。还需要拥有完善的嵌入式软件开发环境及调试测试平台。 嵌入式软件因为一般运行在异构的系统上,所以其开发一般是交叉编译和交叉链接,如 w i n d r i v e r t o r n a d o 和g n u 工具链等,编写好的嵌入式软件经过交叉编译和交叉链接后通常 会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件。嵌入式软 件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式 软件开发过程中的交叉调试与通用软件开发过程中的调试方式有所差别。在通用软件开发 中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程, 它通过操作系统提供的调试接口来控制被调试的进程。而在嵌入式软件开发中,调试时采用 的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之 上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进 程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前 状态,并能够改变被调试进程的运行状态。 目前,嵌入式系统开发中常用的调试手段有基于硬件,基于软件和基于虚拟机的调试系 统三种,它们都各有其优缺点 1 1 1 2 】。比如,基于硬件的调试技术通常需要硬件的支持,其 开发成本相对较高,但调试功能也相对强大,调试效率较高。一般而言,它缺乏对系统中由 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 操作系统管理的用户进程的调试。而基于软件的调试技术中,则可能需要对目标程序进行侵 入,调试效率较低,而且它一般要求系统提供调试支持接口,但其移植性和扩展性较好。基 于虚拟机的调试系统中,一般情况下,它因为虚拟了相关的硬件设备,它的调试特性类似于 基于硬件的调试手段。然而因为虚拟的关系,它的性能较低,故要求宿主机有较高的配置。 跟硬件调试手段一样,它也缺乏内核管理的信息的感知。尽管如此,在国内,虽然有些公司 拥有一些自己开发仿真软件和调试软件,一般而言,其功能和性能相对不完善。因此还是缺 乏拥有自主知识产权的仿真和调试环境的研究与相应成果。 本文描述了我们研究开发的w u k o n g 虚拟机和远程交叉调试器。描述w u k o n g 针对远程 调试的支持设计和实现,远程交叉调试器的设计和实现。 1 2 研究内容 本文研究的重点内容是在虚拟机中对调试的支持,对虚拟机中运行的系统程序如操作系 统和应用程序的控制支持,还有交叉调试器的设计实现研究。基于此,本文简述了嵌入式系 统软件的开发过程,介绍了嵌入式开发的相关概念及调试相关概念。充分研究了现行调试技 术的优缺点。取长补短,小心地设计了虚拟机内的调试机制,断点机制以保证调试的效率。 还设计了针对嵌入式系统开发的特定情况下的断点支持,如基于时间的实时程序的调试,它 要求程序不能采用传统的干扰式调试方法而是要求在尽可能不干扰程序运行的基础上进行 调试等。 远程调试一般要求宿主机与目标机间进行通信为此,本文研究了现行调试通信协议, 并在g d b 调试通信协议( r s p ) 的基础上扩展了该协议。它能兼容基于r s p 协议的调试器 如g d b ,d d d ,i n s i g h t 等。也能支持本文自主开发的调试器。利用调试协议中扩展的功能, 能轻易实现其它调试系统中所欠缺的功能,如多目标的调试支持等。 1 3 本文组织结构 本文首先介绍了项目的研究背景,然后介绍了嵌入式开发的基本情况,并对相关的调试 技术及概念术语做了分析介绍。最后,介绍了w u k o n g 中调试系统的设计实现并作了相关总 结。具体章节内容安排如下: 第一章为项目相关背景,研究内容的介绍。 第二章描述了嵌入式系统软件开发的概况,并介绍了软件开发环境。 第三章首先介绍了在调试领域里常见的一些概念术语,然后全面介绍了相关的软硬件调 试技术,分析比较了它们各自的优缺点和使用范围。 第四章则设计了用于w u k o n g 中调试系统模块间通信的调试通信协议这是一种基于文 2 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 本的与r s p 兼容的通信协议,文中给出了具体的协议内容的分析说明,并给出了示例说明 该协议如何运作使用,并与r s p 间进行了比较。 第五章则详细介绍了w u k o n g 调试子系统中虚拟机端及远程交叉调试器的模块的设计 与实现。重点描述了系统结构和调试支持的实现原理并给出了相关模块中的关键数据结构及 接口的说明介绍;解释了为什么进行这样的设计等问题。 第六章则对如何使用本文所描述的调试子系统进行了说明。通过各种例子说明了在如何 调试运行在虚拟机中的系统程序和应用程序。 最后,对该文所作的系统进行总结,并就未来进行展望。 浙江大学嵌入式系统研究中心虚拟枫调试子系统设计和实现 第2 章嵌入式系统开发概况 2 1 嵌入式系统介绍 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对 功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统最典型的特 点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各类形形色色运用了嵌入式技 术的电子产品。小到m p 3 、p d a 等擞型数字化设备,大到信息家电、智能电器、车载g i s , 各种新型嵌入式设备在数量上已经远远超过了通用计算机 3 】。 嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目 标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要 特定嵌入式操作系统的支持。嵌入式应用软件和普通应用软件有定的区别,它不仅要求其 准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以 减少对系统资源的消耗,降低硬件成本 4 。 嵌入式系统是将先进的计算机技术、半导体技术以及电子技术与特定行业的具体应用相 结合的产物,因此必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统, 嵌入式系统的开发充满了竞争、机遇与创新,需要解决好如下一些关键问题【4 】:嵌入式系 统的应用领域中系统资源都相对有限,因此对内核及软件的要求相当高较之传统的系统及 软件来讲要小得多,对系统软件中采用的算法及其对资源占用的要求也相对较高:此外,嵌 入式系统中的处理器一般具有低功耗、体积小、集成度高等特点。因此在进行软硬件设计时 必须以效率优先为原则,而且还要充分考虑成本因素。除此之外,嵌入式软件还有实时性的 要瘩,其程序一般是固化在r o m 或f l a s h 中,而不是访问存储速度较慢的外部存储设备: 另外,嵌入式系统上一般运行专用的系统,它不同于通用操作系统。只需提供必要的服务即 可。因此系统应该尽可能精简。那么,在相应的资源及内核配置的时候就应该尽量裁减, 这不仅有利于降低系统的复杂性,也有利于控制成本;最后,嵌入式系统地开发一般是开发 者针对系统应用领域,选择处理器体系结构及外设,然后在相应的设备上进行二次开发。因 此,系统对程序的集成开发环境和调试测试环境有著较高的要求。这些环境的有效性,易用 性将极大得影响嵌入式系统产品的质量。 基于上述事实,在嵌入式系统开发过程中,不管是出于安全性的考虑可靠性的考虑, 性能上的考虑,完善的调试解决方案成为关键。传统的嵌入式开发调试可以通过i c e 的方 式完成,它通过取代目标板的微处理器,给目标程序提供一个完整的仿真执行环境,从而使 开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。当然,存 4 浙江大学嵌 式系统研究中心虚拟机调试子系统设计和实现 第2 章嵌入式系统开发概况 2 1 嵌入式系统介绍 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对 功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统最典型的特 点是与人们的日常生活紧密相关任何一个普通人都可能拥有各类形形色色运用了嵌入式技 术的电子产品,小到m p 3 、p d a 等微型数字化设备,大到信息家电、智能电器、车载g i s , 各种新型嵌入式设备在数量上已经远远超过了通用计算机 3 】。 嵌入式应用软件是针对特定应用领域,基于某固定的硬件平台,用来达到_ q j 户预期目 标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要 特定嵌入式操作系统的支持。嵌入式应用软件和普通应用软件有一定的区别,它不仅要求其 准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化以 减少对系统资源的消耗,降低硬件成本 4 】。 嵌入式系统是将先进的计算机技术、半导体技术砒及电子技术与特定行业的具体应用相 结台的产物因此必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统, 嵌入式系统的开发充满了竞争、机遇与创新,需要解决好如下一些关键问题 4 】:嵌入式系 统的应用领域中系统资源都相对有限,因此对内核及软件的要求相当高,较之传统的系统及 软件来讲要小得多,对系统软件中采用的算法及其对资源占用的要求也相对较高:此外,嵌 入式系统中的处理器一般具有低功耗、体积小、集成度高等特点。因此在进行软硬件设计时 必须以效率优先为原则而且还要充分考虑成本困素。除此之外,嵌入式软件还有实时性的 要蒜其程序一般是固化在r o m 或f l a s h 中,而不是访问存储速度较慢的外部存储设备; 另外嵌入式系统上一般运行专用的系统,它不同于通用操作系统。只需提供必要的服务即 可。因此,系统应该尽可能精简。那么,在相应的资源及内核配置的时候就应该尽量裁减, 这不仅有利于降低系统的复杂性,也有利于控制成本t 最后,睦入式系统地开发一般是开发 者针对系统应用领域,选择处理器体系结构及外设,然后在相应的设备上进行= 次开发。因 此,系统对程序的集成开发环境和调试测试环境有著较高的要求。这些环境的有效性,易用 性将极大得影响嵌入式系统产品的质量。 基于上述事实,在嵌入式系统开发过程中,不管是出于安垒性的考虑,可靠性的考虑, 性能上的考虑完善的调试解决方案成为关键。传统的嵌入式开发调试可以通过i c e 的方 式完成,它通过取代目标板的微处理器,给目标程序提供一个完整的仿真执行环境,从而使 开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。当然,存 开发者能够非常清楚地了解到程序在目标板上的工作状态便于监视和调试程序。当然,存 4 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 在很多其它的调试手段。如,假设系统使用嵌入式l i n u x 作为操作系统,一旦软硬件能够支 持正常的串口功能时,就可以不用i c e 而进行开发和调试工作,从而节省了一笔不小的开 发费用。嵌入式l i n u x 为开发者提供了一套完整的工具链,它利用g n u 的g c c 做编译器, 用g d b 、k g d b 、x g d b 做调试工具,能够很方便地实现从操作系统到应用软件各个级别 的i l i a 3 【4 】。 嵌入式系统一般都需要特定的硬件和软件,如果其硬件平台比较通用、固定,那就可以 大大减少由硬件引入错误的机会。此外,在嵌入式操作系统的屏蔽下,开发者通过操作系统 提供的系统调用接口和相关的库函数可以实现很多的开发工作,这样就可以简化开发过程, 提高系统的稳定性。因此,嵌入式软件的开发者可以将主要精力放在满足特定的需求和提供 给用户特定的功能上。当然,由于嵌入式系统的应用领域非常广泛,对应的硬件体系结构众 多,且升级换代也时常出现,外设种类也纷繁复杂。因此,在选型或开发新系统后,必然存 在裁减、开发和移植相应软件的过程。 通常,嵌入式系统是个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软 件比较困难,有时候甚至是不可能的。目前一般采用的解决办法是首先在通用计算机上编写 程序。然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再烧写到目标平 台的特定位置上运行,或者生成带调试信息的程序,在调试时由调试器提取相应的代码段下 载到目标机中。调试器使用调试信息对程序进行源码级调试等。 2 2 嵌入式开发相关概念 2 2 1 宿主机 宿主机是一台通用计算机( 如p c 机或者工作站) ,它通过串口或者以太网接口与目标 机通信a 宿主机的软硬件资源比较丰富,它不仅包括具有强大计算能力的处理器,较多地内 存资源,还包括功能强大的操作系统( 如w i n d o w s 和l i n i l 】【) ,各种各样优秀的嵌入式开发 工具( 如w i n d r i v e r 的t o r n a d o 、m i c r o s o r 的e m b e d d e dv i s u a lc + + 等) 。这些工具与资源能 够大大提高嵌入式应用软件的开发速度和效率 3 。 2 2 2 目标机 目标机一般在嵌入式应用软件开发期间使用,用来区别与嵌入式系统通信的宿主机,它 可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统,但目 标机的软硬件资源通常都比较有限,如具有有限计算能力的处理器,有限的内存,有限的 r o m 容量等。 浙江大学嵌入式系统研究中心虚拟桃调试子系统设计和实现 2 2 3 交叉开发环境 交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在 宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标 机间完成嵌入式软件的调试。 2 3 嵌入式系统开发过程 在嵌入式系统的开发中,一般应首先选择目标硬件平台,然后选择开发系统程序( 如操 作系统,或其它系统程序) ,进而开发系统上豹用户程序。无论哪种程序,都需要经过完善 的调试测试过程才能交付使用。整个系统的开发过程如图2 - 1 所示: c j 兰 图2 1 嵌入式开发流程 目前嵌入式软件开发一般采用宿主机目标机模式开发嵌入式应用软件。这样可以利用 宿主机上丰富的资源和良好的开发环境,利用仿真系统开发调试目标程序,然后通过串口或 者网络将交叉编译生成的目标代码下载到目标机上,并在监控程序或者操作系统的支持下利 用交叉调试器进行分析和调试,最后目标程序固化到目标机中而脱离宿主机环境单独运行 3 】。嵌入式开发的这种模式结构如图2 - 2 所示。 图2 - 2 宿主机,目标机模式圈 6 浙江大学嵌入式系统研究中心虚拟极调试子系统设计和实现 嵌入式软件开发中所使用的开发环境就是交叉开发环境,它与运行嵌入式应用软件的环 境有所不同。建立交叉开发环境是进行嵌入式软件开发的第一步。目前常用的交叉开发环境 主要有开放和商业两种类型。开放的交叉开发环境的典型代表是g n u 工具链、目前已经能 够支持x 8 6 、a r m 、m i p s 、p o w e r p c 等多种处理器。商业的交叉开发环境则主要有m e t r o w e r k s c o d e w m r l o r 、a r ms o f t w a r ed e v e l o p m e n tt o o l k i t 、s d sc r o s sc o m p i l e r 、w i n d r i v e rt o r n a d o 、 m i c r o s o re m b e d d e dv i s u a lc + + 等【4 】。 在完成嵌入式软件的编码之后,需要进行编译和链接以生成可执行代码,由于开发过程 大多是在基于i n t e l 公司x 8 6 系列c p u 的通用计算机上进行的,而目标环境的处理器芯片却 大多为a r m 、m i p s 、p o w e r p c 等系列的微处理器这就要求在建立好的交叉开发环境中进 行交叉编译和链接。交叉编译器和交叉链接器是能够在宿主机上运行,它们生成可以在目标 机上直接运行的二进制代码的编译器和链接器。通常,一种体系结构的嵌入式微处理器可能 会对应多种交叉编译器和交叉链接器。一般,在生成交叉开发环境工具时会要求开发者选择 要为何种体系结构构建这种环境。 由于嵌入式系统资源的有限性,因此在程序链接库的过程中要求使用较小的函数库,以 便最后产生蛉可执行代码尽可能地小。因此,在对系统进行裁减时,不仅包括硬件,操作系 统,还要包括一些经过特殊处理的函数开发库。如c 语言函数库,数学函数库等。因此, 一般而言,这些库都存在通用机版本和专门用于嵌入式的精简版本。目前嵌入式的集成开发 环境都支持交叉编译和交叉链接,如w i n d r i v e rt o m , d o 和g n u 工具链等,编写好的嵌入 式软件经过交叉编译和交叉链接后通常会生成两种类型的可执行文件:用于调试的可执行文 件和用于固化的可执行文件。 嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个 环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有所差别。在通 用软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行 着的进程。它通过操作系统提供的调试接口来控制被调试的进程。而在嵌入式软件开发中, 调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操 作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和 被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进 程的当前状态,并能够改变被调试进程的运行状态【3 【4 】。 交叉调试( c r o s sd e b u g ) 又常常被称为远程调试( r e m o t ed e b u g ) ,是一种允许调试器 以某种方式控制目标机上被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄 存器以及被调试进程中变量值等各种调试功能的调试方式。一般而言,远程调试过程的结构 如图2 - 3 远程调试结构所示。 7 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 。墨曼 图2 - 3 远程调试结构 嵌入式系统的交叉调试有多种方法,可以被细分成不同的层次,但一般都具有如下一些 典型特点:调试器和被调试进程运行在不同的机器上,调试器运行在p c 或者工作站上( 宿 主机) ,而被调试的进程则运行在各种专业调试板上( 目标机) ;调试器通过某种通信协议与 目标机建立联系,进而调试控制目标机上运行的进程。这些通信协议可以通过串口、并口、 以太网络进行传输。b d m 、j t a g 方式的调试则可能需要额外的调试转换板【1 】【7 】 9 1 ;此外, 在很多调试方案中,目标机上可能会具备某种形式的调试代理或桩程序,它负责与调试器共 同配合完成对目标机上运行着的进程的调试控制。这种调试代理可能是某些支持调试功能的 硬件设备( 如a n g e l ) ,也可能是某些专门的调试软件( 如g d b s e r v e r ) 1 1 8 。 此外,目标机可能是某种形式的系统仿真器或虚拟机,通过在宿主机上运行目标机的仿 真软件或虚拟机整个调试过程可以在一台计算机上完成。此时物理上虽然只有一台计算机, 但逻辑上仍然存在着宿主机和目标机的区别。 8 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 第3 章调试技术概述 在嵌入式软件开发过程中的调试方式有很多种,应根据实际的开发要求和条件进行选 择。就调试方法而言,嵌入式系统的交叉调试可以分为基于硬件的调试、基于软件的调试和 基于虚拟机的调试三种,前者使用仿真调试器协助调试过程,中者则使用软件调试器完成调 试过程,而后者则使用虚拟环境来的帮助来进行调试【1 】【8 】【9 】 1 2 】【1 5 】 1 6 】 1 9 】。 3 1 关于调试的基本概念 3 1 1断点& 观察点& 捕捉点 断点是程序代码中的一个地址,当程序运行至这个地址时,程序将停止运行。此时,依 据系统的不同,它可能会导致机器中断异常,并启动处理程序来接受来自调试器的命令。进 而进行程序执行的控制,程序运行环境的察看,修改等。它可以帮助开发者来定位程序错误 1 0 】。 观察点是一种特殊的断点,它区别子断点的地方在于,它不是一个可中断的指令代码地 址。而是一个内存地址,当指定地址的内存被访问时会引起中断异常。中断异常的处理类似 于断点【1 0 。 捕捉点则依赖于具体的操作系统或程序。它可以在系统程序运行出现异常的情况下捕获 系统异常,并停止程序运行,然后执行相应的调控措施 1 0 】。 3 1 2 单步模式 在一些体系结构的c p u 中,存在着某种特殊的调试位,当该位被置位时,c p u 处于一 种每执行一条指令就会停止执行,并产生异常中断的状态,这种状态就为单步模式 1 0 】。 3 1 3 单步执行 当程序处于被调试模式,且碰到断点停止执行时,单步执行导致程序向前执行一条指令 后停止;并等待调试器的进一步命令。它分为两种:机器码单步执行和源代码级单步执行。 前者使程序向前执行一条机器指令,后者则向前执行到下一行源代码所对应的机器指令处, 一行源代码可以由一条或很多条机器指令构成,因此源码级单步更加复杂,它需要确定源码 与机器码的对应关系。 9 街江大学嵌入式系统研究中心寝拟机调试子系统设计耜实现 3 1 4 继续执行 当程序处于被调试模式,且碰到断点停止执行时,继续执行导致程序执行到下一个断点 处才停止,然后等待调试器的进一步命令。 3 1 5 栈帧 栈帧也叫过程活动记录,是编译器用来实现过程,函数调用的一种数据结构。从逻辑上 讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回地址等。 它是i 对l 映射到某个过程调用的。 3 2 硬件调试技术 相对于软件调试而言,使用硬件调试器可以获得更强大的调试功能和更优秀的调试性 能a 硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时了解到 系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是r o mm o n i t o r 、r o m e m u l a t o r 、i n - c i r c u i te m u l a t o r 和i n - c i r c u i td e b u g g e r 1 3 8 9 1 5 。 3 2 1c r a s ha n db u r n 最初的调试方式被称为“c r a s ha n db u r n ”,因为这是一种没有调试的调试,实际上它只 是将程序编译后烧写到目标机上,通过观察运行结果来确定是否工作正常,若有错则寻找错 误。利用该方式开发嵌入式应用程序的过程如图3 - l 所示: 图3 1c r a s ha n db u r n 由于系统不提供任何目标程序运行环境的监测和控制功能,因此这种调试方式对于开发 人员来说非常辛苦并且开发效率很低。通常,它只能通过在原始代码中插入显示程序内部变 量及机器环境变量的代码来查找程序问题的根源。即便这样,也需要目标系统有监控器或 1 0 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 l c d ,否则就只能根据l e d 灯或者示波器等辅助设备进行调试。这种调试的难度可想而知。 3 2 2r o mm o n i t o r r o mm o n i t o r 实质上是一段在r o m 中的监视控制程序或是专门的硬件调试设备。它负 责监控目标机上被调试程序的运行情况,能够与宿主机端的调试器一同完成对目标机中运行 程序的调试。这种方式的调试由于有了远程调试器的帮助,可以借助调试器的符号处理功能 完成调试信息的解析,并利用r o mm o n i t o r 提供的基本调试控制功能,可以实现对目标程 序运行状况有较为精确的监视控制,可以以一种较为直观的源代码级的方式对程序进行调试 控制。 采用r o mm o n i t o r 方式进行交叉调试般需要在宿主机上运行调试器,在目标机上运 行r o mm o n i t o r 和被调试程序,宿主机通过调试器与目标机上的r o m 监视器建立通信连 接,它们之间的通信遵循远程调试协议。在使用这种调试方式时,r o mm o n i t o r 预先被固 化到目标机,在目标机启动后r o mm o n i t o r 程序首先获取对系统的控制权,并对目标机进 行一些必要的初始化,如通信串口等。然后初始化自己的程序空间,并等待来自宿主机端调 试器的命令。被调试程序通过r o m 监视器下载到目标机,并在其监控下完成调试。目前使 用的绝大部分r o m 监视器能够完成设置断点、单步执行、查看寄存器、修改内存空间等各 项调试功能。一些高级的r o mm o n i t o r 还能完成代码分析,系统分析,r o m 空间的写操作, 以及设置各种非常复杂的断点等功能。利用r o mm o n i t o r 方式作为调试手段时,开发应用 程序的步骤如图3 2 所示: 冒3 - 2r o mm o n i t o r 开发过程 这种方式明显提高了调试程序的效率减小了调试难度,缩短了产品开发周期,有效降 低了开发成本。它的最大好处就是简单、方便。还可以在调试器端扩展支持许多高级调试功 能,可扩展陛较强,成本低廉,基本上不需要专门的调试硬件支持。但是r o mm o n i t o r 同 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 时也具有较多的缺点,比如: i r o mm o n i t o r 程序本身开发难度较大,一般采用“c r a s ha n db u m ”的方式。 2 r o m m o n i t o r 获取控制权后,应用程序不响应外部中断,因此不便调试实时程序。 3 需要占用目标机资源如r o m ,c p u ,r a m 及通信设备等资源。 4 ,需要其它调试硬件支持( 如硬件断点) 才能调试r o m 中的程序及设置观察点。 5 在调试时r o mm o n i t o r 已经为应用程序建立了运行环境,因此在一定程度上造成应 用程序的最终运行环境和调试环境的差异,如程序初始化部分的代码、内存空间分 配等都与最终运行环境不同。 虽然r o mm o n i t o r 有如此之多的缺点,它仍然是一种应用相当广泛的调试方式,几乎 所有的交叉调试器都采用。 3 2 3r o me m u l a t o r r o me m u l a t o r 实质是仿真了目标机上的r o m 芯片。它通常被插入到目标机上的r o m 插槽中。使用这种调试方式时,被调试程序首先下载到r o me m u l a t o r 中,它等效于下载到 目标机的r o m 芯片上,然后在r o m 仿真器中完成对目标程序的调试。当发现被调试程序 运行不正常时,可以将修改错误后的程序重新下载到r o me m u l a t o r 中,这避免了每次修改 程序后都必须重新烧写到目标机r o m 中这一费时费力的操作。通常,r o me m u l a t o r 的开 发成本较高,且功能相对来讲比较单一,因此只适应于某些特定场合。r o me m u l a t o r 一般 和r o mm o n i t o r 的调试方式相结合使用。 这种调试方式的最大优点就是目标机可以没有r o m 芯片,它使用r o me m u l a t o r 提供 的r o m 空间,并不需要特别的工具来烧写r o m 。其缺点在于:开发成本较高,功能单一: 目标机必须能支持外部r o m 存储空间,并且通常要和r o mm o n i t o r 配合使用,因此它拥 有r o mm o n i t o r 的所有缺点。现在大多数目标板都提供r o m 芯片并且支持在板上直接对 r o m 空间进行快速的写操作,所以这种r o me m u l a t o r 属于被淘汰的调试方式。 3 2 4 i n c i r e u i te m u l a t o r i n - c i r c u i t e m u l a t o r ( i c e ) 实质是仿照目标机上的c p u 而专门设计的硬件。它被用于替 代目标机上的c p u 设备。它可以仿真执行c p u 所有的操作指令,因而是一种特殊的c p u 。 它比一般的c p u 有更多的引脚,通过这些引脚可以将内部的信号输出到被控制的目标机, 就像是实际c p u 产生相应的控制信号一样。而且可以将i c e 上的内存映射到用户的程序空 间,使得在目标机不存在的情况下也可阻进行目标程序的调试。通常,这种调试结合外部远 程调试器来使用。借用调试器丰富的符号处理功能及i c e 提供的对目标机的强大调试控制 1 2 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 功能,与前面几种调试技术相比,调试的效率得以很大提高,调试的功能也更加丰富。 使用这种方式进行调试时,一股先将目标机的c p u 取下,而将i c e 的引脚插入目标机 的c p u 插槽。然后在宿主机端运行的调试器通过i c e 来控制目标机上运行的程序。由于i c e 提供了非常丰富的调试功能,因此可以按顺序单步执行,也可以倒退执行,还可以实时查看 所有需要的数据,从而给调试过程带来了很多的便利。 由于在嵌入式系统应用的开发过程中,很大部分与硬件有紧密的关系,因而存在各种 异常现象,从而给c p u 的指令执行带来各种不确定因素,这种不确定性不能通过以往的调 试手段来发现,但可以通过i c e 发现。但是,由于i c e 是针对特定的处理器进行仿真,它 的开发成本很高,而且扩展性较差。一旦处理器更换,它将不能再继续使用。因此尽管i c e 的价格非常昂贵,但由于其强大的调试功能,它仍然得到了非常广泛的应用。 使用i c e ,一般而言,它可以同时支持软断点和硬件断点的设置;支持设置各种复杂的 断点和触发器;可以实时全部跟踪或选择性跟踪目标程序的运行:允许用户设置些定时器; 也允许用户在不中断程序运行的条件下查看内存,变量,寄存器等信息,实现非干扰式调试 查询,而减少调试对程序运行的影响。 i c e 允许用户进行非干扰式的调试,因而这种调试方式除了调试控制正常运行的目标程 序外,还特别适用予调试实时的应用系统、设备驱动程序以及对硬件进行功能和性能的测试。 它的使用场合较为广泛,支持调试有不同调试需求的程序。此外,利用i c e ,在增加软件支 持的情况下,还可进行一些如实时性能分析等功能,它可以非常精确的测定程序每条指令运 行时间。然而,如前所述,i c e 本身的开发成本过高,一般的价格都在几千美金,功能更强 的,其价格要几万美金。而且,扩展性较差。这不仅在嵌入式计算机技术日新月异的今天显 得跟不上时代的要求,也阻碍了团队的整体开发,因为不可能给每位开发人员都配备一套 i c e 。因此,i c e 使用虽然广泛,而且受欢迎,但它还是只是被用到一些其它更为廉价的调 试手段不能发现解决问题的时候。 3 2 5 o n c h i p - d e b u g 鉴于嵌入式系统发展的方向转向片上系统设计。越来越多的开发商将功能强大的系统集 成到一个芯片上。包括系统软件及其相应的硬件。因此,在这种情况下,即便使用传统i c e 方式的调试手段也对调试无能为力。因此需要新的调试手段。 o nc h i pd e b u g g i n g ( o c d ) 实质是芯片内部提供的一种调试软件的调试控制单元。最 初的o c d 是一种仿r o mm o n i t o r 的结构,是将r o mm o n i t o r 的功能以微码( m i c r o c o d o 的 形式体现。其中比较典型的c p u 是m o t o r o l a 的c p u 3 2 系列的处理器。后来的o c d 彻底摒 弃了这种r o mm o n i t o r 的结构,而采用了两级模式的思路,即将c p u 的模式分为一般模式 和调试模式( 注:这里的一般模式是指除调试模式外c p u 的所有模式) 。在调试模式下c p u 浙江大学嵌入式系统研究中心虚拟机调试子系统设计和实现 不再从内存读取摆令,而是通过向调试控制单元发布指令来执行c p u 指令,如读写内存, 寄存器等,通过调试控制单元还可以控制c p u 进入和退出调试模式。这样,当c p u 处于调 试模式时,c p u 停止运行,它接受来自调试控制单元的指令并执行。在宿主机端的调试器 发出调试指令时,它通过调试控制单元向目标机发送要执行的指令,在执行完指令后仍然停 止等待进一步的指令。通过这种彤式调试器可以读写目标机的内存和各种寄存器,控制目标 程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版房地产项目股份协议转让合同书
- 二零二五年度农业现代化股份合作协议范本
- 2025年8月份路基施工质量技术培训试题及答案
- 快递企业突发事件应急处置预案(模板)
- 四川省乐山市《轮机部(船舶辅机8301)》-海船船员考试备考题库含答案(2025年)
- 2025-2030中国薄荷醇液体市场运营现状与前景需求预测报告
- 2025年建筑工程项目管理中级模拟题
- 相机设备基础知识培训课件
- 2025年智慧交通信号灯系统升级改造安装合同
- 2025年企业员工股权激励及跨区域市场拓展全面合作协议
- 2024年高级养老护理员职业鉴定考试题库大全-下(多选、判断题)
- 数字经济中的市场结构变化-洞察阐释
- 《肾衰竭患者的护理》课件
- 食品合规管理中级 课件 上篇 第二章 食品合规标法义务及监管
- 2024-2030全球胃肠标记物胶囊行业调研及趋势分析报告
- 中国儿童肥胖诊断评估与管理专家共识解读 课件
- 老年人心理疏导与沟通培训
- SL631水利水电工程单元工程施工质量验收标准第3部分:地基处理与基础工程
- 2025时政试题及答案(100题)
- 数学分析1试题及答案
- 中职班主任培训学生管理
评论
0/150
提交评论