(计算机应用技术专业论文)基于仿真开发环境的嵌入式调试的研究与实现.pdf_第1页
(计算机应用技术专业论文)基于仿真开发环境的嵌入式调试的研究与实现.pdf_第2页
(计算机应用技术专业论文)基于仿真开发环境的嵌入式调试的研究与实现.pdf_第3页
(计算机应用技术专业论文)基于仿真开发环境的嵌入式调试的研究与实现.pdf_第4页
(计算机应用技术专业论文)基于仿真开发环境的嵌入式调试的研究与实现.pdf_第5页
已阅读5页,还剩77页未读 继续免费阅读

(计算机应用技术专业论文)基于仿真开发环境的嵌入式调试的研究与实现.pdf.pdf 免费下载

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

文档简介

摘要 摘要 嵌入式系统是当今计算机软件发展的一个热点。随着嵌入式硬件技术的发展, 在嵌入式应用的不断增长以及嵌入式系统复杂性不断提高的情况下,必然对嵌入 式软件的规模和复杂性的要求也不断提高。而在嵌入式软件的研究开发过程中, 调试技术具有十分重要的意义,调试手段的好坏直接影响软件开发的效率和质量。 调试技术和手段有基于硬件和软件的两大类,它们各有其优缺点。在嵌入式系统 的开发调试过程中,往往需要两种调试手段相辅相成以确保产品质量。目前,基 于仿真开发平台的调试解决方案,却往往存在不能软硬兼顾,调试模型不具扩展 性,调试界面不友好,调试效率较低等诸多问题。 为此,本文首先分析了软件调试技术的两种调试模型和硬件调试技术的几种 调试方式,并对软硬件调试的优缺点进行了对比分析。然后具体研究了仿真开发 平台i s h i l 框架,仿真运行机制和调试系统的工作流程。最后设计并实现了一种基 于仿真开发平台的调试系统。它包含仿真交叉调试和软件o c d 调试,提供友好的 调试界面,使用统一的调试命令接口,可扩展支持多种调试通信协议和不同协议 的调试器。仿真交叉调试子系统根据程序有无操作系统支持,提出了两种调试模 型。宿主机端封装g d b 调试器为核心,目标机端的调试代理与仿真运行环境管理 器协作完成具体调试功能,两者通过r s p 协议进行通信。软件o c d 调试子系统利 用i s h i l 基于信号传递的系统驱动技术和周期精确的时序仿真技术特点,解决了硬 件相关的调试需求。 此设计方案具有支持软硬两方面的调试,可扩展性,界面友好,调试效率高 的特点,对开发仿真调试系统具有一定的参考价值。 关键词:仿真调试,仿真开发平台,软件o c d a b s t r a c t a b s t r a c t e m b e d d e ds y s t e mi saf o c u so fc u r r e n tc o m p u t e rs o f t w a r ed e v e l o p m e n t w i mm e d e v e l o p m e n to f 既n b e d d e dh a r d w a r et e c h n o l o g y ,1 ec o n s t a i l tg r o w t ho f 锄b e d d e d a p p l i c a t i o na i l dt h ec o n s t a n te 1 1 1 1 a i l c e m e n to fe 1 】曲e d d e ds y s t e mc 0 m p l e x 时a r eb o u n dt 0 r e q u nt h es c a l ea n dc o m p l e ) 【i t yo f 锄也e d d e ds o n w a r ct 0i i n p r o v ec o n s t a n y d e :b u g g i i l gt e 咖l i q u ei so fg r e a ts i g n i f i c a n c ei i lt l l er e s e a r 6 ha 1 1 dd e v e l o p m e n tp r o c e s so f 即曲e d d e ds o f t w a r e ,a i l dd e b u g 百n gt o o l sh a v ead i r e c ti n l p a c to nm ee 岱c i e i l c yo f s o 侍w a r cd e v e l o p m e n ta i l dq u a l i 劬d e b u g 舀n gt e c h l l i q u e s 觚dt o o l sa r eb a u s e do n h a r d w a r ea n ds o f t w a r e ,e a c ho fm e mh a si t so w na d v 锄t a g e sa n dd i s 缸t v a n t a g e s i nt 1 1 e p r o c e s so fd e b u g 星面ge n l b e d d e ds y s t e m ,i to r e nr e q u i r e s 俩oc o m p l e m e n t a r ym e a j l so f d e b u g 百n gt o e n s u r et 1 1 eq u a l i t yo fp r o d l l c t s a tp r e s c n t ,t l l ed e b u g 百n gb a s e do n s i m u l a “o nd e v e l o p m e n tp l a t f o m lh a sl o t so fp r o b l e m s ,s u c ha sd e b u g 酉n gt o o l si sn o t c n o u 班,d e b u g 百n gm o d e li sn o ts c a l a b l e ,u 1 1 衔e n d l yd e b u g 百n gi i l t c r f a c e a n di e s s e 硒c i e n td e b u g 西n 辱 t h e r e f o r e ,t 嫩sp a p e r6 r s t l ya 1 1 a l y z e sm e 觚os o 行w a r ed e b u g 西n gm o d e l sa n ds o m e h a r d w a r ed e b u g 百n gt o o i s ,a r l dc o m p a r e sh a r d w a r ed e b u g 西n gw i ms o f 、a r ed e b u g g i n g , t h e i ls t u d i e sm e 五瑚n e w o r ko ft h es i m u l a t i o nd e v e l o p m e n tp 1 a t f o mi s h n ,m e m e c h 疵s mo fs i m u l a t i o na i l d 廿1 ew o r k f l o wo fd e b u gs y s t e n l ,缸a l l yd e s i 印sa i l d i m p l e m e n t sad e b u gs y s t e mb a s e do ns i m u i a t i o nd e v e l o p m e n tp l a t f o r m t h ed e b u g s y s t e m ,i n c l u d i n gs i 舢l a t i o nc r o s sd e b u g 百n ga l l ds i 咖l a t i o no c dd e b u g 百n h a s 衔e n d l yd e b u gi n t e r f a c e ,u s e su r 】匠f i e dd e b u g 百n g 如n c t i o ni n t e r f a c et o b es c a l a b l et o s u p p o r to m e rc o m m 砌c a t i o np r o t o c o l sa r l dd e b u g g e r s s i m u l a t i o no r o s sd e b u g 舀n w h i c hp r e s e n t st w od e b u g 西n gm o d e lb a s e do nw h e m e rp r o c e d u r e sm n so no p e r a t i n g s y s t e m ,e n c a p s u l a t e sg d bd e b u g g e ra sc o r eo fd e b u g g i l l g 舶n ta n dm a l ( e sd e b u g 舀n g a g e n tw o r kb ys i m u l a t i o nr u n t i m ee n v 曲n m e n t t h ed e b u g 舶n ta i l dm ed e b u ga g e n t c o m m u m c a t eu n d e rr s p s i m u l a t i o no c dd e b u g 百n g1 l s e sm ef e a t u r e so fs i 印a l t r a n s m i s s i o nb a s e do nd 矗v i n gt e c l l n o l o g ya 1 1 d c y c l e - a c c u r a t et :i m i n g s i m u l a t i o n t e c l l i l o l o g yt oc o m p l e t eh a i - d w a r e r e l a t i v ed e b u g 百n g t h ed e s i 印,w 址c hh a st 1 1 ea d v a l l t a g eo fs u p p o r t i n gs o f 啊a r e - r e l a t i v ed e b u g 百n g t t a b s 仃a c t a 1 1 dh a r d w a r 争r e l a t i v ed e b u g 西n g ,e x t e n d i b i l i 劬衔e n d l yi n t e r f a c e ,l l i 曲e m c i e n c y d e b u g 西n g ,i sv a l u a b l ef o rm ed e v e l o p m e n to fs i m u l a t i o nd e b u gs y s t 锄 k e y w o r d s : s i m u l a t i o nd e b u g 百n g ,s i m u l a t i o nd e v e l o p m e n tp 1 a t f o 肌,s i m u l a t i o n o c d i i i 图目录 图目录 图2 。1g d b s t l 小调试模型7 图2 2g d b s e r v e r 调试模型8 图2 3c r a s ha n db 啪调试流程图1 2 图2 。4r o mm o l l i t o r 开发过程13 图3 1 嵌入式开发流程:2 0 图3 2 仿真开发环境结构2 1 图3 3 仿真开发平台i s h i l 的体系结构图2 2 图3 4 仿真开发平台集成模型2 3 图3 5 仿真运行环境结构图2 4 图3 6 构件a ,b ,c 信号处理图2 6 图3 7 仿真时钟工作原理图2 7 图3 8 构件连接关系示意图2 8 图3 9 仿真环境运行示意图3 0 图3 1 0 调试系统体系结构图31 图3 1 1 仿真交叉调试流程图3 2 图3 。1 2 软件o c d 调试流程图3 3 图4 1 无系统支持的应用程序调试模型3 5 图4 。2 对有操作系统支持的程序的调试模型3 6 图4 3 典型的一次调试流程4 3 图4 。4 封装类g d b c o m m a i l d 类图4 6 图4 5 单步调试命令的流程4 7 图4 6r s p 数据包格式4 7 图4 7 调试代理的结构5 4 图4 8 调试代理的单步调试命令处理流程5 4 图4 9r s p 通信装包发送流程5 5 图4 1 0s e r i a l b e a l l 的类图5 6 图4 1 1 软件o c d 调试系统结构图5 8 图4 1 2 软件0 c d 调试命令处理流程图6 0 图4 1 3 时序分析处理流程图6 1 图4 1 4 生产者一消费者模型6 2 图5 1 项目管理透视图6 5 图5 - 2 调试系统透视图6 5 图5 3 内存调试视图6 6 图5 4c p u 引脚时序分析视图6 6 表目录 表目录 表2 1 帅e - m f o 彻a t i o n 常用描述符定义表1o 表2 2s y m b 0 1 d e s 嘶p t o r 常用描述符定义表1o 表3 1 构件a 的路由表2 9 表3 2 构件b 的路由表一2 9 表3 3 构件c 的路由表2 9 表3 4 构件d 的路由表2 9 表4 一lg d b 的集成开发环境和图形前端4 2 表4 2r s p 数据读写命令4 9 表4 3r s p 程序控制命令51 表5 1 常用调试方案的比较6 7 v i i 缩略语目录 缩略语目录 英文缩写英文全称 中文释义 c l ic o n s o l ec o m m a n d 1 1 1 t e 印r e t e r 控制台命令解释器 e d ae m u l a t i o nd e b u g a g e n t 仿真调试代理 g d b g n u - d e b u g g e rg n u 调试器 i d e h l t e 铲a t e dd e v e l o pe n v i r o n m e n t集成开发环境 i c e i n c i r c u i te 瑚【u l a t o r在线仿真器 j d tj a v ad e v e l o p m e n tt o o l s j a v a 开发工具集 o c d o n c l l i pd e b u g g e r 片上调试器 r s pr e m o t es e r i a lp r o t o c o l远程串行通信协议 s o c s y s t e l l lo nc h i p 片上系统 s r es i i l l u l a t i o nr u n n i n ge n v i r o n m e n t 仿真运行环境管理器 s w ts t a n d a r dw i ( 1 9 e tt o o l l ( i t标准小部件工具包 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作 及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为 获得电子科技大学或其它教育机构的学位或证书而使用过的材料。与 我一同工作的同志对本研究所做的任何贡献均己在论文中作了明确的 说明并表示谢意。 签名:均够毒 日期:2 0 0 8 年月 日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘, 允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文的全 部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描 等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:却陋导师签名: 日期:2 0 0 8 年月日 第一章引言 1 1 研究背景 第一章引言弟一早 j li 在科技发展日新月异的今天,嵌入式系统的应用越来越广泛,因而对嵌入式 系统软件及硬件都提出了更高的要求。由于嵌入式开发应用在不同的领域,硬件 体系差别很大。不仅存在很多嵌入式系统的处理器,嵌入式系统的外设种类也非 常多。而针对嵌入式系统的开发由于自身硬件资源的有限,因此对软件大小也就 提出更高的要求。随着硬件技术的发展,人们需求的增加,对嵌入式软件的功能, 规模,质量都提出了很高的要求。而且,在嵌入式系统的研发过程中,经常会出 现软硬件的不同步问题导致系统产品上市周期的增加。此时,就需要仿真环境来 确保软硬件的同步开发。 计算机仿真技术是近3 0 年发展起来的一门综合新兴学科。它以控制论、系统 论、相似原理和信息技术为基础,以计算机和各种物理效应设备为工具,借助系 统模型对实际或设想的系统进行动态试验研究的一门综合性技术。仿真的基本思 想是利用物理的或数学的模型来类比模仿现实过程,以寻求对真实过程的认识, 它所遵循的基本原则是相似性原理。计算机仿真则是利用计算机模拟实际系统, 对系统进行分析与研究,以此获得该系统的行为数据,也就是展示真实系统的动 态性能,用计算机对系统进行研究。当真实系统进行实验分析比较困难或代价昂 贵甚至没有可能时,计算机仿真就显示其无可替代的作用【1 】【2 】。 但是,仅有仿真环境还不够,还需要拥有完善的嵌入式软件开发环境及调试 测试平台。作为软件开发过程中必不可少的一个环节,嵌入式软件开发中的调试 与通用软件开发过程中的调试又有所区别。在通用软件开发中,调试器与被调试 的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操 作系统提供的调试接口来控制被调试的进程。而在嵌入式软件开发中,调试时采 用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用 操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统 中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制和访问被 调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。 目前,嵌入式系统开发中常用的调试手段有基于硬件和基于软件的调试系统 1 电子科技大学硕士学位论文 两种,它们都各有其优缺点。比如,基于硬件的调试技术通常需要硬件的支持, 其开发成本相对较高,但调试功能也相对强大,调试效率较高。一般而言,它缺 乏对系统中由操作系统管理的用户进程的调试。而基于软件的调试技术中,则可 能需要对目标程序进行侵入,调试效率较低,而且它一般要求系统提供调试支持 接口,但其移植性和扩展性较好。 1 ,2 国内外研究现状 s k y e y e l m 是一个开源软件项目,它是在i j n l l x 和w i i l d o w s 平台上实现一个纯 软件模拟集成开发环境,模拟常见的嵌入式系统。可以在s k y e ”上运行 l i 肌x ,u c l i n u x 以及u c 0 s i i 等多款嵌入式操作系统和各种系统软件。它是借用 g d b 础n u l a t o r 的接口进行调试。 b o c h s 【4 j 是一个基于l g p l 的开源x 8 6 虚拟机软件。b o c h s 的c p u 指令是完全 自己模拟出来的,这种方式的缺点是速度比较慢,而优点是具有无以伦比的可移 植性。它采用的是自己所特有的调试器。 w h k o n g 【5 j ( 悟空) 是浙大嵌入式软件研发中心从2 0 0 4 年1 0 月开始研发的通 用嵌入式系统模拟器,它支持主流嵌入式处理器体系结构和常见嵌入式系统外部 设备,实现了对嵌入式系统的全系统模拟,可以直接运行嵌入式系统的二进制文 件。同时,悟空提供了调试支持和运行数据收集,为嵌入式开发者提供了完善的 支持。w u k o n g 调试协议采用的兼容r s p 【6 】的特有调试协议,并未充分利用仿真开 发平台的特点,形成一个可扩展,方便建立的软件调试环境框架。 1 3 嵌入式仿真调试系统的提出 在基于软件的调试方面,因为仿真开发平台已经虚拟了相关的硬件设备,它 的调试特性类似于基于硬件的调试手段。跟硬件调试手段一样,它也缺乏内核管 理的信息的感知,需要借助其它工具。在对内核,引导程序,目标机应用程序等 无操作系统支持的程序的调试环境建立中,过程繁琐,且调试的工具种类繁多。 在基于硬件的调试方面,由于仿真开发平台中的设备是通过软件仿真的。很 多仿真开发平台或者由于对硬件的仿真粒度不够,或者由于仿真开发平台在建立 硬件仿真开发板时就已经假设开发板不会出现任何硬件方面的问题,于是无法对 仿真开发平台进行硬件调试。 2 第一章引言 在了解当前嵌入式产品的开发需求和技术现状,确定核心问题和关键技术之 后,本文综合研究嵌入式的调试和仿真开发平台的架构,提出了一种基于嵌入式 仿真开发平台的调试系统。调试系统利用仿真开发平台采用纯软件的方式仿真嵌 入式系统硬件平台的特点,完成软硬件两个方面的调试功能,形成一个可扩展, 效率高,调试方便的系统。 1 4 课题来源和研究内容 本论文来源于国家科技部中小企业创新基金赞助项目,该项目的目标是为嵌 入式系统开发人员提供一个快捷、方便和高效的仿真开发环境。这里的嵌入式系 统是指由高端的嵌入式处理器核如a r m 、m i p s 、p o w e rp c 等和外围设备控制器 组成的s o c ( s y s t e i i lo nc l l i p ) 应用系统。其基本思想是以构件库的方式建立目标平台 的仿真环境,将编译好的目标平台程序直接下载到仿真目标板,通过仿真开发平 台对目标平台程序的指令进行解释,在仿真开发平台上完成程序的调试和执行, 达到脱离真实的硬件系统,在普通台式机上完成嵌入式软件开发的目的。本人在 项目中主要负责基于仿真开发平台的调试环境的设计与实现。 本文对嵌入式软硬件的调试进行了深入的研究,从构建嵌入式仿真开发平台 的框架着手,设计并实现了基于仿真开发平台的嵌入式软硬件调试系统,用于嵌 入式开发的调试。 论文的主要内容包括: 基本概念的学习与研究:通过大量阅读相关文献,对调试原理进行了阐述, 了解调试在嵌入式开发中的重要意义。 研究了软件调试技术的两种调试模型和硬件调试技术的常见调试工具,并 对软硬件调试技术的优缺点进行了对比分析。 研究仿真开发平台的架构和调试系统在平台中所处的位置以及调试系统 如何与其它子系统交互完成嵌入式开发的调试。 仿真交叉调试的研究和实现。 软件o c d 调试的研究和实现。 1 5 论文组织 第一章,介绍了课题的背景和研究意义,概述了嵌入式仿真开发平台及其平 3 电子科技大学硕士学位论文 台调试子系统的研究的重要意义,说明了论文课题来源和主要研究内容。 第二章,阐述了调试基本概念原理,分析软件调试技术的两种调试模型,研 究了硬件调试技术的几种常见的调试工具,并对软硬件调试技术的特点进行了比 较。 第三章,研究了仿真开发平台i s h n 的框架和组织部分,分析了仿真调试系统 在i s h i l 中的位置和作用,以及与其它模块的交互方式。 第四章,设计并实现了仿真交叉调试和软件o c d 调试。 第五章,对本文所实现的调试系统进行验证和分析,并提出了下一步改进的 方向。 第六章,总结论文的工作,提出本文调试系统的特点和所运用的关键技术。 4 第二章调试原理分析 第二章调试原理分析 调试是指跟踪程序中的错误并加以改正的过程,用于调试程序的工具就是调 试器【5 1 。 调试的基本行为有:观察,控制与修改。观察就是对程序的执行状态进行察 看,包括处理机状态、进程状态和数据状态等;控制就是控制程序的执行过程, 如设断点、单步执行等;修改就是改变程序的运行状态,如修改变量的值、修改 指令计数器、修改状态寄存器等。调试器在不同程度上支持这三种行为的综合使 用。 经典的调试手段有断点( b r e a kp o i l l t i n 曲、跟踪( t r a c i n 曲、断言( a s s e n i o n ) 、分析 ( a n a l y s i s ) 、打印输出等。 在嵌入式软件开发过程中的调试方式有很多种,就调试方法而言,嵌入式系 统的调试可以分为基于软件的调试和基于硬件的调试两种,前者使用软件调试器 完成调试过程,后者则使用仿真调试器协助完成调试。 2 1 调试基本概念 2 1 1 断点 断点是程序代码中的一个地址,当程序运行至这个地址时,程序将停止运行。 此时,依据系统的不同,它可能会导致机器中断异常,并启动处理程序来接受来 自调试器的命令。进而进行程序执行的控制,程序运行环境的察看,修改等【刀。 2 1 2 栈帧 栈帧即过程活动记录,是编译器用来实现过程函数调用的一种数据结构。从 逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执 行完后的返回地址等。 2 1 3 单步模式 在一些体系结构的c p u 中,存在着某种特殊的调试位,当该位被置位时,c p u s 电子科技大学硕士学位论文 处于一种每执行一条指令就会停止执行,并产生异常中断的状态,这种状态就为 单步模式。 2 1 4 单步执行 当程序处于被调试模式,且碰到断点停止执行时,单步执行导致程序向前执 行一条指令后停止,并等待调试器的进一步命令。它分为两种:汇编代码单步执行 和源代码级单步执行。前者使程序向前执行一条机器指令,后者则向前执行到下 一行源代码所对应的机器指令处。一行源代码可以由一条或很多条汇编指令构成, 故可知源码级单步更加复杂,它需要确定源码与机器码的对应关系。 2 1 5 继续执行 当程序处于被调试模式,且碰到断点停止执行时,继续执行将使程序执行到 下一个断点处才停止,然后等待调试器的进一步命令。 2 2 嵌入式软件调试技术 嵌入式软件调试通常要在不同的层次上进行,有时可能需要对嵌入式操作系 统的内核进行调试,有时可能仅仅只需要调试嵌入式应用程序,而有时需要对引 导程序进行调试。根据程序运行有无系统支持,可分为两种情况:无操作系统支 持的程序调试和有操作系统支持的程序调试。无操作系统支持的程序包括操作系 统内核,引导程序等。在嵌入式系统的开发过程中,上述两种情况的软件调试需 要使用不同的调试模型。 无操作系统支持的程序调试,相对来说比较困难。如嵌入式操作系统的内核, 作为一种特殊的无操作系统支持的程序,它的调试由于不便于在内核中增加一个 调试器程序,而只能通过远程调试的方法,通过串口或者网口通信和操作系统内 置的“调试桩 ( d e b u gs m b ) 进行通信,共同完成调试过程。调试桩其实可看作一 个调试服务器,它通过操作系统获得一些必要的调试信息,并且负责处理宿主机 端发送来的调试命令。具体到嵌入式l i n u x 系统内核,调试时常用g d b s 劬模型, 宿主机端使用g 1 讯y 系列的g d b 调试器,目标机端在内核中设置一个调试桩( s 劬) , 用作调试过程中和宿主机之间的通信服务器,然后宿主机端的调试器g d b 可通过 串口与s 劬进行通信,对目标机上l i n u 】( 内核进行相关调试【8 】。 6 第二章调试原理分析 有操作系统支持的程序调试可以使用本地调试和远程调试两种方法,相对于 操作系统的调试而言,这两种方式都比较简单。如果采用的是本地调试,首先要 将所需的调试器移植到目标系统中,然后就可以直接在目标机上运行调试器来调 试应用程序了;如果采用的是远程调试,则需要移植一个调试服务器到目标系统 中,并通过它与宿主机上的调试器共同完成应用程序的调试。具体到在嵌入式 l i n u x 系统的开发中,远程调试时目标机上使用的调试服务器通常是g d b s e r v e r , 而宿主机端使用的调试器则是g d b ,两者相互配合共同完成调试【9 】【l o 】。 2 2 1 g d b s m b 调试模型 g d b s 劬调试模型的关键在于要被调试程序提供支持远程调试协议的通信模 块( 包括简单的设备驱动) ,并改写异常处理的相关部分,目的是为了用软件接管被 调试程序的全部异常处理及部分中断处理,在其中插入调试端口通信模块,与主 机调试器交互,模型如图2 1 所示。这是一种对目标程序进行侵入的调试,必须改 动被调试程序【l i 】【1 2 】。 宿主机端目标机端 ! i 被调试的目标 i l i 一。一”: ;鬻出:一蒜_ _ :ii 卜 口i 5 t u d l ; i ! i i ! l 一j o 图2 1g d b s t i l b 调试模型 同时s m b 程序还需定义一个设置断点的函数,因为有的硬件平台提供能产生 特定调试陷阱异常( d e b u g 脚) 的断点指令以支持调试( 如x 8 6 的i n t3 ) ,而另一些 平台没有类似的指令,可以通过使用任意一条不能被解释执行的非法( 保留) 指令代 替。运行于目标操作系统的被调试的应用程序要在入口处调用这个设置断点的函 数以产生异常,异常处理程序调用调试端口通信模块,等待宿主机端的调试器发 送信息。双方建立连接后调试器便等待用户发出调试命令,目标系统等待调试器 根据用户命令生成的指令。 、 g d b 源码中包含了一些s t l j b 文件,包含1 3 8 6 一s n l b c ,s p a r c s t i l b c 等,这些文 7 电子科技大学硕士学位论文 件都与c p u 相关,但完成类似的功能。s 劬主要实现了以下功能: 1 设置中断向量,使得被调试程序发生中断时,进入指定的中断服务程序。 2 中断服务程序,这是g d b s 劬的核心。被调试程序发生中断后进入此服 务程序,该服务程序主要完成与g d b 的交互,处理g d b 远程协议命令, 设置和获取被调试程序信息,直到接收命令继续执行被调试程序。 3 初始断点设置,在程序运行初期触发此断点,让g d b 得到被调试程序的 控制权。 2 2 2g d b s e r v e r 调试模型 g d b s e r v e r 是一个基于类u n i x 系统的用于实现g d b 远程调试功能的调试代 理程序,运行在宿主机端上的g d b 能够较为方便的通过g d b s e e r 对嵌入式系 统应用程序进行调试,模型如图2 2 所示。 宿主机端 目标机端 i 回 剐臣回“至回 i 田il 二二二li 田i ;i 竺兰i l 图2 - 2g d b s e r v e r 调试模型 g d b s e e r 作为运行在目标机操作系统上的一个应用程序,通过类u i l i x 系统 提供的调用接口p 慨e 系统调用实现了对被调试程序的访问和控制。因此,在无 操作系统支持的情况下,该调试模型无法工作。当然,要使g d b s e r v e r 能正常工 作,还需要基于操作系统进行相关工作。包括配置g d b s e e r 使之能运行于目标 操作系统之上;修改g d b s e r v e r 源代码以加入对目标机操作系统的支持;对一些 g d b s e e r 不支持的处理器,也应添加g d b s e r v e r 源码以支持新的处理器。 g d b s e r v e r 方式跟g d b s n l b 方式类似,所有的被调试应用程序产生的调试异常 必须经由g d b s e r v e r 处理。 8 第二章调试原理分析 2 2 3 调试信息的表示 在软件调试的过程,还必需有调试信息的支持才能完成相关调试,如源代码 和汇编指令的对应,变量值的获取等。 通过使用“g 编译器选项,编译器会在编译成的文件中加入额外的调试信息, 并经过汇编器和链接器的稍微转换之后成为最终的可执行文件的一部分。调试信 息描述了源程序文件的许多特征,如行号、变量的类型和作用范围以及函数的名 称、参数、作用域等。源代码调试器只有依赖调试信息才能建立起源代码和二进 制程序之间的对应关系。 在嵌入式开发常用的g 讯7 工具链中,所采用的调试信息表示格式为s t a b s 。 2 2 3 1 s t a b s 格式简介 s t a b s 调试信息表示格式是美国加州大学伯克利分校的p e t e rk e s s l e r 发明的, 最早用于他的p d xp a s c a l 调试器。目前s t a b s 是一种得到广泛应用的调试信息表示 格式【1 4 】【1 5 】。 在汇编程序中,加入的s t a b s 格式的调试信息一般都以汇编伪指令形式出现, 它与汇编文件中的其它指令混合在一起。一共有三种s t a b s 伪指令格式:s t a b s 、s t a b n 和s t a b d ,i b m 的x c o f f 汇编器以s t a b x 替代了这三种格式。这些s t a b s 汇编伪指 令格式为: s ta _ b s ”s t r i n g ”,t y p e ,o t l l e r ,d e s c ,v a l u e s ta :b n 帅e ,o m e r ,d e s c ,v a l u e s t a b dt y p e ,o t h e r ,d e s c s t a b x ”s t r i n g ”,v a l u e ,t y p e ,s d b t y p e n a m e : s ) m b o l d e s c r i p t o rt y p e i n f o m a t i o n 其中n 锄e 是s t a b s 调试信息表示的该符号的名称。n 锄e 也可以为空,此时 s t a b 表示一个没有名字的对象。如“:t 1 0 = 串2 定义了类型l o 是一个指向类型2 的指针,但是没有给出类型1 0 的名称。 s y m b 0 1 d e s 嘶p t o r 的值为一个字母,它给出了s t a b s 所表示的符号的类型信息。 如果s 舯b o l - d e s 嘶p t o r 省略了,那么该s t a b s 表示的是一个局部变量。常见的 s y m b 0 1 d e s 函p t o r 定义如表2 1 。 9 电子科技大学硕士学位论文 表2 - lt y p e - i n f o m a t i o n 常用描述符定义表 # ,:字符, j ,一j ? 食义 j 。j一 撑方法( c h ) 幸 指针 a 数组 e 枚举 n字符串 t y p e i n f o m a t i o n 或者是一位数字,或者是“数字= ”的形式。只有一位数字时, 表示指向己定义的一种类型,否则表示定义一种新的类型。在定义新类型的时候, 新类型可以由其它己定义类型表示,“= ”后面跟代表己定义类型的数字表示即可。 新类型定义时,如果“= ”后跟的是非数字字符( 称为类型描述符) ,可以根据类型 描述符表来查找其所代表的含义。常见的类型描述符定义如表2 2 : 表2 - 2s y m b o l o e s 翻p t o r 常用描述符定义表 ,字符 j,。 奄义。 c常量 f 作用域为所在文件的函数 f全局函数 g全局变量 p 函数参数 r寄存器变量 s 作用域为所在文件的变量 s 局部变量 t枚举、结构或者联合标志 2 2 3 3t y p e 域 t y p e 域给出了s t a b s 类型的基本信息,常见的s t a b s 信息类型定义为: o x l f nf n :目标文件( o 文件) 名称 o x 2 0ng s y m : 全局变量 0 x 2 4nf u n : 函数名或代码变量( t e x t 节) o x 2 6ns t s 订: 赋了初值的静态变量( d a t a 节) o x 2 8nl c s y m :未赋初值的静态变量( b s s 节) 1 0 第二章调试原理分析 o x 2 a nm a i n :m a i n 函数标识 o x 2 cnr o s :位于只读段的变量 o x 3 cn0 p t :调试器选择 o x 4 0nr s y m :寄存器变量 0 x 4 4ns l i n e : t e x t 中的行号 0 x 4 6nd s l i n e :d a t a 节的行号 o x 4 8nb s l i n e :b s s 节中的行号 o x 6 4ns o : 源文件名或路径名,v a l u e 值为对应目标代码的起始地址 o x 8 0nl s : 局部变量或类型标识 0 x 8 2nb i n c l :头文件调试信息开始 0 x 8 4ns o l :头文件名,其v a l u c 值为对应目标代码的起始地址 o x a o np s y m : 形参变量 0 x a 2ne 斟c l : 头文件调试信息结束 o x c onl b r a c : 源文件中一个块的开始标识( 相当于c 语言中的”f ”) o x c 2n - - e x c l : 该头文件已被前面的源文件包含,具体含义在下面的调试 信息提取内容部分中会进一步进行解释 o x e 0nr b r a c :源文件中一个块的结束标识( 相当于c 语言中的”1 ”) 其它:v a l u e 域给出了该符号的值;d e s c 域给出了符号的描述信息;o t h e r 域给 出其它附加信息,一般为空。 2 3 嵌入式硬件调试技术 与软件调试相比,硬件调试可以获得更强大的调试功能和更优秀的调试性能。 硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时 了解到系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是 r o m m o l l i t o r ,r o me m u l a t o r ,i n c i r c u i te m u l a t o r 和o n c h i pd e b u g g e r 【5 】【1 6 】【1 7 】 1 8 】。 2 3 1c r a s ha 1 1 db u m “c r a s ha n db 啪”调试方式,是一种最为原始的调试,准确地说,它是一种 不是调试的调试。它只是将程序编译后,烧写( b u n l ) 到目标机上,观察运行结果来 确定是否工作正常。若有错( c r a s h ) 则寻找错误,修改代码后再测试。使用c m s ha n d b u m 方式开发嵌入式程序的过程如图2 3 所示。 l l 电子科技大学硕士学位论文 由于系统不提供任何目标程序运行环境的监测和控制功能,因此这种调试方 式对于开发人员来说非常繁琐并且开发效率很低。通常,它只能通过在原始代码 中插入显示程序内部变量及机器环境变量的代码来查找程序问题的根源。即便这 样,也需要目标系统有监控器或l c d ,否则就只能使用l e d 灯或示波器等辅助设 备进行调试。这种调试方式的难度很大,使用也极为不方便。 2 3 2r o mm o n i t o r 图2 3c m s ha i l db u m 调试流程图 r o m 主要指非易失性记忆体,如f l a s h ,e e p r o m 等。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 mm o l l i t o r 自己的程序空间,最后 就等待宿主机端的命令。r o mm o m t o r 能完成被调目标的下载,目标机内存和寄 存器的读写,设置断点,单步执行等功能。一些高级的r o mm o n i t o r 能完成代码 分析( c o d ep r o f i l i n g ) ,系统分析( s y s t 锄p r o f i l i n g ) ,r o m 空间的写操作,以及 设置各种非常复杂的断点等功能。利用r o mm o m t o r 方式作为调试手段时,开发 应用程序的步骤如图2 4 所示。 这种方式明显提高了调试程序的效率,减小了调试难度,缩短了产品开发周 1 2 第二章调试原理分析 期,有效降低了开发成本。它的最大好处就是简单、方便。还可以在调试器端扩 展支持许多高级调试功能,可扩展性较强,成本低廉,基本上不需要专门的调试 硬件支持。但是r o mm o i l i t o r 同时也具有较多的缺点: 1 开发r o mm o i l i t o

温馨提示

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

评论

0/150

提交评论