个开放源码的嵌入式仿真环境——SkyEye
④目标仿真模块:主要是模仿计算机系统中的主要硬件(包括CPU、内存和各种硬件外设等)的执行,对执行文件的机器指令进行解释,并仿真执行每一条机器指令,产生相应的硬件响应。
2.2 SkyEye模拟的硬件介绍
目前,SkyEye仿真的CPU包含不带MMU的AT91X40和带MMU的ARM720T,它们都是基于ARM7TDMI CPU内核的。SkyEye还模拟了其它硬件外设,如串口、网络芯片、内存、时钟、网络HUB等。SkyEye的CPU仿真主要完成对ARM指令集处理、寄存器操作和CPU流水线处理等的仿真。
ARM720T具有MMU(Memory Management Unit),即存储器管理单元,是用来管理虚拟内存系统的操作。MMU的两具主要功能是:
*将虚地址转换成物理地址;
*控制存储器存取允许,MMU关掉时,虚地址直接输出到物理地址总线。
MMU本身有少量存储空间存放从虚拟地址到物理地址的匹配表,此表称作TLB(Translation Lookaside Buffers)。TLB表中保存的是虚地址及其对应的物理地址、权限、域和映射类型。当CPU对一虚拟地址进行存取时,首先搜索TLB表以查找对应的物理地址等信息。如果没有查到,则进行查找Translation Table,称为TTW(Translation Table Walk)。经过TTW后,将查到的信息保存到TLB,然后根据TLB表项的物理地址进行读写。
MMU/Cache的仿真主要是依据ARM720T处理器的体系结构进行的。ARM720T可以看成ARM7TDMI加上MMU/Cache模块,主要是仿真控制MMU/Cache的寄存器结构、TLB结构、Cache结构、Translation Table Walk的控制逻辑以及在此基础上内存的读取操作。
对于网络部分,SkyEye仿真的是兼容NE2000的8019as以太网网络芯片,支持8位数据通路,仿真实现了远程DMA信道和本地DMA信道两个部分。本地DMA完成控制器与仿真网络的数据交换,主处理器(Host)收发数据只需对远程DMA操作。当主处理器要向以太网络发送数据时,先将一帧(frame)数据经过远程DMA信道,送到以太网络控制器中发送缓存(Ring Buffer),然后发出传送命令。以太网络控制器在送出前一帧的数据后,继布完成此帧的发送。以太网络控制器接收到的数据通过MAC比较后,由FIFO存到接收缓冲区,收满1帧后,以中断或缓存器标志的方式通知主处理器。
为了有效支持网络仿真,SkyEye还设计了一个虚拟HUB-vnet,可以在一台Host主机上支持多个在SkyEye上运行的OS实例进行网络的通信互联,从而更有助于针对网络方面的开发和研究。
3 SkyEye上已经移植成功的OS
3.1 μClinux
μClinux是应用于嵌入式设备的一个Linux版本,是主要针对不带MMU的CPU而设计的Linux系统。ΜClinux系统对于内存的访问地址都是实际的物理地址。操作系统对内存空间没有保护(这实际上是很多嵌入式系统的特点),各个进程实际上共享一个运行空间(没有独立的地址转换表)。目前,SkyEye上可以运行μClinux的2003年最新版本。
3.2 μC/OS-II
SkyEye作为一个基于Atmel AT91X40开发板的仿真环境,在它上面可以移植各种适合地嵌入式开发应用的操作系统,将μC/OS-II移植琶SkyEye上是我们对此做的又一次尝试。ΜC/OS-II是一个简单、高效的嵌入式实时操作系统内核。自从1992年以来,已经被应用到各种嵌入式系统中。目前,它可以支持x86、ARM、PowerPC、MIPS等众多体系结构,并有上百个商业应用式系统中。目前,它可以支持x86、ARM、PowerPC、MIPS等众多体系结构,并有上百个商业应用实例,其稳定性和可用性是经过实践验证的。同时,它的源代码公开,任何人都可以从www.ucos-ii.com的网站上获得全部源码以及其在各种体系结构平台上的移植范例。无论是通常学习μC/OS-II来了解实时操作系统的构造,还是直接使用它来针对具体应用进行开发,都是非常方便和可行的。目前,SkyEye支持的μC/OS-II内核为2.5.1版。
3.3 ARM Linux
ARM Linux属于Linux标准发行内核中的一个分支,支持MMU的ARM系列CPU,如ARM720T、ARM920T、Intel StrongARM等。我们目前在SkyEye上仿真的CPU型号为CPU内核是ARM Linux内核选择的本系结构为CLPS711x/EP72lx,它支持ARM20T、UART串口等硬件,都是SkyEye目前仿真的硬件。目前SkyEye已经成功运行了版本为2.4.18的ARM Linux。有关ARM Linux的更多信息请访问http://www.arm.linux.org.uk/。
4 SkyEye目前支持的网络协议栈
4.1 μCLinux上的TCP/IP
μClinux上面有完整的TCP/IP协议栈,但缺少对SkyEye的网络仿真芯片(仿真兼容NE2000的8019as)的驱动程序。我们实现的驱动程序主要包括了初始化、中断处理、接收数据包的处理、发送数据包的处理等工作,再加上SkyEye的虚拟HUB-vet的协议,使μClinux on SkyEye的多个实例之间、实例与主机之间可以进行TCP/IP通信。
4.2 μC/OS-II上的LwIP
μC/OS-II本身没有TCP/IP协议栈,目前的一些第三方TCP/IP支持都是完全商业化的,很少给出源代码,影响了μC/OS-II的研究和推广。通过把开放源代码的TCP/IP协议栈LwI