空心雨毕业论文网提供毕业论文、职称论文、硕士论文、计算机论文等的代写服务,同时还提供各种期刊论文的发表。如果你有需要,请联系我们QQ:5599630;电话:13350726595;E-mail:singlehearted@vip.qq.com
RSS
 
当前位置 :空心雨毕业论文网 >> 工学论文 >> 电子机械 >> 正文

Gdb/Armulator 源代码分析

来源:网络转载 作者:okxy168.com 时间:2008-01-10 浏览:1 字体:【

作者Email: Anti_chen2000@sohu.com

摘要

Gdb/Armulator 是Gdb自带的arm7模拟器,是调试arm程序的一个好工具.而了解它的原码结构对扩展它的IO功能有重要意义.本文介绍了从Armulator的启动到其内部运作和IO扩展的大部分原代码功能.

说明

源代码用的是gdb-5.0.tar  gdb-5.0-uclinux-armulator-20021127.patch

A. 和GDB间的通迅

Armulator一般和Gdb通讯有两种方式,其一是在Gdb内部直接调用模拟器的相关函数,另一方法则是用pipe或socket传递RDP协议来连接Gdb和Amulator.而第一种方法是现在Gdb/Armulator所真正使用的(第二种是早期使用的方法),下面就分析了函数直接调用法.

函数直接调用

这个方法是由Steve (sac@cygnus.com) 修改原RDP方法而来的,Steve本人的描述如下:

/******************************************************

This directory contains the standard release of the ARMulator from

Advanced RISC Machines, and was ftp'd from.

ftp.cl.cam.ac.uk:/arm/gnu

It likes to use TCP/IP between the simulator and the host, which is

nice, but is a pain to use under anything non-unix.

I've added created a new Makefile.in (the original in Makefile.orig)

to build a version of the simulator without the TCP/IP stuff, and a

wrapper.c to link directly into gdb and the run command.

It should be possible (barring major changes in the layout of

the armulator) to upgrade the simulator by copying all the files

out of a release into this directory and renaming the Makefile.

(Except that I changed armos.c to work more simply with our

simulator rigs)

********************************************************/

/gdb/target.c,/gdb/remote_sim.c以及在/sim/arm/wrapper.c是在Armulator和Gdb的通信中起着至关重要做用的几个文件.所有的Gdb调试命令最后都是通过在target.h里定义的target_ops结构中的函数指针调用在/sim/arm/wrapper.c中型如sim_xxx的函数完成的.以前这些sim_xxx函数是位于/sim/common中的,是建立RDP通讯的关键,代码修改后此目录中的文件不再有用,被wrapper.c取而代之了.

以下是RDP 通讯和直接函数调用的图示:

要清楚Armulator的执行过程就要从它的启动说起,当你在Gdb中键入target sim 去激活Amulator后Gdb首先进行命令行解释,并将current_target指针指向sim变量,即将Armulator的调试函数集赋予Gdb,随后的函数调用堆栈如下:

--àgdbsim_open (…) in remote-sim.c.

--àsim_open(…) in /sim/arm/wrapper.c /*这里Amulator对调用参数进行分析处理*/

--à*CURRENT_TARGET->TO_FETCH_REGISTERS(-1) /*此函数指针实指向SIM_FETCH_REGISTER(…) IN /SIM/ARM/WRAPPER.C*/

--àSIM_FETCH_REGISTER(-1) /*此函数指针是在将CURRENT_TARGET指向SIM时,通过注册TARGET_OPS 结构完成挂接的*/

SIM_FETCH_REGISTER (SD, RN, MEMORY, LENGTH)

{

ARMWORD REGVAL;

INIT (); FILE://就在这,AMULATOR进行了初始化

}

至此ARMULATOR被装载完毕,其后GDB就是通过TARGET_OPS(定义在TARGET.H)结构中的各个函数指针来完成对它的调试工.

B. ARMULATOR 内部机制

A. 初始化

从上述可知整个模拟器的初始化入口是在WRAPPER.C中的INIT( )函数,那么它到底又做了些什么呢?

(原始的GDB5.0中的ARMULATOR是模拟ARM7DTMI 的,而补丁代码修改了MEMORY MAP 并添加了TIMER 和UART 的IO能力使其能够模拟AT91.因为后者是对前者的增强,所以我们的分析以后者为准)

ONCE THE ARMULATOR TO RESET ,THE ARMUL_NEWSTATE WILL BE CALLED.AND ITS TASK IS TO MALLOC A ARMUL_STATE STUCT WHICH SAVES THE ARMULATOR’S STATES AND INITIALIZE IT .AND THE ARMUL_MEMORYINIT() WILL MALLOC 4M RAM FOR YOU.

阅读更多内容1 · 2 · 下一页>>
最新评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
      本站是由一个众多学科的博士群体组建而成,主要创办者为成都各重点高校博士。本论文网内理工科写手均为博士,文科类写手大部分为博士,且领域涵盖广泛,写作势力强大,若有部分专业,没有相关的写手,我们给你寻找合适的写手! 依托强大的人力资源,我们本着诚心交流的宗旨,专门为您排解写作上的难题。从在科研及实践工作中稳扎稳打的经历,我们具备了研究问题,解决问题的能力。论文写作和论文发表,作为教育体系的一个重要环节,我们确实有能力给您解决好问题,正所谓,真金不怕火来炼,请相信我们的势力,没有把握的事,我们不会做!
      本站受多家期刊委托,其中包括国家级中文核心期刊目录正刊,CSSCI目录正刊,增刊,省级以上公开出版的优秀期刊正刊,本站负责论文推荐发表,加急1个月即可发表。本站负责论文发表,不发表承诺退款!!目前主要负责法律,管理,经济,理工,农学,行政,医学,艺术,英语等类论文发表论文代写。详细期刊目录见本站相关内容。
赞助商链接