没有合适的资源?快使用搜索试试~ 我知道了~
首页skyeye-ARM硬件模拟平台教程
本文详细介绍了skyeye平台的安装,使用方法,有多个具体的实例。 通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段,因为SkyEye的整个软件系统都是Open Source的,且基于GPL协议(μCOS-II除外)。因此,如果要学习Linux操作系统或者进行嵌入式系统开发,但苦于没有硬件支持,SkyEye仿真环境软件是一个很好的选择!
资源详情
资源评论
资源推荐

SkyEye 硬件模拟平台
第一部分: SkyEye 介绍
陈渝 (yuchen@tsinghua.edu.cn)
本文主要介绍了
SkyEye
硬件模拟平台起源,背景和发展状况。
SkyEye
是一个可以模拟
嵌入式硬件开发板的系统软件。通过
SkyEye
的了解,有助于对嵌入式硬件系统有更深入的
认识,特别是对操作系统、驱动程序如何与嵌入式硬件系统进行交互有更深刻的了解。
一.SkyEye 介绍
1.SkyEye的起源和发展
2002 年 11 月,一个偶然的机会,一群操作系统的爱好者在网上进行聊天,成立
了一个TM-Linux兴趣小组,希望要做一些感兴趣的事情。当时在清华大学计算
机系做博士后的陈渝提出做一个用软件实现的嵌入式开发板硬件模拟器,可以在
模拟器上运行各种操作系统,这样就可以在没有开发板的情况下学习和研究操作
系统。一开始就陈渝一人做,首先他了解了当前国际上的一些类似的项目,发现
著名的μCLinux组织实现了一个armulator模拟器软件(在Linux系统上运行),
可以模拟Ateml AT91(基于ARM7TDMI CPU)开发板,μCLinux可以在armulator
(其网址为http://www.uclinux.org/pub/uCLinux/utilities/armulator/)上
运行。于是陈渝以此为基点,借鉴armulator的实现,提出了SkyEye项目,其目
标是让SkyEye仿真多种主流的嵌入式开发板和外设,实现一个可扩展的硬件模拟
框架,让更多的嵌入式操作系统可以在SkyEye上运行。SkyEye项目于 2002 年 12
月 1 日正式建立后,陈渝完成的第一件工作是把armulator移植到了
cygwin/windows环境下,其成果被μCLinux组织接收。接下来清华大学计算机系
硕士生李明加入到SkyEye的开发中,8 天后,SkyEye的第一个版本推出,再过了
4 天,μC/OS-II for SkyEye推出。在这期间,SkyEye的网站也建立起来了。紧
接着,杨晔、王利明、尹首一等在校学生也加入到SkyEye的开发中,给SkyEye
带来了新的活力,SkyEye进入了新的发展阶段,目前通过访问SkyEye的网站
(http://www.skyeye.org/)和在linux公社上的SkyEye论坛
(http://www.linuxfans.org/)可以了解到SkyEye的最新进展并对有关嵌入式
系统开发方面的问题进行交流,还可以到
http://gro.clinux.org/projects/skyeye/ 下载最新的SkyEye相关软件和文
档。
2.SkyEye 的背景
如果你看过电影"黑客帝国"(又称"matrix"),相信电影描述的虚幻世界会深深
地吸引你,至少它是我们看过最有想象力的科幻电影之一。也许我们可以把
SkyEye 看作一个"matrix ",把运行在 SkyEye 上的各种程序看成是这个"matrix"
中的芸芸众生。我们创造 SkyEye 和编写运行在 SkyEye 上运行的程序就是为了洞
悉计算机的奥秘,尝尝当"造物主"的感觉。当看到各种软件 Linux、μCLinux、
μC/OS-II...在 SkyEye 上"愉快"地运行时,那种感觉真是太奇妙了。

SkyEye 硬件模拟平台
对于那些想进行嵌入式系统软件开发和学习,或者想研究嵌入式 Linux 等操作系
统和一些底层系统软件(如 TCP/IP 等)的研究和开发人员来说,可能存在如下
几方面的问题:(1)经常苦于经费不足,缺少足够的硬件开发板和完善的软件
开发环境,相关的书籍对一些最新软件的分析还不够全面,无法深入研究和开发
嵌入式软件。(2)高层次的软件设计和开发一般不用太考虑底层硬件的实现细
节,如果直接处于一个具体的硬件环境下,在开发和研究中可能会陷入硬件的具
体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。(3)如果
硬件开发环境不太稳定(这种情况经常见到),且对具体的硬件不是很了解,则
可能在排除问题上花费大量的不必要的时间。(4)如果你想自己尝试设计一个
操作系统,则先在一个提供源码级调试的软件仿真器上进行开发,可能会大大提
高你的开发进度。
对于想了解、学习一般操作系统的实现原理,Linux/μCLinux 操作系统或 TCP/IP
等系统级软件的实现的人员,目前一般采用的方法是看书和读源代码,这是一种
静态的学习方法,效率较低,比较枯燥,缺少亲自实践的感觉。要想深入分析和
开发软件,就要动手编程,不能只是看看书,读读代码,只有通过亲手实践才能
够掌握软件设计的核心内容。上面所指出的问题和需求促使 SkyEye 项目的诞生。
3.SkyEye 的目标和意义
SkyEye 是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye
的目标是在通用的 Linux 和 Windows 平台上实现一个纯软件集成开发环境,模拟
常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在
SkyEye 上运行 μCLinux 以及 μC/OS-II 等多种嵌入式操作系统和各种系统软件
(如 TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和
测试。
纯软件的模拟器有许多种,如模拟一个芯片时序逻辑的模拟器、只模拟 CPU 指令
的模拟器、模拟整个硬件开发板的模拟器、模拟一个 PDA 的模拟器等。存在一些
纯软件的仿真器或模拟器,如 Stanford 大学的 SimOS 模拟器,它仿真的是 MIPS
系列 CPU 和相关外设,可以在其上运行 SGI 公司的 Irix 操作系统和软件,目前
基本上停止了进一步的开发;PSIM 是一个仿真 PowerPC 指令集的模拟器,目前
只支持简单的命令行应用程序;xcopilot 是一个 PDA 模拟器,它是由 Greg
Hewgill 出于个人喜好编写的,它仿真的是 M68K CPU,通过它可以给基于 PalmOS
的软件开发者提供一个模拟开发环境。Bochs 是一个仿真 x86 CPU 的开源项目,
目前还支持 AMD64 CPU,在它上面可以运行 Linux 操作系统。其它一些商业的仿
真软件如 vmware 和 virtualPC 可以仿真一个真实的 x86 计算机,而 Virtutech
Simics 仿真器可以仿真多种 CPU 和硬件,功能强大,可用于硬件和系统软件的
评测。
SkyEye 是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种 CPU 指
令集,在 SkyEye 上运行的操作系统意识不到它是在一个虚拟的环境中运行,而
且开发人员可以通过 SkyEye 调试操作系统和系统软件。由于 SkyEye 的目标不是
验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上 SkyEye 与
真实的硬件环境相比还是有一定差别的。SkyEye 在时钟节拍的时序上不保证与

SkyEye 硬件模拟平台
硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。这样带来的好处
是 SkyEye 的执行效率更高。SkyEye 的推出具有下面三方面的意义:
• 通过 SkyEye 仿真集成环境可以很方便地进入到嵌入式系统软件学习和开
发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用
户来说,它将是一个非常有效的学习工具和开发手段,因为 SkyEye 的整
个软件系统都是 Open Source 的,且基于 GPL 协议(μCOS-II 除外)。
因此,如果要学习 Linux 操作系统或者进行嵌入式系统开发,但苦于没有
硬件支持,SkyEye 仿真环境软件是一个很好的选择!
• 如果想研究与具体硬件无关的系统软件(如 TCP/IP 协议栈等),采用
SkyEye 可以有效地提高工作效率,因为你可以直接在 μCOS-II 和
μCLinux for SkyEye 上进行开发和调试,而与具体硬件打交道的各种
driver 已经存在,且有源码级调试环境,只需关心高层的逻辑设计和实
现就可以了。
• SkyEye 本身作为一个开放式的项目体系,可以划分为多个独立的子项目
系统。通过参与 SkyEye 的各个子项目,与大家共同交流、协作,可以进
一步学习、分析、精通 Linux 内核,掌握 ARM 嵌入式 CPU 编程。
在 32 位嵌入式 CPU 领域中,ARM 系列 CPU 所占比重很大,而 ARM7TDMI 是其中最
广泛的一种 ARM CPU 核,因此 SkyEye 首先选择了 ARM7TDMI 作为仿真的目标 CPU
核,当然将来 SkyEye 会支持更多种类的 CPU。目前在 SkyEye 上可运行并进行源
码级调试 ARM Linux、μCLinux、μC/OS-II 操作系统和 LwIP(一个著名的嵌入
式 TCP/IP 实现)、MiniGUI(一个著名的嵌入式 GUI 系统)等系统软件。SkyEye
可用于学习,分析,开发这些系统软件的实现,了解 ARM 嵌入式 CPU 编程。而这
一切都可在一个纯软件的环境中完成。通过分析 SkyEye 本身实现,系统软件开
发人员对 ARM,8019as(NE2000 兼容)以太网络芯片等硬件的了解也会更深入。
SkyEye 并不能取代开发板等硬件的功能,但通过它可以比较容易进入到嵌入式
软件的广阔天地中。由于 SkyEye 建立在 GDB 基础之上,使用者可以方便地使用
GDB 提供的各种调试手段对 SkyEye 仿真系统上的软件进行源码级的调试,还可
以进行各种分析,如执行热点分析、程序执行覆盖度分析等。由于 SkyEye 提供
了源代码和相关文档,有经验的用户完全可以修改和扩充 SkyEye 来满足自己的
需求。
二.SkyEye 模拟硬件介绍
目前 SkyEye 模拟了大量的硬件,包括 CPU 内核、存储器、存储器管理单元、缓
存单元、串口、网络芯片、时钟等。下面做一简单介绍。
1.CPU 和开发板系列
目前 SkyEye 可以模拟的 CPU 主要是基于 ARM 内核的 CPU,包括 ARM7TDMI,ARM720T,
ARM9TDMI,ARM9xx,ARM10xx,StrongARM,XScale 等。ARM7/9/10TDMI 是 ARM
系列 CPU 的基本核心部分,它们不支持 MMU/CACHE 和一些扩展指令,是 ARM CPU
基本核。ARM720T、ARM920T、ARM10xx、StrongARM、Xscale 是建立在以上 ARM CPU
核上,并扩展了 MMU/CACHE 和其它功能。各硬件开发公司可以根据它们的需求在

SkyEye 硬件模拟平台
上述 CPU 核上加上特定的扩展,形成基于各种 ARM 基本核心的特定 CPU,如
Atmel91X40 和 ep7312,分别扩展了 ARM7TDMI 和 ARM720T 的内存控制和各种 I/O
控制器,简化了开发板的逻辑设计,大大增强了开发板的功能。
目前 SkyEye 模拟的开发板包括基于 Atmel 91X40/AT91RM92 CPU 的开发板,基于
Crirus Logic ep7312 的开发板、基于 StrongARM CPU 的 ADSBITSY 开发板,基
于 XScale PXA250 CPU 的 LUBBOCK 开发板、基于 SAMSUNG S3C4510B/S3C44B0 CPU
的开发板、基于 SHARP LH7A400 CPU 的开发板、基于 Philip LPC22xx CPU 的开
发板等。主要模拟了对应各个开发板的串口、时钟、RAM、ROM、LCD、网络芯片
等硬件外设。
2.存储器管理单元和缓存单元
MMU(Memory Management Unit)即存储器管理单元,是用来管理虚拟内存系统
的硬件。MMU 的两个主要功能是:将虚地址转换成物理地址;控制存储器的存取
权限。MMU 关掉时,虚地址直接输出到物理地址总线。MMU 本身有少量存储空间
存放从虚拟地址到物理地址的匹配表,此表称作 TLB(Translation Lookaside
Buffers)。TLB 表中保存的是虚址及其对应的物理地址,权限,域和映射类型。
当 CPU 对一虚拟地址进行存取时,首先搜索 TLB 表以查找对应的物理地址等信息,
如果没有查到,则进行查找 translation table,称为 Translation Table Walk
(简称 TTW)。经过 TTW 过程后,将查到的信息保存到 TLB。然后根据 TLB 表项
的物理地址进行读写。CACHE 是缓存单元,主要用于缓存内存中的数据,其读写
速度远快于内存的读写速度,所以可以提高 CPU 的内存数据的访问效率。
write/read buffer 硬件单元的作用与 CACHE 的作用类似。MMU、CACHE、
write/read buffer 一般是高性能 CPU 的重要组成部分,且不同类型 CPU 的 MMU、
CACHE、write/read buffer 的逻辑行为也有一定的差异。为了支持模拟多种类
型 CPU 的 MMU/CACHE,SkyEye 包含了一个通用的 MMU/CACHE 模拟实现。通过对一
些参数的调整可以支持模拟多种类型的 MMU/CACHE 物理结构和逻辑行为。
3.网络芯片
目前 SkyEye 模拟了网络芯片 8019AS,其特点是:NE2000 兼容,内建 16KRAM 缓
冲区,10MB 传输速率。虽然目前模拟的开发板上不一定有网络芯片 8019AS,但
我们可以在我们模拟的开发板上加上网络芯片 8019AS 的模拟。这样再加上在不
同操作系统上的 8019AS 驱动程序,就可以方便地完成各种网络应用的开发和设
计。目前已经在在基于 Atmel91X40 CPU 的开发板上实现了网络芯片 8019AS 扩展,
并增加了 μC/OS-II 和 μClinux 的网络驱动程序,已经支持大量的网络应用程
序,如 LwIP (一个 TCP/IP 协议栈实现)、nfs server/clinet、http
server/client、telnet server/client、ftp server/client 等。

SkyEye 硬件模拟平台
三.SkyEye 的设计实现
1.SkyEye 设计原则
SkyEye 软件的核心在目标模拟模块。为了提高模拟效率,且能够模拟更多的 CPU、
开发板和各种外设,方便开发人员进行开发和学习,SkyEye 遵循如下的设计原
则:
• 用 C 语言编程,采用面向对象的方式定义各种要模拟的硬件;
• 定义抽象模拟硬件对象,最大化重用代码;
• 定义硬件配置脚本,使得不用改动 SkyEye 代码就可以灵活地调整各种硬
件配置;
保持与 GDB 上层接口的一致性,这样可充分利用 GDB 强大的源代码级调试功能。
2.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 和 ARM 开发平台
剩余72页未读,继续阅读

he_yong_sheng
- 粉丝: 1
- 资源: 9
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论2