1.简介 SkyEye是一个开源软件项目,它是在Linux和Windows平台上实现一个纯软件模拟集成开发环境,模拟常见的嵌入式系统。可以在SkyEye上运行Linux,uClinux以及uC/OS-II等多款嵌入式操作系统和各种系统软件。 目前最新版本的SkyEye是skyeye-1.2-RC6.tar.bz2版本,该版本可以从www.skyeye.org获取。SkyEye目前支持多款嵌入式处理器: ATMEL AT91X40 PHILIPS LPC2xxxx Samsung s3c4510b Samsung s3c44b0 Cirrus Logic EP7312 sharp LH79520 Cirrus Logic EP9312 cs89712 sa1100 xscale pxa250 lubbock developboard xscale pxa270 mainstone developboard at91RM9200 s3c2410x s3c2440 sharp lh7a400 developbaord NetSilicon ns9750 Philips LPC2210
对于附加设备该项目已经完成对Flash,LCD,Network Interface Card,touchsceen, UART的支持
2.SkyEye的安装 下面我就以最新版本的skyeye-1.2.RC6为例子安装SkyEye. 我的系统配置入下 操作系统: Radhat 9 Linux(2.4.x) GCC Version: 3.3.2 arm-elf-tools-20030314.sh arm-elf-gcc Version: 2.95.3 20030314
首先从www.uClinux.org下载arm-elf-tools,里面包含arm-elf-gcc, arm-elf-ld等工具。下载后可以通过如下方式安装: $su -c './arm-elf-tools-20030314.sh' $password:
安装完毕后,可以进入存放skyeye的目录,例如我的是放在/home/skyily/download/目录。然后进行解压。 $cd ~/download $ls skyeye-1.2-RC6.tar.bz2
$tar jxvf skyeye-1.2-RC6-tar.bz2
然后进入解压的skyeye目录 $cd skyeye-v1
最后使用make命令进行软件的安装,编译完毕后会在binary生成一个skyeye可执行文件,该文件就是skyeye模拟器了。 使用make命令的时候可以加入一些选项参数,例如: 不允许DBCT $make NO_DBCT=1
不支持LCD $make NO_LCD=1
不支持BFD库 $make NO_BFD=1
不支持网络设备 $make NO_NET=1
如果在binary目录下生成了skyeye文件,那么安装成功。下面我以uClinux为例子,在skyeye上模拟。 可以通过使用-h参数来获取帮助 $skyeye -h ------------------------- SkyEye -V1.2 --------------------------- Usage: SkyEye [options] -e program [program args] Default mode is STANDALONE mode ------------------------------------------------------------------ Options: -e exec-file the (ELF executable format)kernel file name. -d in GDB Server mode (can be connected by GDB). -c config-file the skyeye configure file name. -h This Help Display -v This shows arch and cpu supported ------------------------------------------------------------------ -e 指定elf各式的内核文件 -d GDB调试模式 -c 指定配置文件 -h 获取帮助 -v 显示体系结构和CPU支持信息(不知道是不是我用的这个版本没有实现该功能,使用-v选项后显示:Unknown option '-v')
3.uClinux移植 从www.uclinux.org网站上下载比较新的内核包文件,并且解压。 $tar xvzf uClinux-dist-xxxxxxxx.tar.gz 进入生成的uClinux-dist目录 可以使用make xconfig - 图形配置模式,make menuconfig - 菜单模式配置,方式来配置uClinux. 在uClinux-dist目录下执行: $make xconfig
在Target Platform Selection选项卡中选择: Vendor/Product: GDB/ARMulator //
Kernel Version: linux-2.4.x Libc Version: uClibc 然后选择save and exit //************这里的kernel和user 自己配置
完成配置后,可以使用make dep建立内核依赖关系,然后使用make编译内核和文件系统 $ make dep $ make lib_only $ make user_only $ make romfs $ make (期间会有错误,依照“uclinux编译常见错误”中查找----并将其解决) 经一段时间的编译后,则在uClinux-dist目录下的images目录里会建立如下几个文件: image.bin linux.data linux.text. romfs.img 该romfs.img就是我们需要的文件系统映象了 同时,在uClinux-dist/linux-2.4.x/目录下会生成linux,该文件是一个我们需要模拟的内核文件。
接下来我们可以使用skyeye软件来模拟我们编译的uClinux系统了。 我们在uClinux-dist目录下建立一个名为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=images/romfs.img 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 lcd: state=on
保存退出
然后在uClinux-dist目录里执行~/download/skyeye-v1/binary/skyeye -e linux-2.4.x/linux 看看uclinux是不是跑起来了? 下面是我的输出 (证明我的可以)
arch: arm cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x80727e0 can't find device module: (null) SKYEYE: use arm7100 mmu ops Loaded ROM images/romfs.img exec file "linux-2.4.x/linux"'s format is elf32-little. load section .init: addr = 0x01000000 size = 0x0000a000. load section .text: addr = 0x0100a000 size = 0x000c5ca0. load section .data: addr = 0x010d0000 size = 0x00008320. not load section .bss: addr = 0x010d8320 size = 0x00022198 . not load section .debug_abbrev: addr = 0x00000000 size = 0x00039846 . not load section .debug_info: addr = 0x00000000 size = 0x016b812f . not load section .debug_line: addr = 0x00000000 size = 0x00378ef3 . not load section .debug_pubnames: addr = 0x00000000 size = 0x0000b40d . not load section .debug_aranges: addr = 0x00000000 size = 0x000022e0 . start addr is set to 0x01000000 by exec file. Linux version 2.4.19-uc1 (jelly@localhost.localdomain) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from )) #1 五 4#1 五 4月 7 23:41:40 CST 2006
Processor: Atmel AT91M40xxx revision 0 Architecture: EB01 On node 0 totalpages: 1024 zone(0): 0 pages. zone(1): 1024 pages. zone(2): 0 pages. Kernel command line: root=/dev/rom0 Calibrating delay loop... 12.97 BogoMIPS Memory: 4MB = 4MB total Memory: 3036KB available (791K code, 170K data, 40K init) Dentry cache hash table entries: 512 (order: 0, 4096 bytes) Inode cache hash table entries: 512 (order: 0, 4096 bytes) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 1024 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd Atmel USART driver version 0.99 ttyS0 at 0xfffd0000 (irq = 2) is a builtin Atmel APB USART ttyS1 at 0xfffcc000 (irq = 3) is a builtin Atmel APB USART Blkmem copyright 1998,1999 D. Jeff Dionne Blkmem copyright 1998 Kenneth Albanowski Blkmem 1 disk images: 0: 1400000-145DBFF [VIRTUAL 1400000-145DBFF] (RO) RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 512 bind 512) NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. VFS: Mounted root (romfs filesystem) readonly. Shell invoked to run file: /etc/rc Command: hostname GDB-ARMulator Command: /bin/expand /etc/ramfs.img /dev/ram0 Command: mount -t proc proc /proc Command: mount -t ext2 /dev/ram0 /var Command: mkdir /var/tmp Command: mkdir /var/log Command: mkdir /var/run Command: mkdir /var/lock Command: cat /etc/motd Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_|
GDB/ARMulator support by <davidm@snapgear.com> For further information check: http://
Execution Finished, Exiting
Sash command shell (version 1.1.1) />
对于skyeye.conf文件的一点说明 对于skyeye-v0.2.5版本之前的skyeye使用的是memmap.conf文件,而之后的是使用skyeye.conf文件 cpu: 指定CPU类型,如arm7tdmi,arm720t等 mach: 开发板类型,如at91, ep7312 mem_bank: 内存块 map=M 指定为rom/ram, map=I 指定为IO空间 type=RW 可读写,type=R 只读 addr=0x00000000 内存块开始地址 size=0x10000000 内存块大小 files=romfs.img 文件系统映象文件 net: 网络配置 state=on 模拟NIC,等于off则不模拟 mac=0:4:3:2:1:f 指定MAC地址 ethmod=tuntap/vnet 使用虚拟驱动 hostip= 指定ip地址 例如:net: state = on, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1
uart: 串口支持 fd_in= 指定输入文件 fd_out= 指定输出文件 例如:uart: fd_in=/dev/ttyS0, fd_out=/dev/ttyS0 则你可以使用minicon来监听COM1口来进行数据交换
LCD:LCD模拟 state = on/off 打开或者关闭LCD模拟
4.SkyEye调试功能 要使用SkeyEye调试功能,可以在执行的时候加入-d参数,例如: $skyeye -e linux -d 这时就在本机的12345端口开启了gdb服务
这时重新开一个终端程序 $arm-elf-gdb linux (gdb)target remote 127.0.0.1:12345 此时就可以象使用本地gdb一样来调试服务端的uClinux了。
5.参考文档 1.skyeye源码 2.SkyEye User Manual http://skyeye.sourceforge.net/wiki/UserManual 3.skyeyelcdts http://gro.clinux.org/frs/download.php/789/SkyEyelcdtouchscreen4gro.pdf 4.skyeyeinternal http://gro.clinux.org/frs/download.php/719/skyeyeinternal-0.6.8.pdf 5.hardwaredoc4skyeye http://gro.clinux.org/frs/download.php/835/hardwaredoc4skyeye.tar.bz2
本文来自CSDN博客:http://blog.csdn.net/freedom1013/archive/2006/10/07/1324386.aspx
|