已阅读5页,还剩72页未读, 继续免费阅读
(计算机应用技术专业论文)基于gdb的双核调试器的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
as :0 王0l , 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名: 型盔、监 日期: 沙口年多月雌日 论文使用授权 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 白 日期:f o 年f 月雌e t ! i , i j t t 冬 l 摘要 摘要 调试器在系统开发过程中有至关重要的作用,可以使开发人员能控制被调程 序的执行,清楚了解当前系统的运行情况以及在系统出现意外情况时能准确找出 原因。随着多核处理器在嵌入式领域的的迅速发展,设计实现一款能调试多核处 理器上运行程序的调试器迫在眉睫。 本文详细分析了g d b 基本结构和调试原理,然后结合源代码分析了u c l i n u x 基于双核处理器的任务调度算法以及a d s p b f 5 6 1 处理器间中断i p i 的中断原理, 基于u c l i n u x b f 5 6 1 体系结构设计实现了一款基于g d b 的双核处理器的交叉调试 器,完成了通过统一的调试接口对分别运行在两个核上的应用程序进行调试的功 能,主要涉及到以下几方面的设计与实现: l 、宿主机端的交叉调试器,通过统一接口向目标机端的两个处理器发送调试 命令,并回显反映程序当前执行情况的调试信息。 2 、d c r s p 协议,定义了宿主机端调试器与目标机端调试代理之间的通信协 议格式。 3 、目标机端的调试代理,包括绑定在a 核上运行的调试代理和b 核上的调 试代理( 二者功能有所不同) ,按照接收到的调试命令对被调程序的运行进行调试 控制,并产生调试信息发送给宿主机端的调试器。 4 、实验运行环境的搭建,包括针对目标机a d s p b f 5 6 1 ,b o o t l o a d e r 的移植、 交叉编译环境的搭建和u c l i n u x 的移植。 关键词:u c l i n u x b f 5 6 1 ,g d b ,双核,调试代理 j l i j 卢 j a b s t r a c t d e b t r g g e ri s ac r i t i c a lt o o lf o rt h es y s t e md e v e l o p m e n t i t a l l o w sp r o g r a m d e v e l o p e r st os e ew h a ti sg o i n go n “i n s i d e ap r o g r a m w h i l ei t 黜呲8 0 洲眦! p r o g r a m w a sd o i l l g a tt h em o m e n ti s c r a s h e d w i t ht h er a p i dd e v e l o p m e n t o t m u l t i c o r ep r o c e s s o r si nt h ee m b e d d e da r e a ,a d e b u g g e rw h oc a nd e b u gt h ep r o g r a m s n 】n n j n 2o nm u l t i c o r ei su r g e n tn e e d e d ht 1 1 i sm e s i sw ea n a l y z et h es t r u c t u r ea n dd e b u g g i n g p r i n c i p l eo fg d b f r o m m e s o u r c eo fu c l i n u xs u p p o r t i n gm u l t i c o r e ,w ed i s c u s s t h et a s ks c h e d u l i n ga l g o n t h m t 1 1 e nw ed w e l lo nt h ep r i n c i p l eo fi p io fa d s p b f 5 6 1p r o c e s s o f r o m t h em a n u a l n l t h ee n d , w ed e s i 印a n di m p l e m e n t ac r o s s - d e b u g g e r b a s e d 。ng d b 城d 盯 u c l i n u x b f 5 6 1 i ta 1 1 0 w sd e v e l o p e r st od e b u gt h ea p p l i c a t i o n sm n n i n g o nd u a l 。c o r e 缸o u g hau n i f i e dd e b u g g i n g i n t e r f a c e t h em a j o r w o r kw ed o n ea r 锐 1 、n ec r o s s d e b u g g e rr u n n i n go nh o s t i ti s r e s p o n s i b l ef o rs e n d i n gd e b u g 昏n g c o m m a n dt om et w op r o c e s s o r sa n d s h o w i n gt h ed e b u gi n f o r m a t i o n o fd e b u g g e d o r o g r a m s 2 、d c r s pp r o t o c 0 1 i td e f i n e st h ec o m m u n i c a t i o nf o r m a t b e t w e e l lc r o s s - d e b u g g e r a n dd e b u g g i n ga g e n t 3 、t h ed e b u g 百n ga g e n tr u n n i n g0 nt a r g e t i t c o n t a i n st h ea g e n 1 1 1 m l n go na c o r e a n dt 1 1 ea g e n tm 皿i n go nt h eb c o r e t h e ya r es o m ed i f f e r e n t h o w e v e r , t h e m 8 1 n w o r k o fb o maa g e n ta 1 1 dba g e n ta r et h e s a m et oc o n t r o lt h ee x e c u t i o n o fd e b u g g e d p r o g r a m sa n dr e t u m t h ed e b u g g i n gi n f o r m a t i o n t ot h eh o s t , 4 、t h eb u i l d i n go fe x p e 商l e n te n v i r o n m e n t i ti n c l u d e s b o o t l o a d e rt r a i l s p l a n t m & c r o s s c o m p i l i n g e 耐r o 姗e n tb u i l d i n g a n du c l i n u xt r a n s p l a n t i n g b a s e d o n a d s p b f 5 6 1 k e y w 。r d s :u c l i n u x b f 5 6 1 ,g d b ,d u a l _ c o r e ,d 西u g 咖g a g e n t i l 目录 目录 第一章绪论_ 1 1 1 课题背景与研究意义1 1 2 国内外研究发展与现状1 1 2 1 常用调试技术1 1 2 2 单核调试器发展现状4 1 2 3 多核调试器发展现状5 1 3 本文的研究内容5 1 4 本文的组织结构6 第二章g d b 调试原理及多核调试简介7 2 1u c l i n u x 操作系统简介7 2 2g d b 调试原理简介8 2 2 1g d b 简介8 2 2 2g d b 基本结构9 2 2 3g d b 调试信息的表示1 0 2 2 4g d b 调试信息的提取2 1 2 2 5g d b 基本调试功能的实现2 4 2 3 现有的多核调试技术2 7 2 4 本章小结2 7 第三章基于g d b 的双核调试器的设计2 8 3 1u c l i n u x 对双核的支持2 8 3 1 1 启动代码2 8 3 1 2 任务调度3 1 3 1 3 处理器间中断i p i 3 3 3 2g d b 远程调试原理3 7 3 2 1r s p 协议3 7 3 2 2 调试代理3 8 i i i 目录 3 3 双核调试器的设计3 9 3 3 1 宿主机端调试器4 0 3 3 2d c r s p ( d u a lc o r er e m o t es e r i a lp r o t o c 0 1 ) 协议4 1 3 3 3 目标机端调试代理4 6 3 4 本章小结4 8 第四章基于g d b 的双核调试器的实现4 9 4 1 硬件a d s p b f 5 6 1 结构5 0 4 2 移植b o o t l o a d e r 5 1 4 3 搭建交叉编译环境5 2 4 4 移植u c l i n u x 5 3 4 5 绑定调试代理5 6 4 6 系统测试5 8 4 7 本章小结6 1 第五章总结与展望6 2 致谢6 3 参考文献6 4 科研项目及获奖情况6 7 i v 第章绪论 1 1 课题背景与研究意义 第一章绪论 嵌入式技术已被广泛应用于科学研究、工程设计、军事技术等各个领域,成 为当前i t 领域中最炙手可热的技术。而随着近年来计算机硬件水平的高速发展和 用户应用需求的提高,基于双核处理器的嵌入式系统以其高性能、低功耗、低主 频等优势,在当前嵌入式系统中得到了广泛的应用【l - 3 】。基于双处理器芯片的开发 在提高了计算机运算速度的同时也为嵌入式系统的开发带来了很大的困难和挑 战。在嵌入式系统的开发过程中,系统开发平台是最基本的,而其本身的实现也 是难度最大的,因为开发平台中涉及到的编译器、调试器等工具,都与目标板的 体系结构相关。因此,设计实现一套良好的基于多核处理器芯片的平台工具,便 成为了嵌入式系统开发中的重点以及难点。其中好的调试器,可以使得那些需要 运行在多核上的应用程序的实现更简单快捷,加快整个嵌入式系统的开发速度。 g d b 是一款开放性的源码调试器,其具有与商业调试器同样强大的调试功 能,因此非常适合嵌入式系统开发中调试过程使用【4 】。u c l i n u x 是专门针对嵌入式 领域的的操作系统,具有体积小、功能强大、易于定制和易于应用程序开发的特 剧5 。a d s p b f 5 6 1 是b l a c k f i n 系列产品中的一款高性能处理器,具有两颗完全 独立的处理器核j 。 本论文的研究工作是在“基于双核的嵌入式系统研究”项目基础上完成的, 该项目针对u c l i n u x b f 5 6 1 体系结构的目标机的任务调度、内存管理、中断管理、 及调试方面进行研究。其中基于双核处理器的调试技术,作为一项系统开发的基 本以及鲜有研究的技术,具有很高的研究价值,也是本文的着力点。 1 2 国内外研究发展与现状 1 2 1 常用调试技术 传统的单核处理器程序的调试方法可分为软件调试和硬件调试方法两大类。 硬件调试方法,一般需要在宿主机和目标机之间通过特殊硬件来连接,如 j t a g 、e j t a g 、t r a c e 等,通过使处理器进入调试态来查看处理器核的内部运行 电子科技大学硕士学位论文 情况。硬件调试器通常用于较底层的系统开发过程中的调试,如开发b o o t l o a d e r 程序,操作系统内核的开发或移植过程,或者设备驱动程序的开发等。硬件调试 方法优点是:速度较快,并且因为采用了外部调试硬件,所以调试程序本身不占 用目标机的系统资源,调试环境和最终的程序运行环境基本一致,不改变程序执 行的行为,因此具有低侵入性。缺点是:由于调试硬件价格较高,不利于团队的 整体开发,芯片面积和功耗都有所增加,如果是在本文中研究的两个处理器核上 都增加调试接口时,功耗的增加更为明显。以下是一些常用的硬件调试方法: 1 、i c e ( i nc i r c u i te m u l a t o r ) 在线仿真器i c e ,是一种完全仿造调试目标c p u 设计的设备,可以执行目标 机c p u 的指令,但i c e 的c p u 引脚线比目标机实际c p u 的引脚线多,用于将内 部信号输出到目标机上f 7 1 。目标机对用户来说是完全透明的、可控的。 在调试时,目标机与i c e 之间用仿真头连接,i c e 与宿主机之间用串口、并 口或以太网口等连接。i c e 可以真正运行所有目标c p u 的动作,i c e 上的内存也 可以被映射到用户的程序空间,从而给调试过程带来很多便利。这样在采用i c e 调试时可以连接目标机,也可以不连接目标机。宿主机端运行的调试器通过i c e 来控制运行在目标机上的被调试程序。 i c e 方式支持软断点和硬断点的设置,还支持各种复杂的断点和触发器的设 置,实时跟踪,时间戳和定时器的设置,以及s h a d o wr a m 非干扰调试的查询方 式。i c e 特别适用于设备驱动程序、调试实时应用系统的开发调试。但由于i c e 价格太昂贵,可能严重延迟系统开发周期,并且因为每种目标c p u 都需要一种与 之对应的c p u ,使得这种方法开发成本高,且不具通用性。 2 、o c d ( o nc h i pd e b u g g i n g ) o c d 是c p u 芯片提供的一种调试功能( 片上调试) ,可以被认为是一种廉价 的i c e 功能【7 】。据统计大多用户只使用了基本调试手段,如断点、单步、查询等 简单动作来访问处理器或内存资源,o c d 将实时跟踪与运行控制分开来,将运行 控制放到目标机系统的c p u 核内由专门的调试控制逻辑模块来实现,并用一个专 用的串行信号接口开放给用户。因此被独立出来的实时跟踪在调试时c p u 不再需 要从内存读取指令,而是从调试端口读取,通过这个调试端口用户可控制c p u 的 停止、继续运行,并查看目标机上的c p u 运行情况、资源分配情况。采用这种方 式宿主机端的调试器可直接向目标机发送命令,并读写目标机的内存和寄存器, 控制目标程序的运行。o c d 的价格是i c e 的2 0 ,但却提供了i c e 8 0 的功能。 目前较常用的o c d 实现有b d m ( b a c k g r o u dd e b u g g i n g ) ,j t a g ( j o i n tt e s t 2 第一章绪论 a c c e s sg r o u p ) 和o n c e ( o nc h i pe m u l a t i o n ) 等,其中主流的是边界扫描技术j a t g , 已成为了i e e e 的国际标准i e e e l l 4 9 1 ,面向用户的测试接口。这个用户接口由 测试数据输入( t d i ) 、测试数据输出( t d o ) 、测试时钟( t c k ) 和测试模式选 择引脚( t m s ) 四个引脚组成【_ 。有的还多一个异步测试复位引脚( t r s t ) 。j t a g 的工作原理就是将芯片内部几乎所有的引脚通过边界扫描单元( b s c ) 串接起来, 从t d i 引入,t d o 引出。j t a g 具有硬件和软件两方面的作用:硬件方面,用于 系统级的互联测试,可以通过j t a g 诊断出电路是否存在连接故障;软件方面, 用于程序映像的下载和程序调试。j t a g 有很多优点:它可以测试整个版的电气 连接;测试外围芯片;支持实时跟踪调试;支持进行多内核和多处理器的板级和 芯片级的调试,而且使用j t a g 调试时不占用目标机系统资源,代价小,但j t a g 速度较慢,因为数据都是通过串口传递的,所有只能进行软件断点级别的调试。 j t a g 标准只能提供静态的调试方式,如处理器的启动、停止、软件断点、而不 执行和查看修改寄存器,不能提供处理器实时运行时的信息。基于j t a g 的这些 不足各厂家在各自的芯片上,把原有i e e e l1 4 9 1 的基本功能进行了加强和扩展。 如a r m 公司通过增强的辅助片上调试硬件来完成实时调试,内核芯片采用 e t r a c e 实时调试方案片上调试模式,进行实时的调试。同时m i p s 、p o w e r p c 等也采用了不同种类的增强j t a g 方式,之后多家芯片厂商和调试工具开发公司 于1 9 8 8 年成立了n e x u s 5 0 0 1 论坛,提出了在j t a g 之上的嵌入式处理器调试的统 一标准n e x u s 标准。j t a g 在软件和硬件的开发和调试中起着举足轻重,甚至是 不可替代的作用。 软件调试方法,通过在目标机上植入调试代理,辅助宿主机对被调试程序的 执行过程进行控制,以便随时查看和修改被调试程序执行的状态。这种方法通常 用于应用软件的开发,少数情况下亦可用于底层系统的开发,宿主机和目标机之 间一般通过串口或网v i 来连接。软件调试的优点:不需要特殊的调试硬件,调试 代价小,但是由于调试代理需要运行在目标机上,会占用目标机资源,可能导致 调试环境与最终的程序运行环境不尽相同,但影响较小。缺点就是调试速度不如 硬件调试快。以下是一些常见的软件调试方法: 1 、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 m 中,复位后, 3 电子科技大学硕士学位论文 r o mm o n i t o r 被首先执行,完成对目标机的一些必要的初始化工作和对本身的程 序空间的初始化,然后等到宿主机端的调试命令【7 1 。 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 p u 资源、r a m 资源和通信设备等资源,r o mm o n i t o r 程序的运行会在一定程度上造成应用程序的最终运行环境与调试环境有所差异, 如程序初始化部分、内存空间分配等。 2 、r 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 仿真器【7 】。 现在大多目标板都提供r o m 芯片,所以这种方式逐渐已经被淘汰,这里也不再 进行进一步说明。 3 、软件仿真调试模拟器 模拟器就是采用软件手段模拟目标机的整个硬件体系结构的工作情况。如宿 主机是基于x 8 6 的体系结构,目标机是基于a r m 体系结构的,这就需要在a r m 的模拟器a r m u l a t o r 上运行编译生成的程序。整个调试过程与在实际的目标机上 进行调试时完全一样的。采用软件仿真调试方法时,被调程序是在完全脱离真实 硬件平台的情形下被调试的,因此具有很大的灵活性。但是在存储器分配、硬件 信号、延迟、资源的竞争等方面,程序在模拟器环境下运行与在真实的硬件平台 环境下运行还是存在着较大的差异。因此,虽然软件仿真通常能反映处理器真实 的体系结构,但却无法处理系统层次上的一些细节问题。 1 2 2 单核调试器发展现状 目前对调试器的研究大多还只存在单核调试器方面,而且国内更是很少有系 统工具方面的研究,厂商开发应用时大都直接使用国外的平台开发工具。其中做 得稍好的是科银京成公司的l a m b d a g d b 调试器,它是在i n s i g h t 的基础上发展起 来的,专门用于嵌入式实时系统开发的调试器。 国外则相对有较多调试技术的研究成果,如w i n d r i v e r 公司的s i n g l e s t e p , a c c e l e r a t e d t e c h n o l o g y 公司的在线调试器x r a y ,m e t r o w e r k s 公司的c o d e w a r r i o r , 以及g n u 的开放性源码调试器g d b 等。以上提到的研究成果都是只针对单核处 4 第章绪论 理器的调试器。 1 2 3 多核调试器发展现状 国内针对多处理器核的调试技术研究,现阶段仅限于少数大学实验室的研究, 技术并不成熟。 在国外针对多核处理器的调试工具也较少,其中做得较好的有:美国 t o t a l v i e wt e c h n o l o g y 公司的t o t a l v i e wd e b u g g e r ,可以同时对多个处理器进行调 试,但其具有公司产品私有性,如要使用需支付昂贵的版权费用,而且它只适用 于同构处理器的同时调试。a r m 公司的r e a l v i e wd e v e l o p e rs u i t e ,较好的支持了 同构以及异构的双核调试,但只适用于多个a r m 核,以及a r m 核与d s p 的组 合异构,只针对a r m 体系结构系列的处理器,具有很大的局限性。 以上现有的调试器,无论是单核的还是多核的,大多都是硬件调试器。 1 3 本文的研究内容 本课题实验采用b l a c k f i n 5 6 1 的处理器芯片和u c l i n u x 嵌入式操作系统的体系 结构。在综合分析调试技术各种方法的优缺点之后,再结合本实验室的条件,决 定采用软件调试方法,这种方法成本低,不需要特殊调试硬件的支持,并选择基 于g n u 的源码调试器g d b 之上开发,因为g d b 是开放源码的调试工具,很容 易获得其源码,可以在充分分析其调试原理后,针对u c l i n u x b f 5 6 1 体系结构的 特点进行修改,以完成对运行在双核处理器上的被调程序的调试控制。 本文中的主要研究内容有以下几点: 1 、嵌入式系统中软件交叉开发和交叉调试过程 2 、多核调试技术研究 3 、源码调试器g d b 的调试原理 4 、设计实现一个基于g d b 的针对双核处理器的交叉调试器。 ( 1 ) 宿主机端的软件调试器,对用户屏蔽调试不同核上应用程序的底层具体 实现,提供统一的调试接口,向目标机端不同的处理器核发送调试命令,并回显 收到的调试信息。 ( 2 ) 目标机端运行在各处理器核上的调试代理,实现对同核上的被调程序运 行情况的控制,如程序控制功能:启动程序运行、单步执行、停止运行、继续执 行;断点功能:插入、删除断点,运行至断点处。程序上下文查看:变量、寄存 电子科技大学硕士学位论文 器、内存、堆栈、表达式、栈帧、函数等调试基本功能,并产生调试信息。 ( 3 ) 通信协议,实现宿主机端交叉调试其与目标机端调试代理的通信,采用 预定义的通信协议格式进行通信。 1 4 本文的组织结构 全文共分五章,详细讨论了基于g d b 的双核调试器的设计与实现,具体章 节安排如下: 第一章,该章节主要对本课题的背景及研究意义进行了简介,并简要回顾了 调试技术的历史发展,最后就当前国内外调试器的研究现状做了简要介绍。 第二章,对源码调试器g d b 的基本结构、调试原理及部分常用调试命令的 具体实现作了详细分析。 第三章,首先分析了操作系统u c l i n u x 基于双核处理器上的任务调度原理, 以及嵌入式系统开发中常用到的远程调试( 交叉调试) 的原理进行了分析,最后 结合本课题的研究内容,给出了双核调试器的设计方案。 第四章,在对本课题中选用的u c l i n u x b f 5 6 1 目标机的体系结构从软硬件两 方面进行了特点介绍后,给出了基于本文设计的调试器的具体实现,及整个系统 测试。 第五章,对全文所做工作进行总结,并对今后需进一步研究的地方作出展望。 6 第二章g d b 的基本调试原理及多核调试简介 第二章g d b 调试原理及多核调试简介 2 1u c l i n u x 操作系统简介 u c l i n u x ( m i c r o c o n t r o ll i n u x “微控制领域的l i n u x ”) 是当前广泛应用的一 种嵌入式l i n u x 操作系统,完全符合g n u g p l 公约的项目,完全开放源码 5 】o 它 主要针对嵌入式应用,修改l i n u x 内核并重新编译,大小远远小于l i n u x 但包含 了l i n u x 中常用的a p i 。它保留了原来l i n u x 操作系统具有的高稳定性、强大的 网络功能和卓越的文件系统支持功能等优点,并且由于是开放性的源码所以可以 根据嵌入式系统的具体要求任意裁减,使用方便,而且完全免费,目前己成功支 持多种硬件平台,如m o t o r o l ad r a g o n b a l l ,a r m 7 t d m i ,i n t e li 9 6 0 ,b l a c k f i n 等。 u c l i n u x 操作系统的架构如图2 1 所示。 两旧 叵委i 叵u u 巨 二二二巫二二二 图2 - 1u c l i n u x 系统架构图 下边分模块简单介绍u c l i n u x 操作系统: 1 、启动模块( b o o t s t r a p ) ,负责启动u c l i n u x 内核。 7 电子科技大学硕士学位论文 2 、内核初始模块,内核的入口地址是s t a r t( “ c ”中) ,初始化k e r n e l i n i t m a i n 异常、中断、内存、驱动程序等部分,并启动i n i t 进程进入多任务环境。 3 、系统调用和异常处理,i n i t 后整个系统的运行就受应用程序控制了,应用 程序通过系统调用获得系统资源。用户进程发生中断后,首先挂起自己,后内核 获得控制权,取得调用响应的处理程序,内核完成处理后又将控制权交回给用户 进程。 4 、驱动程序,控制着操作系统和外部设备的交互。 5 、内存管理,u c l i n u x 区别于l i n u x 最大的地方就是内存管理。u c l i n u x 不支 持虚拟内存m m u 。u c l i n u x 中为进程分配的内存区域是连续的,代码段、数据段 和栈段之间没有空隙,不像l i n u x 中为了边界对齐会导致各段之间存在微小的间 隙。u c l i n u x 中对于l i n u x 中各进程的私有堆也被取消了,所有的进程共享一个由 操作系统管理的堆空间。 6 、进程管理,u c l i n u x 取消了f o r k 操作,而采用基于v f o r k 的进程创建方案。 7 、u c l i n u x 的文件系统,采用r o m f s 文件系统作为r o o t 文件系统,比l i n u x 采用的e x t 2 文件系统要求的空间更少,文件系统为操作系统的内核运行提供支持。 8 、c 运行库及应用程序。cr u n t i m el i b 提供了用户程序和内核程序的接口, 它是从g l i b c 库裁减掉不适合嵌入式系统的代码后修改移植而来的。 u c l i n u x 是针对控制领域的嵌入式l i n u x 操作系统,适合不具备内存管理单元 m m u 的微处理器,不支持虚拟内存管理技术,采用的是实存储管理策略,所有 的内存访问地址都是直接访问的实际的物理地址。 2 2g d b 调试原理简介 2 2 1g d b 简介 g d b ( t h eg n up r o j e c td e b u g g e r ) ,是g n u 开源组织发布的一个强大的u n i x 下 的调试工具,是受通用公共许可证g p l 保护的自由软件【8 】og d b 可以清楚了解程 序正常运行时内部发生的事情,以及帮助用户在程序崩溃时找出内部原因。 g d b 如所有的调试器一样,实现了所有调试工具需具备的所有基本功能,包 括:控制程序的运行;设置断点,中断运行中的程序;查看变量,表达式,寄存 器,内存及堆栈;在调试过程中修改代码、修改变量及内存值等。g d b 是一个功 能非常丰富的调试工具,自第一个版本发布以来,一直被频繁的更新,多年来, 第二章g d b 的基本调试原理及多核调试简介 通过无数有志之士对g d b 的完善,当前g d b 已被更新到7 0 版本。g d b 既支 持多种硬件平台,也支持多种编程语言,包括最常用的c 、c + + 、p a s c a l 、f o r t r a n 、 j a v a 等8 1 。g d b 既可用于本地调试,也可用于远程调试。其本身具有跨平台性, 如在u n i x ,l i n u x 和w i n d o w s 等操作系统之上,g d b 都可以很好的工作。 2 2 2g d b 基本结构 g d b 主要由三部分组成:用户接口( u s e ri n t e r f a c e ) 、符号处理端( s y m b o l h a n d l i n gs i d e ) 和目标系统处理端( t a r g e ts y s t e mh a n d l i n gs i d e ) 【9 1 。 g d b 体系结构如图2 2 所示。 图2 - 2g d b 体系结构 用户接口是调试器为用户提供的各种功能函数的集合,用户可直接调用相应 的功能函数来完成界面上的各种调试功能,如源代码显示、查看变量或表达式的 9 电子科技大学硕士学位论文 值、查看堆栈、寄存器;设置、删除断点等功能。 符号处理器端用于将源程序中各种符号转换为执行文件中对应的地址。符号 表负责利用可执行文件中的调试信息建立源代码与物理地址之间的映射关系,并 且提供变量名与实际数据内存地址之间的对应关系。符号表是调试器功能实现的 关键部分,大部分调试功能的实现都基于它的支持。 目标系统处理端通过调用操作系统提供的a p i 来实现各种调试功能。调试器 的功能模块主要有以下组成部分:源代码管理、断点管理、调试控制、读写寄存 器、读写内存、查看修改变量表达式值、查看栈空间等,这些都是调试器向用户 提供的调试基本功能。在之后的2 2 5 节中,将对其中几个常用的调试功能在g d b 中的具体实现进行详细分析。 如使用g d b 对程序进行调试,需要在使用g c c 进行编译时加入g 选项,一使 在编译过程中将调试信息加入到目标文件或最后的可执行文件中,调试信息中包 含的内容有:变量名、变量类型、变量所在行号、函数的原型声明、函数的地址 范围、程序符号表、行号与地址的对应关系等【l0 1 。而g d b 的调试其实就是通过 b f d 库将调试信息从这些包含有调试信息的目标文件中提取出来,并以用户能理 解的方式显示出来。 2 2 3g d b 调试信息的表示 所有的调试器都是依据目标文件或可执行文件中的调试信息来控制程序运行 和查看运行结果的。这些调试信息是包含在目标文件中的,所以调试器的功能实 现与所支持的目标文件格式密切相关。g d b 支持多种目标文件格式:e l f 、a o u t 、 c o f f 、e c o f f 、x c o f f 、p e 、s o m 等,其中e l f ( e x e c u t a b l ea n dl i n k a b l ef o r m a t ) 由于它的跨平台性得到了广泛的使用,并逐渐成为一种商业标准】。它是u n i x 系统实验室u s l 作为应用程序二进制接口a b i ( a p p l i c a t i o nb i n a r yi n t e r f a c e ) 而开 发和发布的。许多嵌入式软件都采用e l f 格式作为目标文件格式,因此这里详细 分析格式为e l f 的目标文件。 2 2 3 1e l f 格式 通过g c c 编译器编译生成可执行文件的过程,包括四个阶段:预处理阶段、 编译阶段、汇编阶段、链接阶段,如图2 3 所示。首先输入源代码文件,经过预 处理阶段生成以i 为后缀名的代码文件,通过编译器将i 文件翻译成汇编语言s 文件,汇编语言文件每条语句都以一种标准的文本格式描述低级机器语言指令, 1 0 第二章g d b 的基本调试原理及多核调试简介 它为不同高级语言的不同编译器提供了通用的输出语言,汇编阶段将s 文件翻译 成底层的机器语言指令,生成可重定位目标程序o 文件,链接阶段将程序中使用 到的库并入到o 文件中,得到最终的可执行文件。 库文件 a 5 0 囝殿粤叶! 翌圈嬲缸二至口 图2 - 3g c c 编译过程 e l f 有三种目标文件格式: 1 、可重定位文件,该文件适用于与其他目标文件链接并入在一起来创建共享 目标文件或可执行目标文件。 2 、可执行文件,该文件用来指定如何创建程序的进程映像,是一个可直接运 行的程序。 3 、共享目标文件,该文件用于与其他的可重定位目标文件或共享目标文件一 起链接,生成可执行文件。 总的说来,e l f 格式的目标文件可以参与程序连接来构建程序( 可重定位目 标文件和共享目标文件) 或直接运行( 可执行目标文件) 。图2 4 反映了这两类 文件内部组织结构。其中被用来建立进程映像或者执行程序的文件必须有程序头 表,即共享目标文件和可执行目标文件必须有程序头表,可重定位文件则不需要。 链接过程中的文件必须有节头表,即共享目标文件和可重定位文件必须有节头表, 可执行文件则不需要。 链接视图执行视图 e l f 头 程序头表( 可选) 节1 节n 节头表 e l f 头 程序头表 段l 段2 节头表( 可选) 图2 _ 4 e l f 目标文件格式 1 1 电子科技大学硕士学位论文 1 、e l f 头 文件格式中的e l f 头保存了基本的e l f 信息,用于描述文件的组织结构, 其结构定义如下【1 3 l 。 t y p e d e fs t r u c t u n s i g n e dc h a re _ i d e n t 16 ;e l f 标识信息 e l f 3 2h a l fe e l f 3 2h a l fem a c h i n e ;目标文件要求的目标机c p u 类型 e l f 3 2w o r dev e r s i o n ;当前版本号 e l f 3 2a d d ree n t r y ;可执行文件镜像的入口地址 e l f 3 2o f fep h o f f ;程序头表在文件内的偏移量 e l f 3 2o f f es h o f f ;节头表在文件内的偏移量 e l f 3 2w o r def l a g s ;与特定处理器有关的标志位 e l f 3 2h a l f ee h s i z e ;e l f 头的大小( 以字节为单位) e 1 f 3 2h a l f ep h e n t s i z e ;程序头表表项的大小( 以字节为单位) e l f 3 2h a l f ep h n u m ;程序头表包含的表项数目 e l f 3 2h a l f es h e n t s i z e ;节头表表项的大小( 以字节为单位) e l f 3 2h a l f es h n u m ;节头表包含的表项数目 e 1 f 3 2h a l f es h s t m d x ;节名的字符串表在节头表中的索引 ) e l f 3 2 _ e h d r ; 2 、程序头表 可执行目标文件和共享目标文件才有程序头表这项,用来指导创建进程映像, 告诉系统运行时需要装入哪些内容,进程的起始地址等信息,从而使e l f 文件装 载到内存运行。其数据结构定义【1 3 】如下: t y p e d e fs t r u c t e l f 3 2 j 惋r dp _ t y p e ;段类型 e l f 3 2o f r po f f s e t ;段在文件内的偏移量 e 1 f 3 2a d d rpy a d d r ;段在进程映象中虚地址 e l f 3 2a d d rpp a d d r ;段在内存中的物理地址 e l f 3 2w o r dpf i l e s z ;段在可执行目标文件中的大小 e l f 3 2w o r drm e m s ;段在内存占据的大小 e l f 3 2 j 泊r dp _ f l a g s ;表明与该段相关的一些属性 e l f 3 2 _ w o r dp _ a l i g n ;段在内存中对齐方式 1 2 第二章g d b 的基本调试原理及多核调试简介 e l f 3 2 _ e h d r ; 3 、节头表 用来定位所有的节。在链接视图中有很多节,保存着大量目标文件信息:指 令、数据、符号表、重定位信息等。数据结构定义如下【1 3 】: t y p e d e fs t r u c t e l f 3 2w o r ds hn a m e ;该节的名字,值是节头字符表中的索引 e l f 3 2 一w o r ds h _ t y p e ;该成员把节按内容和意义分类 e l f 3 2 j r ds hf l a g s ;节支持位的标记,用来描述多个属性 e 1 f 3 2a d d rs ha d d r ;该节在内存中的位置 e l f 3 2 一o f f s h _ o f f s e t ;该节的字节偏移量( 从文件开始计数) e l f 3 2w o r ds hs i z e ;该节的字节大小: e 1 f 3 2w o r ds hl i n k ;节头表的索引连接 e l f 3 2w o r ds hi n f o ;额外的信息,它的解释依据该节的类型 e l f 3 2 j v o r ds h _ a d d r a l i g n ;节的地址对齐的约束。 e l f 3 2w o r ds he 1 1 t s i z e ;木一些节保存着一张固定大小条目的表,类似于符号 表。对于这样一个节来说,该成员给出了每个条目的字节大小。如果该节没有保 存着一张固定大小入口的表,该成员就为0 ) e l f 3 2 一s h d r ; 4 、与调试相关的节 节是e l f 文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新生儿脐静脉导管留置术
- 2026年农村合伙建房合同(1篇)
- 2026年联营合同与投资合同(1篇)
- 温水擦浴的临床应用技巧
- 腾讯大成网汽车频道评选活动方案烦烦优创
- 养殖场鸡群免疫程序标准化方案
- 消渴中医护理健康教育
- 神经系统护理与康复训练
- 护理常见疾病试题
- 2026 塑型进阶杏鲍菇课件
- GB/T 9799-2024金属及其他无机覆盖层钢铁上经过处理的锌电镀层
- DZ∕T 0348-2020 矿产地质勘查规范 菱镁矿、白云岩(正式版)
- 儿童慢性咳嗽的诊治指南
- 产品漏装改善报告
- 悬挑式卸料平台监理实施细则
- 铸件(原材料)材质报告
- 提货申请单表
- 脑与认知科学概论PPT(第2版)完整全套教学课件
- 【初中化学】中国化学家-李寿恒
- 镭雕机作业指导书
- 生管指导手册(什么是PMC)
评论
0/150
提交评论