SkyEye安装与使用

一. SkyEye配置选项

SkyEye模拟的硬件配置和模拟执行行为由配置文件skyeye.conf中的选项确定。根据选项的功能,skyeye.conf的选项分为硬件配置选项和模拟执行选项。根据参数的个数,skyeye.conf的选项主要由两种组成:

  • 单参数选项行
    格式为:
    symbol: value
    symbol可以是硬件定义,如cpu、mach等,也可以是执行控制定义,如log等。
    value是symbol对应的值,可能是数字也可能是字符串。
  • 多参数选项行
    格式为:
    symbol:opt1=value1,opt2=value2,......
    opt1是参数名,value1是opt1对应的值,可能是数字也可能是字符串。

目前skyeye.conf的配置定义如下:

  • 基本CPU核配置选项
    目前存在的选项有:arm710、arm7tdmi、arm720t、arm920t、sa1100、sa1110、xscale
    格式为
    cpu: cpuname
    注:cpuname表示一个代表cpu名字的字符串。
    例如:
    cpu: arm7tdmi
  • 具体的开发板(包括CPU扩展)配置选项
    目前存在的选项有:at91、ep7312、adsbitsy,pxa_Lubbock、lpc、s3c4510b、s3c44b0、cs89712、sa1100、at91rm92、sharp_lh7a400
    格式为:
    mach: machinename
    注:cpuname表示一个代表基于特定CPU的开发板名字的字符串。
    例如:
    mach: at91
  • 内存组配置选项
    一个内存组内的地址是连续的,类型分为RAM SPACE, ROM SPACE, mapped IO SPACE
    格式为:
    mem_bank: map=M|I, type=RW|R, addr=0xXXXXXXXX, size=0xXXXXXXXX,file=imagefilename,boot=yes|no
    • map=M 表示 RAM/ROM SPACE, map=I 表示 mapped IO SPACE。
    • type=RW ,且如果map=M则表示RAM SPACE, type=R,且如果map=M则表示ROM SPACE。
    • addr=0xXXXXXX 表示内存组的起始物理地址(32bit,16进制)。
    • size =0xXXXXXX 表示内存组的大小(32bit,16进制) 。
    • file =imagefilename
      file的值imagefilename是一个字符串,实际上表示了一个文件,一般是一个可以执行的binary image格式的可执行程序或OS内核文件或是一个binary image格式的根文件系统。如果存在这个文件,SkyEye会把文件的内容直接写到对应的模拟内存组地址空间中。
    • boot=yes/no,如果boot=yes,则SkyEye会把模拟硬件启动后的第一条指令的地址定位到对应的内存组的起始地址。

    例如:
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rom
    mem_bank: map=M, type=RW, addr=0x10000000, size=0x00000800, file=./loader.bin,boot=yes

  • 网络芯片8019AS的配置
    格式为 nic: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    注:xx表示两位16进制数,dd表示两位10进制数
    • state表示模拟开始后,网络芯片是否开始工作
    • mac表示模拟的nic的mac地址
    • ethmod表示skyeye所处主机上的网络模拟方式, 目前有tuptap和vnet两种模式。tuntap是linux kernel支持的一个点到点虚拟网络实现,vnet是skyeye实现的一个功能更多的一个基于虚拟HUB的网络。
    • hostip表示主机方与skyeye交互用的ip地址

    例如:
    net: state=on, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1

  • LCD的配置
    格式为 lcd: state=on/off
    state=on表示LCD处于接通状态; state=off 表示LCD处于关闭状态。
    例如:
    lcd: state=on
  • skyeye的UART控制选项
    uart选项可以控制skyeye在另一个与某个串口连接的终端上输入/输出字符
    格式:
    uart: fd_in=indevname, fd_out=outdevname
    • fd_in=indevname indevname表示用于输入的设备文件名,其值为实际的串口设备文件/dev/ttySx
    • fd_out=outdevname outdevname表示用于输出的设备文件名,其值为实际的串口设备文件/dev/ttySx
    例如:
    uart: fd_in=/dev/ttyS0, fd_out=/dev/ttyS0
  • skyeye的log控制选项
    log选项用于控制skyeye输出硬件系统的执行状态信息,包括每次执行指令时的执行指令值、寄存器值、各种硬件状态等。
    格式:
    log: logon=0|1, logfile=filename, start=number1, end=number2, length=number3
    • logon=0|1|2|3,如果值等于0表示不进行记录,如果值等于1表示记录指令和指令地址流,如果值等于2表示记录指令和指令地址和主要寄存器内容,如果值等于3表示记录指令和指令地址和所有的寄存器内容。
    • logfile=filename 其值是一个字符串,表示用于记录信息的文件名
    • start=number1 其值是一个>=0的十进制整数,表示系统执行到第number1条指令时开始进行记录
    • end =number2其值是一个>=0的十进制整数,表示系统执行到第number2条指令时停止记录
    • length =number3其值是一个>=0的十进制整数,表示只记录系统最近执行的number3条指令时的信息

    格式:
    log: logon=0, logfile=/tmp/sk1.log, start=100000, end=200000, length=100


    图 0 1 SkyEye硬件模拟逻辑结构图
    图 0 1 SkyEye硬件模拟逻辑结构图

    SkyEye目标模拟模块模拟的硬件逻辑结构图如图 0-1所示。

    二. 安装使用SkyEye

    1. SkyEye的安装

    目前SkyEye在Linux操作系统下运行得很好, SkyEye通过MingW或cywgin软件也可以在Windows环境中运行。

    下面我们以在RedHat 9.0环境的SkyEye安装为例:

    首先需要从解开skyeye-x.x.x.src.tar.bz2软件包(x.x.x代表SkyEye的版本号)开始,按照软件包中的SkyEye.README或README文件中介绍的步骤进行(下面命令中的"#"是shell提示符,用户不用输入):

    (1) 解压源码包(假定skyeye-x.x.x.src.tar.bz2放在本机的"/usr/src"目录下),会在当前目录生成一个skyeye的目录
    #cd /usr/src
    # tar xjvf skyeye-x.x.x.src.tar.bz2

    (2) 进入解压SkyEye目录,配置SkyEye
    #cd skyeye
    如果是SkyEye 0.6.0以前的版本,运行下面的命令进行配置:
    # ./configure --target=arm-elf --prefix=/usr/local --without-gtk-prefix --without-gtk-exec-prefix --disable-gtktest
    如果你的SkyEye版本大于0.6.0,则带有LCD仿真支持。为了增加对LCD仿真的支持,则运行如下命令:
    # ./configure --target=arm-elf --prefix=/usr/local

    (3) 然后是编译和安装(正确执行完下面的指令且命令正常结束后,系统中的/usr/local/bin/skyeye 执行程序就是安装好的SkyEye软件。)


    # make
    # make install

    在编译安装过程中,须注意以下几点:

    • 如果你使用的是Mandrake Linux,那么有可能你在编译SkyEye时会出现有关readline, ncurse, termcap等库的一些错误,那么你需要运行下面的命令:
      ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h
    • 然后再重新编译
    • 如果你使用的是Debian Linux, 不要用gcc 2.95 或 gcc 3.0, 要使用gcc 3.2或更高版本。
    • 在你系统中所使用的gcc 版本号应该要大于或等于2.96
    • 如果SkyEye版本号大于0.6.0, 那么你需要在你的系统中安装GTK (LCD模拟要用到) 。

    2. SkyEye的使用

    下面我们以SkyEye模拟基于Atmel AT91X40的开发板,并运行μClinux为例来讲解SkyEye的具体使用。

    第1步 安装交叉编译环境并配置μClinux

    先安装交叉编译器。注意这里最好用root用户来执行如下操作。将arm-elf-tools-20011219.tar.gz(20011219是该工具的产生时间,也可以选择更新的arm-elf-tools。)在本机的根目录下用tar命令解开(假定arm-elf-tools- 20011219.tar.gz放在本机的根目录"/"下)。具体命令(下面命令中的"#"是shell提示符,用户不用输入)如下:


    #cd /
    # tar /zxvf arm-elf-tools-20011219.tar.gz

    然后将uClinux-dist-20020927.tar.gz(假定该软件包放在本机的根目录下)解开,比如解开在/usr/src/uClinux-dist/下,需要执行如下命令:

    # cd /usr/src
    # tar zxvf /uClinux-dist-20020927.tar.gz

    然后在/usr/src/uClinux-dist/目录下执行如下命令:

    • 在图形方式下可用命令
      # make xconfig
    • 在命令行方式下可用命令
      # make menuconfig

    在这两种界面下,在vendor/product选项中选择GDB/ARMulator,kernel版本选择2.4.x,其它选项不变,然后保存配置退出,即选择save and exit选项。

    第2步 编译生成μClinux和包含应用程序的文件系统

    方案A

    如果要生成带调试信息的linux kernel执行文件,在第一步执行完后,继续执行如下命令:
    # make dep; make linux
    这时在/usr/src/uClinux-dist/linux-2.4.x目录下生成具有ELF执行文件格式的linux内核文件。到这一步还没有生成文件系统,为了生成文件系统,还需要执行如下命令:
    # make romfs; make image
    如果在/usr/src/uClinux-dist/images/下存在文件 romfs.img,表示文件系统生成成功。

    方案B

    如果想一步生成带调试信息的linux kernel执行文件和linux kenel 执行文件映像和磁盘映像文件romfs.img,可简单地运行命令:
    # make dep; make
    就行了。可查看/usr/src/uClinux-dist/images/下是否有文件 romfs.img等在/usr/src/uClinux-dist目录下,如果有,表示编译安装成功。

    第3步 用SkyEye运行和调试μClinux内核

    假定SkyEye的工作目录位于/usr/src/uClinux-dist下,首先要进行一些准备工作:

    在工作目录下建立专门用于基于AT91X40开发板的SkyEye硬件配置文件skyeye.conf。一个简单的方法是从SkyEye软件包中的 README文件中截取一块内容(以"FOR AT91 (1) special for uclinux"开始的一行,从它下面第三行开始截取,共取9行)作为skyeye.conf的内容,具体内容如下:

    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R,  addr=0x01400000, size=0x00400000, file=./boot.rom
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
    

    这样我们可以通过如下命令看看在/usr/src/uClinux-dist目录下的skyeye.conf文件是否与上面的内容一致:
    # more /usr/src/uClinux-dist/skyeye.conf
    然后是建立文件系统的联接,需要在目录/usr/src/uClinux-dist目录下执行如下命令:
    #ln -s images/romfs.img boot.rom
    这主要是与skyeye.conf中的内容保持一致,大家可注意skyeye.conf中的第5行。
    完成上述准备工作后,就可以用SkyEye来运行和调试μClinux内核了,我们可以尝试如下命令("#"和"(SkyEye)"后面跟着的字符串是需要使用者输入的):

    # cd /usr/src/uClinux-dist
    # /usr/local/bin/skyeye linux-2.4.x/linux
    (SkyEye)target sim
    cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 
    mach info: name at91, mach_init addr 0x813ebc0
    SKYEYE: use arm7100 mmu ops
    Loaded ROM ./boot.rom
    Connected to the simulator.
    (SkyEye)load
    Loading section .init, size 0xa000 vma 0x1000000
    Loading section .text, size 0xc5cb0 vma 0x100a000
    Loading section .data, size 0x8320 vma 0x10d0000
    Start address 0x1000000
    Transfer rate: 7077504 bits/sec.
    (SkyEye)run
    Starting program: /usr/src/uClinux-dist/linux-2.4.x/linux 
    Linux version 2.4.19-uc1 (root@hpclab.cs.tsinghua.edu.cn) (gcc version 2.95.3 20010315 (release)
    (ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from 
    http://www.snapgear.com/)) #1 Sun Sep 5 12:00:39 HKT 2004
    Processor: Atmel AT91M40xxx revision 0
    Architecture: EB01
    ……
    

    你还可以在run之前给kernel设置断点来调试。

    在使用SkyEye时要注意以下几点:

    a .注意要在 memmap.conf(skyeye-0.2以前版本的配置文件)或skyeye.conf(skyeye-0.2以后版本的配置文件)和boot.rom所在目录下执行skyeye。

    b. memmap.conf 和 skyeye.conf都是skyeye的硬件配置文件。memmap.conf 适用于skyeye0.2以下版本,而skyeye.conf 用于skyeye0.2以上版本。

    c. 运行带网络选项的硬件配置时,注意用户必须为root用户,而且当前的可执行路径中可以搜索到ifconfig命令

    d. 运行带网络选项的硬件配置时,需要编译安装内核模块tuo.o (在RedHat系统中,该模块在/lib/modules/2.4.x/kernel/drivers/net/tun.o)

    e. 请阅读skyeye.conf.txt来获得skyeye.conf的配置选项的含义

    f. 可参考skyeye-binary-testutils-x.x.x.tar.bz2软件包(x.x.x代表其的版本号)中已经设定好的skyeye.conf来配置特定的硬件模拟环境,并可尝试用SkyEye运行这个软件包中编译好的操作系统内核。

    下面是一些skyeye.conf的例子:

    FOR AT91 (0)  special for ucosii
    -------------------------------------------
    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R,  addr=0x01400000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
    FOR AT91 (1) special for μClinux
    -------------------------------------------
    #skyeye config file sample
    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R,  addr=0x01400000, size=0x00400000, file=./boot.rom
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
    #set nic info state=on/off  mac=xx:xx:xx:xx:xx:xx  ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    net: state=on, mac=0:5:3:2:1:f, ethmod=tuntap, hostip=192.168.2.1
    FOR ep7312 (1) special for linux
    -------------------------------------------
    cpu: arm720t
    mach: ep7312
    mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000
    mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00200000
    mem_bank: map=M, type=RW, addr=0xc0200000, size=0x00200000, file=./initrd.img
    mem_bank: map=M, type=RW, addr=0xc0400000, size=0x00c00000
    FOR StrongArm SA1100 (1) speciall for linux
    -------------------------------------------
    cpu: sa1100
    mach: sa1100
    mem_bank: map=I, type=RW, addr=0x80000000, size=0x40000000
    mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
    mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00400000, file=./initrd.img
    mem_bank: map=M, type=RW, addr=0xc0c00000, size=0x01400000
    mem_bank: map=I, type=RW, addr=0xe0000000, size=0x08000000
    #0xe0000000 128M cache flush memory bank 
    


    三.小结

    本文讲解了SkyEye硬件模拟平台的硬件配置选项,以及如何安装使用SkyEye。如果读者能够熟练掌握SkyEye的使用,则会提高开发、调试操作系统等的进度,特别是对操作系统、驱动程序如何与嵌入式硬件系统进行交互有更深刻的了解。

原文地址:http://www.ibm.com/developerworks/cn/linux/l-skyeye/part2/index.html

原文作者:陈渝 (yuchen@tsinghua.edu.cn)清华大学

对于那些想进行嵌入式系统软件开发和学习,或者想研究嵌入式Linux等操作系统和一些底层系统软件(如TCP/IP等)的研究和开发人员来说,可能存在如下几方面的问题:(1)经常苦于经费不足,缺少足够的硬件开发板和完善的软件开发环境,相关的书籍对一些最新软件的分析还不够全面,无法深入研究和开发嵌入式软件。(2)高层次的软件设计和开发一般不用太考虑底层硬件的实现细节,如果直接处于一个具体的硬件环境下,在开发和研究中可能会陷入硬件的具体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。(3)如果硬件开发环境不太稳定(这种情况经常见到),且对具体的硬件不是很了解,则可能在排除问题上花费大量的不必要的时间。(4)如果你想自己尝试设计一个操作系统,则先在一个提供源码级调试的软件仿真器上进行开发,可能会大大提高你的开发进度。<br><br>对于想了解、学习一般操作系统的实现原理,Linux/μCLinux操作系统或TCP/IP等系统级软件的实现的人员,目前一般采用的方法是看书和读源代码,这是一种静态的学习方法,效率较低,比较枯燥,缺少亲自实践的感觉。要想深入分析和开发软件,就要动手编程,不能只是看看书,读读代码,只有通过亲手实践才能够掌握软件设计的核心内容。上面所指出的问题和需求促使SkyEye项目的诞生。 <br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>纯软件的模拟器有许多种,如模拟一个芯片时序逻辑的模拟器、只模拟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和硬件,功能强大,可用于硬件和系统软件的评测。<br><br>SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。这样带来的好处是SkyEye的执行效率更高。SkyEye的推出具有下面三方面的意义:<br><br>通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段,因为SkyEye的整个软件系统都是Open Source的,且基于GPL协议(μCOS-II除外)。因此,如果要学习Linux操作系统或者进行嵌入式系统开发,但苦于没有硬件支持,SkyEye仿真环境软件是一个很好的选择! <br>如果想研究与具体硬件无关的系统软件(如TCP/IP协议栈等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值