(计算机应用技术专业论文)适用于soc系统级设计的平台集成技术的初步研究.pdf_第1页
(计算机应用技术专业论文)适用于soc系统级设计的平台集成技术的初步研究.pdf_第2页
(计算机应用技术专业论文)适用于soc系统级设计的平台集成技术的初步研究.pdf_第3页
(计算机应用技术专业论文)适用于soc系统级设计的平台集成技术的初步研究.pdf_第4页
(计算机应用技术专业论文)适用于soc系统级设计的平台集成技术的初步研究.pdf_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

华北电力大学 ( 北京)硕士学位论文 摘要 随着微电子技术的发展, s o c ( s y s t e m o n c h i p )正日 益成为 i c( 工 n t e g r a t e d c i r c u i t )设计的主流。s o c系统级设计方法也正逐渐取代传统的 i c设计方法。本 课题正是在这样的背景下提出的。 课题的主要工作是建立一个初步的s o c 系统级设计的支撑环境。 首先分析了g d b 的源代码,了解 g d b 的工作过程和调试机制。然后以g d b 为参考模型,进行仿真平 台的调试器设计。最后用 s y s t e m c( 基于 c + + 类库的系统级建模平台)对指令集仿 真器 工 s s 进行封装,并把调试器g d b 无缝地嵌入到该仿真环境中,形成一个软件仿 真平台。该实验平台是进行 s o c 系统级设计的最基本条件,也是进行基础的s o c 研 究的起点。 关键词:s o c , g d b , s y s t e m c ,系统级设计,仿真平台 abs tract wi t h d e v e l o p me n t o f m i c r o - e l e c t r o n i c s t e c h n o l o g y , s o c ( s y s t e m o n c h i p ) i n c r e a s i n g l y b e c o m i n g t h e m a i n s t r e a m o f i c a l s o r e p l a c i n g t r a d i t i o n a l i c d e s i g n m e t h o d d e s i g n . s o c s y s t e m- l e v e l d e s i g n m e t h o d . i s i s g r a d u a l l y . t h i s p r o j e c t i s p u t f o r w a r d u n d e r t h i s b a c k th e g r o u n d . ma i n t a s k o f t h i s p r o j e c t i s t o b u i l d s y s t e m - l e v e l d e s i g n . f i r s t l y , t h e p a p e r a n a l y z e s g d b e l e me n t a ry e n v i r o n me n t f o r s o c s o u r c e c o d e s , a n d k n o w s i t s wo r k p r o c e d u r e a n d d e b u g g i n g m e c h a n i s m . t h e n d e s i g n d e b u g g e r o f t h e s i m u l a t i o n p l a t f o r m o n t h e b a s e o f g d b . f i n a l l y , e n c a p s u l a t e i s s ( i n s t r u c t i o n s e t s i m u l a t i o n ) u s i n g s y s t e m c ( a s y s t e m- l e v e lm o d e l i n g p l a t f o r m b a s e d e n v i r o n me n t , t h e n f o r m agdb i n t o t h i s s i mu l a t i o n e x p e r i m e n t p l a t f o r m i s t h e o n c + + c l a s s l i b r a ry) , a n d e m b e d s o ft w a r e s i m u l a t i o n p l a t f o r m. t h i s m o s t e l e m e n t a ry t o s o c s y s t e m - l e v e l d e s i g n a n d r e s e a r c h . l i u l i j u a n ( c o m p u t e r a p p l i c a t i o n a n d t e c h n o l o g y ) d i r e c t e d b y p r o f . s h a o z u o z h i k e y wor d s : s o c , g d b , s y s t e m c , s y s t e m l e v e l d e s i g n , s i mu l a t i o n p l a t f o r m 华北电力大学 ( 北京)硕士学位论文 第一章绪论 随着信息产业的飞速发展,系统设计者为了追求更高性能、更短面市时间和更 低制造成本,以便更好地适应科技发展和市场竞争的需要,他们正将完整的系统功 能集成到单芯片中,从而使 i c( 集成电路)技术发生了翻天覆地的变化。以软硬件 协同设计、i p( 知识产权)核、超深亚微米技术为支撑的 s o c( 系统芯片)正成为 超大规模集成电路的发展趋势和主流技术。 s o c 是 i c 设计的发展趋势,仿真与验证则是s o c 设计中最复杂、最耗时的环节 之一。一个性能优良的仿真环境将会给s o c 设计带来极大的便利:它可以缩短研发 周期,节省成本,从而加快产品的上市时间。本文将重点描述一个基于a r m 的软件 仿真环境 。 1 . 1 课题背景 纵观半导体产业的发展,基本每隔2 0 年就有一次大的变革。在从6 0 年代开始 的第一次变革中,i c 公司从系统公司中分离出来;而从8 0 年代开始的第二次变革 诞生了 a s i c( 专用集成电路) ,使门阵列和标准单元设计技术成熟,从而出现了以 设计为主的f a b l e s s i c 公司和以加t - 为主的f o u n d r y 公司:2 0 0 0 年前后,得益于 半导体工艺技术的不断发展,可集成的晶体管数目可达到一千万个,采用一般的 a s 工 c 设计方法实现起来比较困难, 于是基于 i p 复用的设计方法被提出, i p 提供商、 芯片 协议公司 等新兴的 公司 应运 而生。 5 1 国际上 i c 设计的主流已 经发展到s o c 时代,它是微电子芯片技术进一步发展的必 然方向。s o c系统将原来由许多芯片完成的功能,集中到一块芯片中完成。但s o c 不是 各个芯片功能的简单叠加, 而是从整个系统的功能和性能出发, 用软硬协同设计和验证 方法, 利用i p 复用及深亚微米技术,在一个芯片上实现复杂的功能。以功能设计为基 础的传统设计方法显然已经不能胜任s o c 的设计。所以开展面向s o c 的新一代集成 电路设计方法学研究对于推动集成电路的发展是至关重要的。 s o c 设计观念与传统设计观念完全不同。在s o c 设计中,设计者面对的不再是电 路芯片;而是能实现设计功能的 i p模块库。s o c设计不能一切从头开始,要将设计建 立在较高的基础之上,利用己有的i p芯核进行设计重用。建立在i p芯核基础上的系统 级芯片设计技术,使设计方法从传统的电路级设计转向系统级设计。 电路级设计本质上是基于门级描述的单层次设计, 设计的所有工作( 包括设计输入, 仿真和分析, 设计修改等) 都是在基本逻辑门这一层次上进行的。 电路级的e d a ( 电子设 计自 动化) 技术使电子工程师在实际的电子系统产生前, 就可以全面的了解系统的功能 特性和物理特性, 从而将开发风险消灭在设计阶段, 缩短了开发时间, 降低了开发成本。 1 华北电力大学 ( 北京)硕士学位论文 但随着产品的复杂程度加深,更为了适应科技发展和市场竞争的需要,系统设计者不断 寻求更短的上市时间、更高的性能和更低的成本, 显然传统的电路级设计方法已不能适 应这种新的形势,为此引入了一种高层次的电子设计方法- 一系统级的设计方法。 系统级设计是一种 “ 概念驱动式”设计,设计人员不是通过门级原理图描述电路, 而是针对设计目 标进行功能描述,由于摆脱了电路细节的束缚, 设计人员可以把精力集 中于创造性的方案与概念构思上,一旦这些概念构思以高层次描述的形式输入计算机 后,e d a 系统就能以规则驱动的方式自 动完成整个设计。这样,新的概念得以 迅速有效 的成为产品,大大缩短了产品的研制周期。不仅如此,高层次设计只是定义系统的行为 特性,可以不涉及实现工艺, 在厂家综合库的支持下,利用综合优化工具可以将高层次 描 述 转 换 成 针 对 某 种 工 艺 优 化 的 网 表 , 工 艺 转 化 变 得 轻 松 容 易 。 is ) 由于i p 是s o c 设计的基础,所以,必须采用相应的e d a 软件才能完成设计技术。 如果没有高效便利的设计工具, s o c 设计就是一句空话。 回顾电子设计技术的发展历史, 可 将i c 设 计 方 法 大 体 分 为 三 个 阶 段 !7 1 , 如 图1 - 2 所 示 . 系 统典 成芯片 一一 一 超 大 现 摸 复 成 电 路_ _ 几反、 甚 大规徽匆成电路 大规徽 负成电路 o mm 1x 小说擞典成电路 - 针脚机翩助设 计 卜一-卜-一叫卜一洲一 里幻, . 的灼, 0, . 甘1 鱿泊2 以幻2 0 1 0 图1 - 2 工 c 设计方法的发展 f d a 技术的每一次进步, 都引起了设计层次上的一个飞跃。 e d a 技术是电子设计领域 的一场革命,目 前正处于高速发展阶段,每年都有新的e d a 工具问世,然而,我国e d a 技术的应用水平长期落后于发达国家。 综上所述,尽早开展s o c 设计方法学这一领域的研究是至关重要的。 1 . 2 国内外发展成果及动态 随着半导体工艺尺寸继续微细化,i c 设计规模和复杂性不断提高,同时要求产 品成本继续减小,上市时间继续缩短,所有这些,都给当前电子设计提出了严峻的 挑战。 现在有些 i c 制造商如l s i l o g i c , v l s i , i b m 等都在开发自己的设计工具。实 际上开发新的工具对芯片制造商是非常困难的,他们需要和主要的e d a 供应商保持 合作。目 前各主要的e d a 供应商,如c a d e n c e , s y n o p s y s , a v a n t 等都在加紧做适 华北电力大学 ( 北京)硕士学位论文 用于 s o c设计的i具开发,而且取得一定成果。s y n o p s y s的 c o c e n t r i c s y s t e m s t u d i o , 可成功用于系统级的设计: c a d e n c e 的v c c ( v i r t u a l c o m p o n e n t c o - d e s i g n ) 工具提供了一个s o c 系统开发的集成环境,等等。他们都把能否开发出高效、实用 的s o c e d a 工具看作下一步是否能占领市场的关键。 随着芯片设计复杂程度的提高, 在系统芯片的各个设计中, 找到一种能同时实现较 高层次的软件和硬件描述的系统级设计语言, 可大大提高设计效率。 s y s t e m c基于c 十 、 类库的系统级建模平台)正是在这种情况下,由s y n o p s y s 公司和c o w a r e 公司积极响 应目 前各方对系统级设计语言的需求而合作开发的. s y s t e m c的出现给 s o c系统级设计提供了便利的手段。s y s t e m c是一种新的建 模语言,它的源代码在网上公开,用户可以免费下载。s y s t e m c由于具有良 好的软 硬件协同设计能力,因此在提出短短3 年多的时间里,得到了越来越多的e d a 公司 和半导体厂商的支持,显示出了强大的生命力。2 0 0 3 年6 月c o w a r e 公司发布了特别 为s y s t e m c 创建的第一款系统级设计和验证工具一 c o n v e r g e n s c s y s t e m d e s i g n e r , 它 可提供架构化设计、仿真和分析功能。 早在 1 9 6 5年,我国的集成电路就开始起步,而此时世界上最著名的芯片制造商 工 n t e l 还没有成立。但由 于体制等众多原因,我国在这一领域与国外差距越来越大。从 市场份额来看, 2 0 0 2 年国产芯片年销售额为1 3 0 . 3 亿元,占世界芯片产量的0 . 7 % 左右; 从技术上看, 总体上还有两代左右的差距。 2 0 0 2 年, 我国芯片自 给率才2 5 % ,其它7 5 % 均需要进口, 特别是技术含量高的产品,基本上依靠进口。 但这种局面正在发生着巨大的变化,近两年来大陆集成电路产业得到迅速发 展。我国相继开发出 “ 方舟”、 “ 龙芯”、“ 众志” 等具有高端技术和自 主知识产权 的 “ 中国芯”。2 0 0 3 年,全国首家s o c 设计平台一 p a rt e r re在哈工大微电子中心搭建成 功,它是目 前国内最先进的系统级芯片设计平台。并于2 0 0 3 年 5 月中旬参与完成世界 第一块3 2 位s 6 9 8 处理器芯片成功研制。这款内嵌6 4 位浮点运算器是世界上第一个登 上s p a r c v 8 系列嵌入式处理器芯片领域制高点的产品。 这标志我国不但拥有微处理的研 究与设计的自 主知识产权,同时也为建设中国硅谷找到了核心的系统设计平台,“ 中国 芯”家族将会迎来更多更优秀的新成员。 芯片产业在我国可谓前景诱人, 专家预测, 2 0 1 0 年我国芯片总需求将达到5 0 0 亿美 元,成为全球最大的集成电路市场之一, 到那时, 每年进口集成电路将从现在的2 0 1 亿 元,上升到6 0 0 亿元,相当于现有生产能力的2 0 倍。 信息产业部 “ 十五”发展规划中的目标是:届时国产 i c产量将满足国内市场 需求的5 0 %,世界市场的5 %。这个计划如能实现,中国将成为世界半导体业重镇! 国家有关方面己经认识到s o c 技术对未来电子行业发展的深刻影响。国家自然科学 基金和 8 6 3 计划近年来己经强调了对s o c 芯片研制及相关技术的支持。在这样的背 景下s o c 系统级设计技术也逐渐受到国内有关学者的关注。 3 华北电力大学 ( 北京)硕士学位论文 1 . 3 课题研究的主要内容 系统级设计是整个s o c 设计流程中一个关键的环节,它是把一个应用当作一个 并 行 的 通 信 任 务 系 统 的 设 计 。 系 统 级 设 计 19 1 可 以 划 分 为 行 为 和 结 构 两 个 层 面 来 深 化 设计。行为规定了系统实现的目标,而结构则说明如何实现这个目标,结构包括软 件和硬件。将行为映射到结构就组成了一个完整的系统。映射之后,一部分系统功 能 ( 行为)用软件实现,一部分系统功能用硬件实现。这就是软硬件协同设计所要 处理的问题。下图表明了这种行为结构的设计方法: 图 1 - 3 系统级设计的方法流程 系统级设计主要涉及建模、i p 设计重用、软硬件协同设计、系统级综合和描述 语言等方面的研究。 为了适应 s o c的发展,系统芯片设计的抽象层次已经开始上升到系统级设计。 原来的系统级建模一般为 b c a( 总线周期精确)建模,近来 t l m( 传输级建模)正 广泛被提及。在t l m中,计算部件间的通信细节与执行细节分离,通信通过调用通 道模块的接口函数来建模,通信和计算中的不必要细节则被隐藏。t l m可以加速仿 真时间,并在较高抽象级实现开发和验证间的切换。但是目前t l m 还没有被很好的 解释,这样不仅预定义的t l m 不能被简单地重用,而且在现有的设计实践中,如系 统 综 合、 基 于 平 台 的 设 计 等, t l m 的 使 用 也 不 能 被 系 统 地 发 展 。 1 4 7 所谓 i p 核,实际上是一个经过验证的i c 设计.这样在设计时,就可以把注意 力集中于整个系统, 而不必考虑各个模块的正确性和性能。 i p 核复用涉及多个方面 的问题,如法律和商业方面的问题、i p 核标准化、设计和程序、测试策略、设计的 存储和检索以及设计方法等。面向 s o c的 i p核复用决不是简单的堆砌.在使用过 华北电力大学 ( 北京)硕士学位论文 程中不但要考虑 i p 核的功能,更要使它融入芯片。这样如何设计i p 模块,使其可 重复使用,可映射到不同的工艺,以及如何把 i p模块转化成可重复使用的形式就 显得尤为重要。 在传统的设计方法中,软件和硬件是分开来设计的,在硬件设计完成并生产出 样片后才能设计调试软件。这样当设计中有某些错误发生,就要付出很大的代价。 这就要求在设计初期检查软件和硬件的接口错误,同时验证软件和硬件部分的功能 是否正确。因此在系统级采用软硬件协同设计技术可以大大缩短设计周期。软硬件 协 同 设 计 的 理 论 体 系 包 括 2 11 : 系 统 任 务 描 述 、 软 硬 件 划 分 、 软 硬 件 协 同 设 计 、 软 硬 件 协 同验证以及与系统相关的低功耗设计、可测试性设计等。 系 统 级 综 合的 任 务 2 9 是 以 特 定 的 系 统 功 能 描 述 和 代 价 约 束为 输 入, 以 给 定 的 i p 库为基础,通过对 i p 模块群的选取和任务分配、调度,在满足约束和实现功能 的同时,以代价最优的系统构架为输出。在系统级进行综合和优化,可以缩短设计 周期,提高设计效率。 为了满足s o c 设计的要求, 一种能够同时实现较高层次的软件和硬件描述的系统 级设计语言,可以大大提高设计效率。 s y s t e m c 正是这样一种适用于系统级设计的硬件 描述语言。它支持门级、 r t l 级、系统级等各个抽象层次上的硬件的建模和仿真, 而且 支持软硬件协同设计,能够描述由 硬件和软件组成的复杂系统结构,支持在c + + 环境下 对硬件、 软件和接口的描述。 这样就减少了 采用多种语言进行系统级芯片设计所产生的 设计复杂度,缩短了设计周期。 虽然在s o c 系统级设计这个领域要研究的技术很多,但研究这些技术的基础是 要有一个仿真支撑环境,它由编译器和带调试器的指令集仿真器构成。本课题的主 要工作就是要搭建这样一个初步的仿真支撑环境,并在此基础上形成一个基础的实 验平台。该实验平台可以提供一个初步的s o c 系统级设计的概念演示。 本课题主要研究以下几方面的内容: 今 分析g d b ( g n u 调试器)的源代码,了解g d b 的工作过程和调试机制。 令 以g d b 为参考模型, 进行仿真平台调试器的设计, 最后用 s y s t e m c 完成i s s ( 指令集仿真器)和调试工具g d b 的封装,形成一个软件仿真环境。 令 分析该仿真环境,提出优化调试过程的虚拟共享内存机制。 1 . 4 课题研究的意义 本课题是在分析当前集成电路的发展趋势,以及其应用需求的基础上提出的, 具有较强的针对性和实用性, 因此, 对于理论研究和实际工程应用都具有重要意义。 s o c系统级设计是一项正在发展中的技术,存在很多需要研究解决的问题。为 了研究s o c 系统级设计中的各相关环节,就要搭建一个基础的支撑环境,最终实现 华北电力大学 ( 北京)硕士学位论文 在该环境中进行s o c 系统级设计。比如,利用现在流行的系统级建模工具s y s t e m c 进行系统建模后,在该实验环境上进行仿真,体验s o c 顶层设计的整个过程,从而 对其有一个基本的认识。这对进一步进行s a c 系统级设计的研究也是很有帮助的。 同样它也可以应用于实际的工程中,利用所提供的这个软件仿真环境进行 s o c 系统级设计,对 s o c 体系结构进行分析,找出错误逻辑,从而提高开发效率,为产 品的上市赢得宝贵的时间。 “ 要发展 s o c ,首先要解决环境问题,然后才做 s o c o 这是很有道理的。 1 . 5 课题的软硬件选择 要搭建一个软件仿真环境,最基本的条件是有一个c p u 和能够运行在该c p u 上 的调试器和编译器。本课题选择a r m 作为硬件仿真对象,这是因为a r m 公司被誉为 世界第一的i p 供应商。 9 0 年代初, a r m 率先推出3 2 位r i s c 微处理器系统芯片s o c 工 p公开授权的概念。 a r m的 i p 授权用户众多, 2 0 0 2 年a r m 将 i p 授权模式带入中国。 可以说, a r m 的1 6 1 3 2 位嵌入式处理器技术是世界上应用最为普遍的微处理器结构。 软件开发环境选择 l i n u x ,这不仅因为l i n u x 有着强大的发展潜力,更因为它 是内核源码公开的,你可以清楚的了解整个操作系统的工作机制,做到知其然,更 知其所以然。调试器选择 g d b 作为参考模型,和g c c 编译器结合使用,因为它们都 是自由软件,这不仅有利于用户更方便地使用的仿真环境,也有助于进行资料查询 和后期的扩展工作。 华北电力大学 ( 北京) 硕士学位论文 第二章g d b 分析 2 . 1 g d b 概述 g d b 是一个g n u 调试工具,是一个受通用公共许可证g p l 保护的自由软件。 g d b 是一个用来调试 c和 c + + 程序的功能强大的调试器。当然,g d b还支持对其它语言 的调试,如 j a v a , p a s c a l , f o r t r a n 等,还包括 g n u 所支持的所有微处理器的汇编 语言。g d b 可以观察程序运行时程序的内部结构和内存的使用情况。具体来讲,g d b 主要有以下功能: 个 执行程序,它可以按照要求随心所欲的运行程序,如连续执行,单步执行 等。 令 设置断点,在调试程序时可以在所指定的调试断点处停止运行。 命 当程序停止运行时,检查此时程序中所发生的情况。 今 动态地改变程序的执行环境。 g d b 是一个源码级的符号调试工具, 为了使g d b正常工作, 必须使程序在编译时 包含调试信息。 在编译时用一 9 选项打开调试选项。 调试信息包含程序里的每个变量 的类型和在可执行文件里的地址映射以及源代码的行号。g d b利用这些信息使源代 码和机器码相关联。 2 . 2 g d 日 分析的结果 g d b根据运行环境可以分为两种方式:一是本地运行方式,这种情况 g d b和被 调试的程序都运行在同一指令系统的宿主机上;二是交叉运行方式,g d b运行在主 机 ( h o s t )上,而被调试程序则运行在目标机 ( t a r g e t )上。交叉调试方式又可划 分成内 嵌式交叉调试和远程交叉调试方式。内 嵌式调试方式g d b 和 t a r g e t 一般运 行在同一机器上,只是被调试程序运行在一个仿真目标环境中,而远程调试方式它 们一般运行在两台不同的机器上,一台机器运行 g d b ,而另一台机器 ( 通常为目标 开发板)则运行目标系统,被调试程序运行在其上。 本文仅分析交叉运行方式中的内嵌式交叉调试方式,因为课题所要改造的就是 这种方式。 2 . 2 . 1 g d b内部结构 g d b是一个交互的工具,它的首要任务是和程序员进行交互工作。当程序员在 键盘上敲入命令,g d b 能够对此做出响应,并把结果输出到显示器,告知程序员。 g d b是支持符号调试的工具,它的一个主要任务就是符号处理,这就与目 标文 一一一一一一一一一止型些垄壁 ( o r s文 件格式息息相关。g d b支持的目 标文件格式有很多种,现在最常用的文件格式为 e l f ( e x e c u t a b l e a n d l i n k i n g f o r m a t ) ,另外还有 a . o u t , c o f f , e c o f f , x c o f f , p e , s o m 等。在 g d b中,a r m 所支持的目标文件格式是e l f ,所以就以e l f目标文件 格式为例来说明g d b 对符号的处理。 目标文件主要用于程序链接 ( 编译程序)和程序执行 ( 运行程序) 。因此目 标 文件格式提供了两种与此对应的视图来反映这种不同的应用需要。 l i n k i n g v i e se x e c u t i o n v i e s 曰下 头 程序头表 ( 可选) s e c t i o n t s e c t i o n 2 s e c t i o n 头表 e l f 头 程序头表 s e g m e n t 1 s e g m e n t 2 s e c t i o n 头表 ( 可选) 图2 - 1 目 标文件组织 e l f头驻留在文件的开始,它用于描述整个文件的组织结构。它由 5 2个字节 构成,主要用于说明文件类型、目 标体系结构、虚拟入口地址以及和调试符号相关 的信息。具体来说,按照先后顺序分别是,文件标识符、目 标文件类型、目 标体系 结构、目标文件版本信息、虚拟地址入口、程序头表文件偏移量、s e c t i o n 头表文件 偏移量、特定处理器标识、e l f头的大小、程序头表入口的大小、程序头表入口数 目、s e c t i o n头表入口大小、s e c t i o n头表入口数目 和 s e c t i o n头字符串表索引。其中 文件标识符主要用于说明识别文件的 “ 魔术数” ,是e l f文件还是 c o f f等别的文 件格式的文件,目 标文件是3 2 位的还是6 4 位的,是大端序还是小端序等信息;目 标文件类型主要有重定位文件、可执行文件和共享目 标文件:虚拟地址入口是程序 开始执行的地址。 s e c t i o n中保存的是各种调试符号信息, 如指令、 数据、 符号表和重定位信息等。 g d b 有多种调试信息格式, 像开始的s t a b s , c o f f , m i p s d e b u g , d w a r f 1 , d w a r f 2 , s o m , 最新的调试信息格式为d w a r f 3 。本文要研究的g d b 所使用的调试信息格式为 d w a r f 2 。根据目标文件的格式不同,目标文件中所包含的s e c t i o n 的数日 和s e c t i o n 的名字也不相同。e l f 文件中主要用到的s e c t i o n 有: 命 . t e x t 节:包括构成程序的机器指令。 + . r o d a t a 节: 包括程序的只读数据, 也包括一些由r u n t i m e 库定义的字符串 8 一一一一一一一一一止p a r g it )c * ( i m 和常量数据。 o- . d a t a 节:包括程序的初始化全局变量和一些 r u n t i m e 库的声明。 令 . c t o r s 和. d t o r s 节:全局c 十 十 目 标构造程序和解除程序的函数指针列表。 令 . s b s s 和. b s s 节:程序未被初始化的全局变量。 个 . d e b u g _ a r a n g e s、 . d e b u g _ p u b n a m e s、 . d e b u g _ i n f o、 . d e b u g _ a b b r e v 和 d e b u g _ l i n e 节:符号调试信息。 + . s h s t r t a b节:各 s e c t i o n的名字。 4 . s t r t a b 节:符号名的字符串表。 令 . s y m t a b 节:符号表,它包括需定位和重定位的程序符号信息。 g d b调试程序正是通过这些 s e c t i o n来处理的,对 s e c t i o n的分析处理是由g d b 提供的b f d ( b i n a r y f i l e d e s c r i p t o r ) 库来完成的。 b f d 是g d b 的一个支持库, 它主要在以下四个方面向g d b 提供支持:1 ) 它可用 来鉴别文件类型是可执行文件还是内核文件。 2 ) 访问文件的节, b f d 通过分析文件 的头来判定文件名、虚拟地址、文件大小及文件中所有节的文件定位。g d b只需简 单的调用 b f d来读写文件的各个节。3 )提供专门的内核文件支持,如果程序执行 错误, 则b f d 根据c o r e 文件判定相应的错误信息。 4 ) 定位符号信息, g d b 使用b f d 的内部接口来判定是否找到了可执行文件或符号文件的符号信息.b f d并不理解调 试符号,由g d b 来处理符号信息的读取,但g d b 需要根据b f d的储存信息来找到符 号、字符串表等信息。 g d b是如何利用目标文件信息来调试程序的呢?本文从两个不同的方面来介绍 g d b的调试机制,一是从功能结构上,二是从 g d b 工作流程上。 从功能结构方面分析 g d b 整个g d b 基本可以划分为g d b 命令处理模块 ( g d b 模块) 、g d b 命令处理和 i s s 之间的接口模块 ( s i m模块) 、i s s模块三部分。g d b命令处理模块又可细分为用户 界面、 命令处理模块、 g d b 命令处理与s i m模块之间的接口( g d b s i m模块) 。 用图表 示如下: 图2 - 2 g d b 功能结构图 9 华北电力大学 ( 北京)硕士学位论文 用户界面主要负责接收用户发出的命令,并对命令进行解释,转向其对应的命 令处理函数;命令处理模块主要负责对各命令进行分析处理,如果命令和目标处理 有关, 则转向g d b s i m接口 模块; g d b s i m模块主要是g d b 模块和s i m模块之间的 接 口; s i m模块是仿真器的接口模块, 这也本文分析和改造的重点; i s s 模块是某指定 处理器的指令集仿真器。 从工作流程上分析 g d b g d b 有两种启动方式, 一种是带被调试文件启动, 像$ h o m e g d b f i l e n a m e , 另一 种是不带被调试文件启动,像$ h o m e g d b , 这就需用 f i l e 命令打开被调试文件, 读 入符号信息。在g d b 进入调试界面之前,首先g d b 要做一系列的初始化工作,最主 要的是对g d b 命令集进行初始化,使命令指向其相应的函数处理位置,为将来的命 令处理做准备。 当用户从键盘敲入命令, g d b 首先收集命令字符, 把它们进行组合, 然后在g d b 命令集中查找该命令,如果没有找到,则显示错误信息;如果找到该命令,则根据 g d b对命令的初始化,转向相应的命令处理函数.下面就简单说明一下 g d b的基本 调试过程。 带文件启动g d b 5 h o m味d h l l l e n s m e 不带 文件 启动g d b s h o m c 抢曲 读符号信息 6l e目r n . me 与目 标仿真器建立连接 t e r 砂亡 口 m 装载程序到内 存 , 八. d 开 始调试执行程序 . . 程序执行调试完毕 q . 汾 图2 - 3 g d b 工作流程图 1 0 华北电力大学 ( 北京)硕士学位论文 第一步: 用fi l e 命令打开一个被调试文件( 假设g d b 不带被调试文件启动) , f i l e 命令的主要任务是读入符号表,即把符号信息储存在b f d 库中。 g d b是符号调试器,符号处理理所当然就是 g d b操作的一个重要部分,这些调 试符号信息包括程序指令、变量、函数、数据类型、原码和机器码之间的对应关系 等。 g d b 一般包含三种类型的符号表: 4. 最小符号表 ( m i n i m a l s y m t a b s ) 。它包括符号名、符号的值 ( 在 e l f目标 文件中该符号的地址) 、符号类型和该符号所属节等简单信息。 令 部分符号表 ( p a r t i a l s y m t a b s ) 。它包括符号名、符号的值、符号类型、 名字空间码、符号地址类和该符号所属节等信息。 令 完整符号表 ( f u l l s y m t a b s ) 。它包含符号和地址的主要信息,符号名、符 号的值、符号类型、名字空间码、符号地址类、值的数据类型、定义的行 号信息和该符号所属节等信息. 这三种类型的符号表之间的区别主要在于最小符号表包含的信息最少,用于符 号的快速查找,部分符号表比最小符号表多了符号地址类,用于指出指令地址的范 围。当要读完整符号表的相关的信息时,它可以提供足够的信息来获取要得到的信 息。完整符号表又比部分符号表多了行号信息说明.在调试程序时,行号信息用来 定位被调试程序的e l f 文件和源文件之间的关系。 这三种符号表都有各自的结构信息,但它们又共用一个通用的结构信息。这个 通用结构说明如下: s t r u c t g e n e r a l _ s y m b o l _ i n f o c h a r * n a m e ;/符号的 名字 u n i o n/ / 符号的值 l o n g i v a l u e : s t r u c t b l o c k * b l o c k ; c h a r * b y t e s : c o r e a d d r a d d r e s s ; / / 在e l f目标文件中该符号的地址 s t r u c t s y m b o l * c h a i n ; v a l u e ; e n u m l a n g u a g e l a n g u a g e b y t e _ b i t f i e l d ; / / 记录源文件使用的语言 s h o r t s e c t i o n ; / / 这个符号表属于哪个节 a s e c t i o n * b f d s e c t i o n ; / / 和这个符号表相关的b f d 节 华北电力大学 ( 北京)硕士学位论文 现在就来说明一下g d b 是如何读取符号信息的。 在用 f i l e 命令读取符号内容时,只建立其中的两个符号表- 一最小符号表和部 分符号表。如果要对符号进行分析,设置或显示符号相应的内容,则要把部分符号 表转换成完整符号表。 在读入符号信息的过程中, g d b 要建立两个文件, 一个e x e c 文件, 一个s y m b o l 文件。e x e c文件是一个 e x e c目 标,说明当前操作的是一个可执行文件,建立后把 它放入g d b 的目标栈栈顶 g d b 定义的一个软栈,该栈包含的目标类型主要有e x e c ( 本地可执行文件) ,s i m( 内嵌仿真器) ,r e m o t e( 远程串行目 标) ) 。s y m b o l文件 是 g d b 用来读取符号的文件,它包含g d b 的正被调试的程序。因为g d b 是从该文件 中读取符号的,所以下面着重分析该符号文件是如何建立的。 利用b f d 库来创建、 打开一个新的s y m b o l 文件, 并对其进行初始化。 b f d 根据 文件头来判别文件的类型是否为e l f目 标格式,文件头中的e _ i d e n t 1 6 的前四个 字节保存的是” m a g i c n u m b e r , 它用来鉴别文件是否为e l f目 标文件,如果是,则 它们的值应分别为 o x 7 f , e , 1 ., , f 。然后根据该判别来定位一系列的符号读函 数,并读取符号。 在开始读一个新的符号文件之前, 首先调用函数x y z _ s y m f i l e _ i n i t 0 进行符号 文件初始化,清除己经读入的符号文件状态,然后开始准备读入新的符号文件。调 用函数x y z _ s y m f i l e _ r e a d ( ) 把符号从符号文件读到部分符号表中。 部分符号表是通 过快速扫描可执行文件的调试信息而构建的。在把符号从符号文件读到部分符号表 的过程,会建立一个最小符号表,它记录了所有定义的全局符号的一些基本信息, 用于快速查找符号。 第二步:用t a r g e t 命令建立和仿真器的连接. t a r g e t 是一个命令前缀, 在t a r g e t 命令类中, 常用到是r e m o t e 和s i m 两个命 令。r e m o t e 用于远程交叉调试的连接,g d b 通过串行线或网络端口来建立和目 标之 im的通信连接,并通过g d b 远程串行协议 ( g d b r e m o t e s e r i a l p r o t o c o l )来处理 g d b 和目 标之间的通信: s i m 用于内嵌交叉调试的连接, g d b 和目 标运行在同一台宿 主机上,但 g d b 运行在本地指令系统环境,而被调试程序运行在一个内嵌的目标仿 真环境中。在 t a r g e t 命令类中只建立 g d b和目 标仿真环境的连接,并初始化目 标 仿真环境。 第三步:用 l o a d 命令装载被调试程序到目 标中。 用l o a d 命令装载程序文件, 也就是装载程序文件中的相应节。 e l f 程序文件共 有 1 3个节,没必要把它们全部装载到内存中,要装载的那些节即是可执行文件中 的段,这就节省了内存空间。 第四步:敲入r u n 开始程序的调试运行。 在目标仿真器开始执行程序前, 要做一些准备工作,如检查程序装入标志,看 1 2 华北电力大学 ( 北京)硕士学位论文 是否有程序装入到内存中,关闭前一个正被执行的程序,删除己 插入的断点等。接 着就可以执行被调试程序了。g d b首先创建一个新的进程,如果设置有断点,则把 断点插入到内存相应的位置,当目 标仿真器遇到断点时,停止执行,并向g d b 返回 一个值,告知程序停止运行的原因,并把控制权交还给g d b . g d b 根据传回的信息, 在屏幕上打印相应的处理信息,删除断点,并把断点处的指令替换成原来程序的指 令。如果没有断点,程序则连续执行,直到程序运行完毕或因外部异常而停止,同 时把控制权交还给g d b . 第五步:敲入q u i t 命令,退出g d b 调试。 在了解了g d b 的基本工作流程之后, 现在可以开始调试程序。调试程序主要利 用命令b r e a k ( 设置断点) 、 s t e p ( 单步执行一条语句) 、 s t e p i ( 单步执行一条指令) 、 n e x t( 连续执行若干指令)及c o n t i n u e( 连续执行)等命令来完成。 b r e a k命令用于设置断点,设断点的方法主要有三种:b r e a k f u n c t i o n( 在函 数的入口处设置断点) 、b r e a k l i n e n u m( 在源文件的某指定行设置断点)和 b r e a k * a d d r e s s( 在指定的地址处设置断点) 。设置断点的过程并不是在被调试的目标文 件中插入断点,它只是把断点保存在一个断点链表中,用于将来调试执行程序中的 断点查询。 当程序开始调试执行 ( 如敲入r u n 命令) , g d b 会先检查是否设置了断点, 如果 有,则先保存原有指令,然后在该位置写入断点指令 ( e 7 f f d e f e ) 。当程序遇到断 点指令,停止运行. 下次接着调试执行程序时 ( 如敲入 s t e p ) ,要从当前停止的地方开始执行。在 执行单步操作之前,要把插入的断点指令替换为原来的指令,并把 工 s s结构中的 e n d c o n d i t i o n 属性置0 ,该属性表示程序停止运行的原因.如果其值为 1 则表示程 序遇到断点停止运行,否则表示程序正常退出或单步执行指令。在单步执行一条语 句时,g d b会先判断该语句的指令地址范围,如果正执行的指令在该范围之内,则 继续执行下一条指令,否则单步执行完毕,把控制权返还给 g d b 。如果敲入的是 c o n t i n u e命令,则在连续执行程序之前,要先走一个单步 ( 一条指令) ,然后才开 始连续运行,直到遇到新的断点或程序执行完毕,把控制权交还给 g d b 。调试过程 可以用下面的流程图表示: 华北电力大学 ( 北京)硕士学位论文 图2 - 4 调试执行流程 在分析了g d b 的调试执行过程后,那么这些调试命令是如何实现g d b 和i s s 间 的信息传递呢?g d b 和 工 s s 之间的通信是通过一个 s i m 接口模块实现的, 本文以a r m 仿真器为例来说明 来实现数据的传递 在s i m 模块和i s s 模块之间通过a r m 仿真器中定义的一个结构 下面是该结构的部分描述说明: s t r u c t a r m u l s t a t e a r m w o r d e m u l a t e ; / / 开始和停止仿真

温馨提示

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

评论

0/150

提交评论