




已阅读5页,还剩96页未读, 继续免费阅读
(计算机应用技术专业论文)基于gdb的嵌入式系统调试器的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 嵌入式系统调试器是进行嵌入式开发的关键工具,常用于对嵌入式软件的调 试和测试。嵌入式系统调试器由交叉调试器和调试代理组成,其特点在于交叉调 试器和调试目标的运行环境相互分离,依赖调试代理来实现其调试会话。随着嵌 入式技术的不断发展,各种嵌入式调试技术也在不断进步,对应的嵌入式系统调 试器在嵌入式软件开发中也发挥着越来越重要的作用。 g n ud e b u g g e r ,g d b 作为g n u 工具链中的重要一员,是一个功能强大的源 码级调试器,可以实现普通商业调试器几乎所有的功能。在g d b 众多可圈可点的 特性中,其远程调试功能是非常吸引人的一个特性。这个特性不仅在将g n u 工 具移植到一个新的操作系统和微处理器的时候很有用,对于想调试一个基于g n u 支持的芯片的嵌入式系统的开发人员来说,也是非常有用的。由于g a b 提供了在 大多数嵌入式系统上的可移植的、复杂的调试功能,它已成为嵌入式开发的首选 解决方案。 本文讨论了当前的各种嵌入式调试器的现状,结合源代码详细分析了g d b 的 结构和调试原理,介绍了开发基于g d b 的嵌入式系统调试器常用的远程调试技术 和g d b m i 接口;然后详细阐述了如何使用g d b m 1 开发g d b 的图形前端和怎样使 用r s p 协议、s t u b 和g d b s e r v e r 设计一个调试代理,从而较深入地讨论了基于g d b 的嵌入式调试器的设计方法;最后,结合国家中小型企业创新基金项目“嵌入式 仿真开发平台”,给出了一个基于g d b 的嵌入式系统调试器具体实现。 关键词:交叉调试器;g d b m i ;r s p ;s t u b ;g d b s e r v e r ;o c d a b s t r a c t a b s t r a c t a sac r u c i a le m b e d d e dd e v e l o p m e n tt o o l ,t h ee m b e d d e ds y s t e md e b u g g e ri s u s u a l l yu s e dt od e b u ga n dt e s te m b e d d e ds o f t w a r e 。ae m b e d d e ds y s t e md e b u g g e r c o n s i s t so fac r o s sd e b u g g e ra n dad e b u g g e ra g e n t ,w h i c hc h a r a c t e r i s t i cl i e si nt h e s e p a r a t i o no fr u n n i n ge n v i r o n m e n t sb e t w e e nt h ec r o s sd e b u g g e ra n dt h ed e b u g g e ea n d t h ed e p e n d e n c eo nt h eg d ba g e n ti nt h ed e b u gs e s s i o n 。w i t hl h ed e v e l o p m e n to f e m b e d d e dt e c h n i q u e ,v a r i o u se m b e d d e dd e b u gt e c h n i q u e sc o n t i n u o u s l ya d v a n c ea n d a l lk i n d so fe m b e d d e ds y s t e md e b u g g e r sa r ep l a y i n gam o r ea n dm o r ei m p o r t a n tr o l ei n t h ee m b e d d e ds o f t w a r ed e v e l o p m e n t 。 t h eg n u d e b u g g e r ,g d ba sa t o o li nt h eg n ut o o l k i t s ,i sa ne x t r e m e l yp o w e r f u l s o u r c e l e v e ld e b u g g e r 。a m o n gg d b sm a n yn o t e w o r t h yf e a t u r e s ,i t sa b i l i t yt od e b u g p r o g r a m s “r e m o t e ”i sf a s c i n a t i n g 。t h i sc a p a b i l i t yi sn o to n l ye s s e n t i a lw h e np o r t i n g g n ut o o l st oan e wo p e r a t i o ns y s t e mo rm i c r o p r o c e s s o r jb u ti t sa l s ou s e f u lf o r d e v e l o p e r sw h on e e dt od e b u ga ne m b e d d e ds y s t e mb a s e do nap r o c e s s o rt h a tg n u a l r e a d ys u p p o r t s 。g d bi st h ep r e f e r r e ds o l u t i o ni ne m b e d d e dd e v e l o p m e n tb e c a u s ei t p r o v i d e sp o r t a b l e ,s o p h i s t i c a t e dd e b u g g i n go v e ra b r o a dr a n go fe m b e d d e ds y s t e m s 。 t h i sp a p e rd i s c u s s e st h e s t a t u sq u oo fv a r i o u se m b e d d e ds y s t e md e b u g g e r s ; d e e p l ya n a l y s e st h eo v e r a l ls t r u c t u r eo fg d ba n dt h ed e b u g g i n gm e c h a n i s mo fg d b b a s e do ni t ss o u r c ec o d e s ;i n t r o d u c e st h eg d b sr e m o t ed e b u g t e c h n i q u ea n dg d b m l , w h i c ha r eu s u a l l yu s e dt od e v e l o pt h eg d b b a s e de m b e d d e ds y s t e md e b u g g e r 。t h e n d w e l l so nh o wt ou s eg d b m lt od e v e l o pag u if r o n ta n dh o wt ou s er s p 、s t u ba n d g d b s e r v e rt od e s i g nad e b u ga g e n t ,i no r d e rt oe x p a t i a t eo nt h ed e s i g nm e t h o do ft h e g d b b a s e de m b e d d e ds y s t e md e b u g g e r 。i nt h ee n d ,p r o v i d e sac o n c r e t ei m p l e m e n t a t i o n o ft h eg d b - b a s e de m b e d d e ds y s t e md e b u g g e ro f “e m b e d d e ds i m u l a t i o nd e v e l o p m e n t p l a t f o r m ”,t h ep r o j e c to ft h ei n n o v a t i o nf u n df o rt e c h n o l o g yb a s e df i r m s 。 k e y w o r d s :c r o s sd e b u g g e r ;g d b m h r s p ;s t u b ;g d b s e r v e r i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:垄生日期:2 口。6 年s 月f s 日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 日期:1 0 d 6 年j 月f 5e l 第一章前言 1 1 嵌入式系统概述 第一章前言 随着信息化技术的发展和数字化产品的普及,以计算机技术、:占片技术和软 件技术为核心的嵌入式系统再度成为当前研究和应用的热点,通信、计算机、消 费电子技术( 3 c ) 合一的趋势正在逐步形成,无所不在的网络和无所不在的计算 ( e v e r y t h i n gc o n n e c t i n g ,e v e r y w h e r ec o m p u t i n g ) 正在将人类带入一个崭新的信息 社会。 1 1 1 嵌入式系统 嵌入式系统是现代科学的多学科互相融合的以应用技术产品为核心,以计算 机技术为基础,以通信技术为载体,以消费类产品为对象,引入各类传感器加入, 进入i n t e m e t 网络技术的连接,而适应应用环境的专用系统1 1 l 。嵌入式系统最典型 的特点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各类形形色色 运用了嵌入式技术的电子产品,小到m p 3 、p d a 等微型数字化设备,大到信息家 电、智能电器、车载g i s ,各种新型嵌入式设备在数量上已经远远超过了通用计 算机。 一般认为,嵌入式系统的体系结构可以分为四部分:嵌入式处理器、嵌入式 外围设备、嵌入式操作系统和嵌入式应用软件: 嵌入式处理器 嵌入式系统的核心是各种类型的嵌入式处理器,它将通用c p u 中许多由板卡 完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时 还具有很高的效率和可靠性。 嵌入式处理器的体系结构经历了从c 1 s c 至r i s c 和c o m p a c tr i s c 的转变, 位数则由4 位、8 位、1 6 位、3 2 位逐步发展到6 4 位。目前常用的嵌入式处理器 可分为低端的嵌入式微控制器( m i c r oc o n t r o l l e ru n i t ,m c u ) 、中高端的嵌入式 微处理器( e m b e d d e dm i c r op r o c e s s o ru n i t ,e m p u ) 、用于计算机通信领域的嵌入 式d s p 处理器( e m b e d d e dd i g i t a ls i g n a lp r o c e s s o r ,e d s p ) 和高度集成的嵌入式 片上系统( s y s t e mo nc h i p ,s o c ) 。 电子科技大学硕士学位论文 目前几乎每个半导体制造商都生产嵌入式处理器,并且越来越多的公司开始 拥有自主的处理器设计部门,据不完全统计,全世界嵌入式处理器已经超过1 0 0 0 多种,流行的体系结构有3 0 多个系列,其中以a r m 、p o w e r p c 、m c6 8 0 0 0 、m i p s 等使用得最为广泛。 嵌入式外围设备 在嵌入系统硬件系统中,除了中心控制部件( m c u 、d s p 、e m p u 、s o c ) 以外,用于完成存储、通信、调试、显示等辅助功能的其他部件,事实上都可以 算作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分为存储设备( 如 e p r o m 、f l a s h 等) 、通信设备( 如r s ,2 3 2 接口、u s b 接口、e t h e m e t 接口等) 和显示设备( 如l c d ) 3 类。 嵌入式操作系统 为了使嵌入式系统的开发更加方便和快捷,需要有专门负责管理存储器分配、 中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。嵌入式操作系 统是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分。 嵌入式操作系统根据应用场合可以分为两大类:一类是面向消费电子产品的 非实时系统,这类设备包括个人数字助理( p d a ) 、移动电话、机顶盒( s t b ) 等;另一类则是面向控制、通信、医疗等领域的实时操作系统,如w i n d r i v e r 公 司的v x w o r k s 和p s o s 、m i c r o w a v e 的o s 9 等。实时系统( r e a lt i m es y s t e m ) 是一种能够在指定或者确定时间内完成系统功能,并且对外部和内部事件在同步 或者异步时间内能做出及时响应的系统。 嵌入式应用软件 嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到 用户预期目标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有 些嵌入式应用软件需要特定嵌入式操作系统的支持。 1 1 2 嵌入式系统开发 1 1 2 1 嵌入式系统开发流程 在嵌入式系统的应用开发中,整个系统的简要开发流程如图1 - 1 。 由图1 - 1 中可以看出,嵌入式系统的开发分为以下三个阶段: 1 硬件系统的开发,即根据需求和实际情况选择嵌入式处理器平台,相关外 围设备,确定系统硬件平台。 2 底层系统开发,根据需求和实际情况进行板级支持包( b s p ) 的开发、和操 第一章前言 作系统的移植、以及驱动和b o o t l o a d e r 的开发等,确定软件平台。 3 上层应用开发,例如w e bs e r v e r 、监控软件等等。 嵌入式系统发展到今天,对应于各种微处理器的硬件平台一般都是通用的、 固定的、成熟的,这就大大减少了由硬件系统引入错误的机会。嵌入式系统的开 发者现在已经从反复进行硬件平台设计的过程中解脱出来,从而可以将主要精力 放在满足特定的需求的嵌入式软件的开发上。 图1 - 1 嵌入式系统的开发过程 1 1 2 2 嵌入式系统软件开发 底层系统开发 对于嵌入式系统底层软件的开发,难度相对较大,需要了解相关的硬件平台 和底层开发的特性。底层系统的开发一般包括b o o t l o a d e r 、操作系统内核的移植 或裁减和设备驱动程序的开发等等。 作为一个嵌入式软件底层开发人员,最重要的就是要了解硬件平台的特性。 一般来说,选定的硬件平台往往就是一个关于某个处理器平台的成形开发板。拿 到手里之后,嵌入式软件开发人员至少要了解开发板的电路布局以及处理器等的 工作特性,才可能进行操作系统的移植或者驱动程序的开发。 在了解硬件平台的特性后,需要弄清底层开发的特性。例如在移植l i n u x 内 核时,需要了解l i n u x 内核的源代码结构以及如何在里面添加一个新的开发板甚 电子科技大学硕士学位论文 至一个新的处理器的支持代码。在l i n u x 内核中,同硬件相关的文件主要都在a r c h 目录下面,每种不同的处理器和开发板都有单独的配置文件。每一个丌发板所具 有的不同特性主要在于内存芯片的类型以及在处理器看来的物理地址分配等,还 有板上的外接设备的连接方式导致的访问方式的不同。每一个不同的处理器,则 具有更多的复杂特性,包括芯片初始化方式、中断处理方式、引脚对应功能等等, 需要仔细研究处理器的参考手册,才能进行内核的移植工作。 除此以外,直接编写控制程序,或者在移植的操作系统上开发驱动程序或 b o o t l o a d e r 程序,也需要在了解硬件设备的工作特性的基础上,根据编写相应底 层程序的方法、框架进行开发。由于这部分工作的比较繁琐、复杂,这种底层开 发大多数都是由此开发板的供应商来完成。 实际开发中,用户一般只需要对操作系统的内核( 例如使用嵌入式l i n u x 系 统) 进行配置裁减,就可得到适合的嵌入式操作系统。配置裁减内核相对简单一 些,但是也要求开发人员精通内核原理和体系结构。 应用软件的开发 嵌入式系统的应用软件开发,通常是在已经准备好的底层系统环境之上,开 发特定的应用软件。假如底层系统是配置好了的嵌入式l i n u x 系统,嵌入式应用 开发者就可以在某个嵌入式开发环境中采用l i n u x 的软件编写方式,利用l i n u x 提供的操作系统接口,来完成特定功能的实现。由于嵌入式l i n u x 屏蔽了底层硬 件的复杂性,使得开发者通过操作系统提供的a p i 函数就可以完成大部分工作, 因此大大简化了开发过程,提高了系统的稳定性。所以嵌入式应用软件的开发, 主要精力可以集中在应用软件具体的程序流程上面,而不用太过于关心开发板的 底层实现。 一般来说,应用软件的开发是在某个嵌入式应用软件开发平台上来完成的, 从而使得这个嵌入式系统能够具有某种特定的功能,进而满足市场需求。 嵌入式软件开发环境 无论是嵌入式底层系统的开发,还是嵌入式应用软件的开发,都离不开良好 的嵌入式系统开发环境的支持。由于嵌入式系统受资源限制,不可能附带庞大、 复杂的开发环境,因此嵌入式系统软件的开发环境和运行环境往往互相分离i ”, 采用宿主机目标机模式。宿主机( h o s t ) 通常是台通用计算机( 如p c 机或者 工作站) ,是嵌入式系统软件的开发平台。宿主机的软硬件资源比较丰富,不但包 括功能强大的操作系统( 如w i n d o w s 和l i n u x ) ,而且还有各种各样优秀的开发工 具( 如w i n d r i v e r 的t o r n a d o 、m i c r o s o f t 的e m b e d d e dv i s u a lc + + 等) ,能够大大 第一章前言 提高嵌入式应用软件的丌发速度和效率。目标机( t a r g e t ) 是嵌入式系统的硬件 平台,嵌入式系统软件在其中运行。宿主机通过串口、网络接口或特殊的硬件调 试接口与目标机通信,从而完成嵌入式软件的开发过程,一般步骤如下: 1 在宿主机上建立开发环境,进行程序的编码和交叉编译以生成目标平台上 可以运行的二进制代码; 2 下载程序到开发板( 目标机) 上; 3 进行交叉调试; 4 ,将程序固化到开发板中实际运行。 其中,步骤2 和步骤3 比较复杂。 对于步骤2 ,下载b o o t l o a d e r 的动作是根据处理器所支持的方式来实现的, 每个平台各不相同( 例如s 3 c 2 4 1 0 的开发板,可以通过j t a g 方式下载) ;而下载 l i n u x 内核的动作又是根据b o o t l o a d e r 所支持的方式来实现的,每个b o o t l o a d e r 也各不相同;下载应用程序的方式又是根据操作系统所提供的方式来实现的,是 网络方式还是串口方式,通讯协议又是哪种,都无法确定。对于步骤3 的交叉调 试,将在1 2 节中简要介绍。 1 2 嵌入式系统调试器概述 调试( d e b u g ) 就是跟踪程序中的错误并加以改正的过程。用于调试程序的工 具就是调试器。 许多的编程实践,都是从描述问题逻辑和设计所需的数据结构开始,进而是 划分和组织软件模块,最后才着手实现,这样做有助于减少错误和潜在的问题。 这也软件设计与软件工程所存在的价值,一个上百行的程序都应该经过仔细分析 和周密设计,而不是等到这个程序将要运行时才来修改。 然而,程序员毕竟是人,编程错误终究难阱避免,即使是经过良好设计和良 好实现的程序也偶尔会出错。当程序在某处出错而又无法断定为什么出错时,一 个行之有效的方法就是用调试器调试代码,运行并观察该程序在哪里发生了错误。 因此,调试是开发过程中必不可少的环节。 1 2 1 嵌入式系统调试器 根据调试器和被调试程序的运行环境,软件调试可分为两种方式:种是本 地调试( n a t i v ed e b u g ) ,这种情况下调试器与被调试的程序往往是运行在同一台 机器、相同的操作系统上的两个进程,调试器进程通过操作系统专门提供的调用 电子科技大学硕士学位论文 接口控制、访问被调试进程;另一种是交叉调试( c r o s sd e b u g ) ,这种情况下调 试器运行在开发主机上,而被调试程序则运行在目标机上。 交叉调试常常又称为远程调试( r e m o t ed e b u g ) ,一般用在嵌入式系统的软 件开发中。用于交叉调试的调试器叫做交叉调试器。 进行交叉调试时,开发主机上的交叉调试器以某种方式控制目标机上被调试 程序的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程 中变量值等各种调试功能。而提供这种控制功能的就是目标机中称为调试代理的 模块,它负责与交叉调试器共同配合以完成对目标机上运行着的进程的调试。一 般地,将交叉调试器和调试代理一起称为嵌入式系统调试器。 1 2 2 嵌入式系统调试器的分类 从调试代理的技术实现途径及其应用两个角度,可咀将嵌入式系统调试器分 为硬件调试器、软件调试器和模拟调试器3 类。 硬件调试器与软件调试器在很多方丽存在很大的差剐。硬件调试器通常适用 于嵌入式底层系统的开发。例如在一块嵌入式开发板上实现一个b o o t l o a d e r 程序, 或者将l i n u x 内核移植到一种新型体系结构的c p u 上等等。在进行硬件调试时, 宿主机和目标机之间一般是通过特殊的硬件调试接口来连接的。软件调试器通常 适用于嵌入式应用软件的开发,但也可进行嵌入式底层系统的开发。在进行软件 调试时,一般使用串口和网络接口来连接宿主机和目标机,调试会话还必须得到 目标机上系统软件环境的支持,包括内核、交叉编译器、库程序、s h e l l 交互程序、 终端仿真程序等等。 1 2 2 1 硬件调试器 在线仿真器( i n c i r c u i te m u l a t o r s ,i c e ) i c e 是嵌入式系统领域使用得最多,也是功能最强大的调试器之一。i c e 是 一个用来设计其他计算机系统的计算机,它代替了目标机上物理的处理器或 m c u ,其表现与被代替的目标机处理器完全一样,但是他允许用户查看处理器内 部的数据或代码并控制c p u 的运行 3 。一个在线仿真器通常由仿真探头和仿真器 主板组成。仿真探头通过一条电缆与仿真器主板相连,里面包含了一颗与被代替 的c p u 完全相同的处理器,但是为了调试的目的经过了特殊处理。由于i c e 对 目标机处理器的代替完全是物理上的替代,用户通常要将目标机上的处理器拔出, 然后将i c e 的仿真探头( p r o b ep o d ) 插入目标机的c p u 插槽中。仿真器主板提 第一章前言 供了断点、复杂断点、触发( t r i g g e r ) 、实时跟踪( r e a l t i m e t r a c e ) 、重叠r a m 和影子r a m 等众多调试资源,它通过串口( 现在出现了u s b 接口) 连接开发宿 主机上。其中,实时跟踪是i c e 提供的最有特色的调试手段,它可以在不占用 运行时钟周期的情况下获得程序的执行情况,具有非干扰性( n o n i n t r u s i v e ) 的特 点。特别是在强实时系统中,由于无法使用断点,因此实时跟踪就成了唯一有用 的调试方式。因此在实时系统的调试中,往往需要使用i c e 。尽管i c e 有许多优 点,但是存在通用性不强与价格昂贵的缺陷,使得i c e 的应用受到了限制。 片上调试器( o n c h i pd e b u g g e r s ,o c d ) 由于现代的处理器封装越来越表贴化,仿真器探头的实现也越来越困难。另 外,根据统计:在大约9 5 的调试过程中,用户仅仅使用了简单断点、单步以及 访问处理器资源、内存和外设等一些运行控制方面的基本调试手段。因此,一个 很自然的发展趋势就是将实时跟踪和运行控制分开,将运行控制放到目标机系统 的c p u 核( c p uc o r e ) 内由一个专门的调试控制逻辑模块来实现,并用一个专 用的串行信号接口开放给用户,用户可以通过c p u 核内的调试控制逻辑模块来停 止继续c p u 的运行,并访问目标机上的各种资源。这种放弃实时跟踪功能,但 是提供了大多数i c e 的调试特性的工具,就是片上调试器p j 。在o c d 接口中使用 串行信号接口是为了减少调试接口的引脚数目。 为了实现主机与目标机处理器的片上调试逻辑之间的连接,可以用一块简单 的信号转换电路板来匹配主机通信接口和目标机c p u 的串行调试接口。这块信号 转换电路板称为“片上调试器”或“串行调试器”,信号转换只是它的一个最基本 的功能,而其它高级功能的实现由各个厂商在其发布的片上调试器产品中完成。 摩托罗拉公司最早认识到o c d 技术这个发展趋势,并率先在6 8 3 x x 和 6 8 h c l 6 处理器上创造了b d m ( b a c k g r o u dd e b u gm o d e ) 调试接口,并将其用于 它的c o l d f i r e 、p o w e r p c 等系列微处理器中。而m i p s 、i n l e l 、t i 、i b m 和a r m 等则实现了基于j t a g ( j o i n t t e s t a c c e s sg r o u p ) 标准的串行调试接1 3 p 】。 与i c e 相比,b d m 和j t a g 不存在任何因c p u 封装或c p u 速度而带来的问 题。尤其是j t a g ,现已成为了i e e e 的国际标准,即i e e e l l 4 9 1 1 9 9 0 。具有j t a g 接口的芯片一般都有如下的引脚【4 :测试数据输入( t d i ) 、测试数据输出( t d o ) 、 测试时钟( t c k ) 、测试模式选择引脚( r i m s ) ,有的还加了一个异步测试复位引 脚( t r s t ) ;其片上调试逻辑包括3 个主要模块:测试访问端口t a p 控制器、指 令寄存器、数据寄存器。虽然j t a g 调试不占用系统资源,能够调试没有外部总 线的芯片,代价也非常小,但是由于j t a g 是通过串口依次传递数据,速度比较 电子科技大学硕士学位论文 慢,只能进行软件断点级别的调试,自身还不能完成实时跟踪和多种事件触发等 复杂调试功能。因此便有了几种功能更为完善的增强版本。例如a r m 推出了采 用基于j t a g 版本的e t r a c e ,e t r a c e 通过e m b e d d e d l c e 硬逻辑、实时监控、实 时跟踪( 包括嵌入跟踪微核、罡艮踪分析仪、跟踪调试软件3 个部分) 3 个增强的 辅助片上调试硬件来完成实时调试垆】。 1 , 2 2 2 软件调试器 r o mm o n i t o r r o m m o n i t o r 是指一段驻留在目标机的r o m 或f l a s h 中的小程序,它可以在 开发过程中辅助测试与调试用户所编写的嵌入式程序。采用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 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 mm o n i t o r 能完成代码分析( c o d ep r o f i l i n 曲、系统分析( s y s t e m p r o f i l i n g1 、r o m 空间的写操作,以及设置各种非常复杂的断点等功能【6 】。 调试桩和调试服务器 调试桩( d e b u g g i n gs t u b ) 和调试服务器( d e b u g g i n gs e r v g r ) 也是- - d , 段驻 留在目标机上的代码。采用这种调试方式进行交叉调试也需要在目标机上运行调 试桩( 或调试服务器) 和被调试程序,宿主机的调试器和目标机的调试桩( 或调 试服务器) 也使用远程调试协议进行连接。与r o mm o n i t o r 调试方式不同的是, r o mm o n i t o r 程序是驻留在目标机的r o m 中的,系统复位时首先被执行,然后 下载被调试程序进行调试;而调试桩和调试服务器不是固化在目标机上的,需要 先通过某种工具将它们下载到目标机中。由于调试桩往往是被设计用来独立运行 于目标板上的,不需要系统软件环境的支持,因此它必须与被调试程序编译、连 接在起运行,一般用于底层系统软件的调试;而调试服务器通常作为目标机系 统上的一个应用程序运行,一般用于应用软件的调试。以典型的g n u 调试器g d b 为例,当使用g d b 调试底层系统程序时,需要使用g d b 的调试桩g d b s t u b ,而 使用g d b 调试应用程序时,需要使用g d b 的调试服务器g d b s e e r 。调试桩或 调试服务器的职责就是在目标机上实现由宿主机上的调试器发送过来的调试命 令,例如:读写内存、读写寄存器、设置断点以及运行被调试程序,并将结果返 第一章前言 回,以配合宿主机的调试器完成调试。 1 2 2 3 模拟调试器 通常使用的s i m u l a t o r 是指令级的模拟器( i i s ) ,它相当于在宿主机上虚拟了 一台目标机。该目标机可以是和宿主机的c p u 不同的类型【6 】。利用指令集模拟器 进行的交叉调试是种完全软件模拟的调试方法,根本不需要目标板的支持,就 连i 0 等设备也都是软件模拟的。而实际上软件模拟的结果有时与真实板卡还是 有一些差别,硬件的信号、延迟以及对资源的竞争用纯软件的方法根本无法模拟。 由于指令集模拟器不需要开发板卡的支持,因此适合于嵌入式系统开发的初级阶 段,硬件板卡不是批量生产,数量十分有限。指令集模拟器也适合于应用程序的 调试,因为应用程序与硬件和外围设备关系不是很大。虽然指令模拟器功能有限, 但是采用的软件模拟的方法,节省了嵌入式系统开发的成本。 1 3 本文的项目背景 本文来源于国家科技部中小企业创新基金赞助项目“嵌入式软件仿真开 发平台”。该项目的目标是为嵌入式系统开发人员提供个快捷,方便和高效的集 成仿真开发环境。其基本思想是以构件库的方式建立目标平台的仿真环境,将编 译好的目标平台上的程序直接调进仿真平台,通过仿真平台对目标平台的指令进 行解释,在仿真平台上完成程序的调试和执行,达到脱离真实的硬件系统在普通 台式机上完成嵌入式软件软件开发的目的。 仿真开发平台主要包括仿真运行环境、应用编程接口和集成开发环境等内容。 仿真运行环境以构件库的方式提供处理器芯片、存储器、通信设备及其它外围设 备的仿真芯片,为软件开发提供目标环境支持。包括仿真m c u 、仿真i c 和仿真 外设等构件的增加、删除、检索、整理等功能。应用编程接口提供统一的工具集 成接口规范和构件访问接口规范,满足用户集成第三方工具和自行扩展构件库的 需求。集成开发环境是一个集成工具链,包括软件编码、调试、逻辑分析、环境 维护和工程管理所需的各种工具,可编辑源代码,使用集成的第三方开发工具进 行交叉编译和链接,生成可执行的嵌入式代码文件,配置目标平台,构建一个“虚 拟目标机系统”供嵌入式软件的调试与测试使用,提供源码级代码调试功能。 在仿真开发环境中,仿真运行环境和集成开发环境之间主要通过集成开发环 境的调试子系统进行交互,因此调试子系统是该仿真开发平台的重要部分。本人 在该项目中主要负责调试子系统中交叉调试器的开发。在开发过程中,研究了各 电子科技大学预: 学位论文 类嵌入式系统调试器的工作原理,详细分析了开源调试器g n ug d b 的体系结构和 工作机理,通过其g d b m l 接口将其集成到嵌入式的丌发环境中作为宿主机端的交 叉调试器,然后通过仿真平台调试代理,实现了对仿真平台的调试。本文将结合 浚项目详细讨论基于g d b 的嵌入式调试器的设计与实现。 1 4 本文的结构 全文共分六章,详细讨论了嵌入式调试器的设计与实现。具体章节安排如下: 第一章,简要介绍了嵌入式系统及其调试器的现状; 第二章,结合源代码详细分析了g d b 的结构及其调试原理。主要内容有g d b 的内部结构分析;调试信息的表示及其提取; 第三章,介绍了g d b 用于g u i 封装的g d b m i 接口,阐述了g d b 的远程调试 的相关技术( r s p 协议、调试桩s t u b 和调试服务器g d b s e r v e r ) ; 第四章,论述了“嵌入式仿真平台”项目中的基于g d b 的嵌入式系统调试器 的设计: 第五章,对基于卫d b 的嵌入式系统调试器的实现作了详细的描述; 第六章,总结全文。 1 0 第二章g d b 的结构及其调试原理分析 2 1g d b 简介 第二章g d b 的结构及其调试原理分析 g n ud e b u g g e r ,g d b 是g n u l i n u x 和b s d 系统下的标准调试器,它也可以 在带有c 编译器和至少一种流行的目标文件格式的u n i x 系统中运行。g d b 是刃: 源组织f s f ( f r e es o f t w a r ef o u n d a t i o n ) 推出的源码级调试工具软件,受g p l 授 权协议保护。r i c h a r d m s t a l l m a n 是g d b 项目的发起人,也是后续版本g d b 开发队 伍的组织者。和l i n u x 一样,g d b 也频繁地进行着更新,无数的人参与了g d b 的 改进和完善工作,可以预见,g d b 将成为重量级的调试器。 g d b 功能非常强大,可以实现普通商业调试器几乎所有的功能。使用它,用 户能查看和改变被调试程序的状态,并控制它的运行。一般说来,g d b 主要能做 四件事( 包括为了完成这些事而附加的功能) ,帮助用户找出程序中的错误:【7 1 1 运行用户程序,设置所有的能影响程序运行的东西。 2 使用户程序在指定的条件下停止。 3 当程序停止时,让用户查看程序的运行情况。 4 改变用户程序,以便用户可以试着修正某个b u g 引起的问题,然后继续 查找另一个b u g 。 g d b 主要支持c c + + ,包括支持名字识别,这样就能使用常规的c + + 源代码 名字做为类成员函数和重载函数的名字。更为重要的是,g d b 支持c 的表达式语 法,在希望查看复杂表达式的值时( 比如* p t r x a 【1 】 q ) ,这就显得非常有用。 g d b 也支持f o r t r a n7 7 ,对m o d u l a r - 2 、p a s c a l 也提供了部分支持。 g d b 是一个源码级调试器,并且可能是目前具有最广泛的兼容性( 可以移植到 最多的体系架构上) 的调试器。要使用g d b 进行调试,必须在编译生成的可执行 文件中加入调试信息,即需在编译时使用g 选项。调试信息包括源代码行号到目 标代码地址的映射信息,以及程序中用到的所有函数、变量、类型和数据结构的 描述信息。g d b 利用这些信息使源代码和机器码相关联,在程序执行过程中获得 程序的当前各种运行状态。 如果愿意的话,还可以在编译时使用“g g d b ”选项来生成更多的调试信息。 由于这些调试信息中的相当一部分g d b 所特有的,所以生成的代码将无法在其它 1 1 电于科技大学硕士学位论文 调试器中正常调试。对于大多数情况来说,普通的。g 选项就足够了。需要注意的 是,g c c 虽然允许同时使用一g ( 调试) 和- o ( 优化) 选项,但优化会影响最终生成的代 码,导致程序源代码和二进制代码之间的关系变得复杂起来。如果不想为调试制 造障碍,建议不要将。g 和0 选项一同使用,并且只在程序彻底调试完后才开始进 行代码优化。 2 2 g d b 的结构分析 2 2 1 调试器的体系结构 对于几乎所有的调试器来说,都具有如图2 1 所示的体系结构:【8 】 从图中可以看出,调试器由调试器内核( k e r n e l ) 和用户接口u 1 ( u s e r i n t e r f a c e ) 组成。 图2 - 1 典型的调试器体系结构 调试器的运行需要其下面的操作系统和处理器提供支持。例如调试器内核在 访问被调试程序时,它必须使用操作系统提供的调试a p i 。调试a p i 提供了一些 基本的函数来创建可调试的进程、读写进程内存并控制它的执行。此外,调试a p i 还提供了一种方式通知调试器何时在被调试程序上发生了重要的事件。 对于调试器来说,除了对调试a p i 进行响应,被调试程序在操作系统和下层 硬件上的操作和交互不受它的调试的影响,这就是著名的h e i s e n b e r gn o n i n t r u s i v e 第二章g d b 的结构及其调试原理分析 准则。非干扰性( n o n i n t r u s i v e n e s s ) 是很重要的,因为用户程序最终将独立地运 行在操作系统中,而不是在调试器的控制下运行。因此,所有操作系统调试a p i 的重要目标之一就是非干扰性以使对被调试程序的影响减到最小【8 i 。 调试器内核由进程控制、执行引擎、表达式计算、符号表管理( 或处理) 四 个模块组成。 其中,进程控制模块负责在调试会话开始时创建被调试程序的进程,或者 a t t a c h 到一个已经运行的进程;在调试会话结束时,终止被调试进程并使调试器 脱离被调试进程。 符号表管理是实现调试器时最关键、最核心的功能。符号表通常包含在被调 试程序的可执行代码的目标文件中,它给出了源代码语句和可执行指令的字节地 址之间的映射关系,这种语句信息可用于程序中断点的设置。符号表还包含了关 于程序变量的相关信息,因此调试器能够将源程序的变量或数据结构映射到被调 试程序的数据区的指定位置。由编译器提供的与此相关的类型信息将帮助调试器 正确解释被调试程序在内存中各个位的含义。使用符号表的语句信息,调试器内 核的执行控制模块能够控制被调试程序按照用户所希望的方式运行。 执行控制模块( 执行引擎) 通常包括被调试程序的运行到断点、指令级单步 或语句级单步、被调试程序异常处理以及一些辅助操作。 表达式求值功能是调试器根据用户输入的表达式解析出其中的变量和运算 符,从符号表求出变量对应的地址,读取相应的内存的值,然后计算出表达式的 值。 用户接口提供了源代码、堆栈、断点、控制、反汇编、硬件寄存器、查看和 浏览变量的功能,这些功能在g u i 调试器中通过相应的视图和窗口来显示。 2 2 2g d b 的总体结构 g d b 的总体结构基本符合图2 1 所示的体系,只是划分有所差异。g d b 包含三 个主要的子系统:用户接口( u s e ri n t e r f a c e ) ,符号处理端( s y m b o lh a n d l i n g ( t h e s y m b o ls i d e ) ) 和目标系统处理端( t a r g e ts y s t e m h a n d l i n g ( t h e t a r g e ts i d e ) ) 。 g d b 自身提供了两个用户接口:传统的命令行接口c l i ( c o m m a n d h n e i n t e r f a c e ) 和文本用户接口1 1 j i ( t e x tu s e ri n t e r f a c e ) 。其中,t u i 接口是一个使 用了c u r s e s 库的终端接口,它可以在不同的文本窗口中显示源文件、汇编输出、 程序寄存器值和g d b 命令等等。这些用户接口使用了鲥b 的事件处理机制和各自 的命令解释器,在后面的2 2 - 4 2 2 6 节中将对此进行讨论。 电子科技大学硕士学位论文 符号处理端和目标端组成了g d b 的内核。 符号处理端包括目标文件阅读器,调试信息解释器,符号表管理,源语言表 达式的解析,打印类型和值。g d b 的符号端可以认为是“g d b 中不需要运行活跃的 程序就能操作的事情”,例如,可以观察变量的类型,估算多种类型的表达式。符 号处理主要完成调试信息的表示和提取,在后面的2 3 、2 4 节中将对此进行详细 讨论。 目标端包括执行控制,栈帧分析和目标机物理硬件操纵等。g d b 的目标端是 “位和字节操纵器”。尽管g d b 也可以在目标端引用符号信息,但在远程调试的情 况下,大多数目标端是和一个除去了调试信息的可执行或甚至不可执行的程序一 起运行。有关目标端的功能是由调试代理来完成的,调试代理的内容将在3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年耳科疾病听力评估与调整模拟试题答案及解析
- 2025-2030动力总成电气化转型对传统零部件企业战略调整影响报告
- 2025-2030功能性食品原料备案新规对产品研发方向的影响评估报告
- 2025-2030功能性寡糖在替代抗生素饲料中的配伍方案优化报告
- 2025-2030共享经济模式重构趋势及可持续投资策略分析报告
- 2025-2030共享洗衣平台用户忠诚度培养与维系策略研究报告
- 2025年光伏农业大棚在农业科技创新中的应用报告
- 2025年废旧电子产品回收处理行业环保技术创新与产业应用前景研究报告
- 2025年海洋能发电技术政策支持下的技术标准与认证体系报告
- 2025年熔化焊接与热切割模拟考试题标准答案
- 2025年资源共享授权合同
- 信息安全管理制度
- 社交心理在网络营销中的实战运用
- 2025年少先队应知应会知识考试题库
- 2025年宁波农商发展集团限公司招聘高频重点提升(共500题)附带答案详解
- 蜀道集团招聘笔试
- 历年全国普通话考试真题50套
- 2024年社区警务规范考试题库
- 农业测绘技术服务方案
- 2025年上海市高考语文专项复习:识记背诵默写
- 2024年中级经济师(金融)《专业知识与实务》考前必刷必练题库500题(含真题、必会题)
评论
0/150
提交评论