当前位置:操作系统 > Unix/Linux >>

硬件仿真实现之---SkyEye的设计实现

一. SkyEye的总体结构

  SkyEye基于GDB/ARMulator(目前由David McCullough 维护),并进行了全面的改变和扩展。SkyEye建立在GNU GDB的底层,可以模仿多种完整的嵌入式计算机系统,目前模拟的硬件包括CPU、内存、I/O寄存器、时钟、UART、网络芯片、MMU、CACHE,将来还会模拟 LCD、USB等各种硬件。在SkyEye上运行的操作系统和各种系统软件"意识"不到它们是在一个虚拟的计算机系统上运行。

  SkyEye从总体上分为四个层次:

  用户接口模块:包括命令行用户界面和图形用户界面,完成处理用户的输入命令,并把相关调试数据输出给用户的任务。这一部分基本上直接利用了GDB的用户接口模块,并在此基础上有一定的扩充。

  符号处理模块:主要处理执行文件的头信息,解释执行文件中内嵌的debuger调试信息,对符号表的管理,对源代码表达式的解析,定位源代码中的语句位置和机器码的位置关系等。这一部分也是直接利用了GDB的符号处理模块,也正是有了这个模块的支持,SkyEye可以支持源码级调试。

  目标控制模块:主要完成执行控制(如中断程序的执行,设置中断条件等),程序栈结构分析,对具体目标硬件的控制(如本地调试、远程调试和模拟调试的控制)。这一部分完成对SkyEye上运行的软件的控制,提供了多种调试手段。

  目标模拟模块:这一部分是SkyEye的核心。它的功能是模仿计算机系统中的主要硬件(包括CPU、内存和各种硬件外设等)的执行,对执行文件的机器指令进行解释,并模拟执行每一条机器指令,产生相应的硬件响应等。

  二. SkyEye目标模拟模块功能划分

  

  SkyEye目标模拟模块模拟的硬件逻辑结构图如图 0 1所示。SkyEye目标模拟模块从功能上可分为如下几大模块:

  配置选项解析和初始化模块:在模拟硬件开始运行前,根据配置文件的选项,控制对模拟硬件的配置和初始化。相关文件包括:

  arminit.c:控制各种模拟硬件的初始化

  skyeye_config.[ch]:解析配置文件的选项行

  skyeye_options.c:根据各种硬件的选项,完成各种配置

  处理器模拟宏模块:主要完成与处理器体系结构相关的模拟,它可细分为:CPU指令模拟执行模块、MMU/CACHE模拟模块、CoProcessor(又称协处理器)模拟模块。

  CPU指令模拟执行模块:其主要任务是:当模拟硬件开始运行,完成指令读取,指令译码,指令执行的工作;如果CPU状态发生了改变,调整指令和各种寄存器值;在指令执行前,调用开发板IO模拟模块的io_do_cycle驱动模拟各种外设的行为。主要的文件包括:

  armemu.[ch]:模拟CPU的3级流水线,并具体执行各种指令

  MMU/CACHE模拟模块:本模块分为两部分:与具体CPU类型无关的MMU/CACHE模拟子模块和与具体CPU类型相关的模拟子模块。主要的任务是:根据配置文件进行初始化;进行MMU/CACHE模拟;执行与MMU/CACHE相关的指令。如果CPU指令模拟模块执行读写存储器的操作指令,则转到MMU/CACHE模拟模块。如果模拟的CPU类型不支持MMU(如ARM7TDMI),则SkyEye会根据将访问的地址,直接转到MEMORY模拟模块或开发板IO模拟模块;否则转到具体CPU类型相关的模拟子模块进行MMU/CACHE模拟。主要的文件包括两部分:

  与具体CPU类型无关的MMU/CACHE模拟子模块:

  armvirt.c、armmmu.c、mmu/*.[ch]

  与具体CPU类型相关的MMU/CACHE模拟子模块:

  sa_mmu.[ch]:模拟strongarm的MMU/CACHE

  arm7100_mmu.[ch]:模拟arm7[12]0T的MMU/CACHE

  xscale_copro.c:模拟xscale的MMU/CACHE

  arm920t_mmu.[ch]:模拟arm920t的MMU/CACHE

  CoProcessor(又称协处理器)模拟模块:其主要任务是:完成各种协处理器的初始化;执行各种协处理器的指令。实际上MMU/CACHE模拟模块的一部分工作是模拟ARM的第15号协处理器,它的主要功能是配置MMU/CACHE等。主要的文件包括:

  armcopro.c:根据配置信息,完成对ARM协处理器的初始化配置

  xscale_copro.c:模拟xscale的协处理器cp13、cp14、cp15

  sa_mmu.[ch]、arm7100_mmu.[ch]:模拟strongarm、ep7312的协处理器cp15

  arm920t_mmu.[ch]:模拟arm920t的协处理器cp13、cp14、cp15

  IO模拟宏模块:本模块包含各种逻辑行为各异的外设模拟,主要包括系统IO模拟模块、网络芯片模拟模块、LCD模拟模块等。

  系统IO模拟模块:本模块的主要任务包括:根据配置文件进行IO和外设初始化;完成各种外部IO设备的模拟(如时钟计数器累加、产生中断、LCD显示等);进行各种特定CPU和外设的IO寄存器读写的模拟。本模块与各种具体的开发板和CPU有很紧密的联系,主要的文件包括:

  armio.[ch]:建立在各个特定模拟子模块上的抽象层模块

  skyeye_mach_at91.c:模拟Atmel AT91X40开发板

  skyeye_mach_ep7312.c:模拟cirrus ep7312开发板

  skyeye_mach_pxa.c:模拟intel xscale lubbock开发板

  skyeye_mach_s3c4510b.c:模拟基于samsung s3c4510b的开发板

  skyeye_mach_s3c44b0.c:模拟基于samsung s3c44b0的开发板

  skyeye_mach_sa.c:模拟基于intel strongam的adsbitsy开发板

  skyeye_mach_lpc.c:模拟基于philip lpc2249的开发板

  skyeye_mach_sharp.c:模拟基于sharp lh7a400的开发板

  skyeye_mach_at91rm92.c:模拟基于atmel at91rm9200的开发板

  skyeye_mach_cs89712.c:模拟基于cs89712的开发板

  网络芯片模拟模块:本模块主要完成了对8019AS网络芯片的模拟工作,主要任务包括:模拟8019AS的控制逻辑、8019AS与具体开发板IO模拟模块的接口、虚拟网络输入输出接口处理。主要的文件包括:

  skyeye-ne2k.[ch]:8019AS的硬件逻辑模拟

  skyeye_mach_at91.c:部分内容完成接收虚拟网络输入处理模拟

  skyeye_net_tuntap.c:配置tuntap虚拟网络的接口

  skyeye_net_vnet.c:配置vnet虚拟网络的接口

  vnet.c、if_vnet.h:独立存在的软件包,vnet虚拟网络的具体实现

  LCD/TouchScreen模拟模块:本模块主要完成LCD/TouchScreen控制逻辑的模拟,是目前唯一需要GUI支持的模块,它的主要任务是:配置LCD/TouchScreen硬件模拟、模拟LCD/TouchScreen控制逻辑。有关LCD/TouchScreen模拟相关的文件包括:

  skyeye_lcd.[ch]: LCD/TouchScreen配置和LCD/TouchScreen模拟的通用控制逻辑

  skyeye_mach_*.c:与开发板相关LCD/TouchScreen的控制逻辑和中断处理,目前支持ep7312和pxa255的skyeye模拟。

  MEMORY模拟模块:本模块与具体的CPU和开发板无关,它的主要任务包括:根据配置文件进行内存初始化,并加载binary image文件;进行RAM/ROM读写的模拟。主要的文件包括:

  armmem.[ch]:主要完成RAM/ROM读写模拟

  三. SkyEye关键数据结构

  SkyEye目标模拟模块中,各种数据结构很多,用于模拟硬件总体机构定义的主要数据结构有skyeye_config_t和ARMul_State。把握这两个数据结构,是理解整个skyeye模拟的硬件体系结构的关键,在这两个数据结构上进行进一步细化分析,则可充分了解skyeye的硬件体系结构细节。

  1. skyeye_config数据结构

  skyeye_config_t结构描述了SkyEye模拟的整个硬件的静态配置,它的具体内容如下:

  typedef struct {

  cpu_config_t *cpu;

  machine_config_t *mach;

  mem_config_t mem;

  net_config_t net[NET_MAXNICNUM_PER_HOST];

  uart_config_t uart;

  log_config_t log;

  ARMword start_address;

  

  ARMword no_lcd;

  char config_file[MAX_FILE_NAME];

  } skyeye_config_t;

  skyeye_config_t结构包含了CPU核心配置信息-cpu、开发板配置信息-mach、memory map 配置信息-mem、网络芯片和网络环境配置信息-net、面向主机的输入输出配置信息-uart、测试记录输出配置信息-log、模拟执行起始地址配置信息-start_address、是否有LCD-no_lcd和记录文件名信息-config_file。这里面与模拟硬件紧密相关的是CPU核心配置信息、开发板配置信息、memory map 配置信息、网络芯片和网络环境、LCD配置信息。

  2. cpu_config_t数据结构

  描述CPU核心的结构定义在cpu_config_t数据结构中,具体内容如下:

  typedef struct {

  const char *cpu_arch_name;

  const char *cpu_name;

  ARMword cpu_val;

  ARMword cpu_mask;

  ARMword cachetype;

  } cpu_config_t;

  其具体描述解释如下:

  cpu_arch_name:描述了arm cpu体系结构的名称,根据ARM CPU内核的发展,其体系结构已经从Version1发展到了Version5,其最新版本为Version5TE。而Intel在其基础上又进行了自己的扩展体系结构StrongARM(基于ARM version4)和XScale(基于ARM version5)。目前SkyEye支持"armv3"、"armv4"、"arm5"、"arm5TE"、"xscale"的体系结构。

  cpu_name:描述了具体
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,