1、ARM开发学习使用SkyEye仿真学习使用SkyEye仿真 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。以下操作均在Fedora Core 1.0里通过。文档摘要:1、什么是SkyEye?2、SkyEye可以做什么事情?3、安装SkyEye4、安装arm-elf交叉编译器5、测试你的arm-elf-gcc编译器6、执行你的hello程序7、编译并运行uClinux-dist-20030909.tar.gz8、加入网络功能9、安装完成SkyEye后,下一步将做什学习使用SkyEye仿真 SkyEye是一个可以运行嵌入式操作系统的硬件仿
2、真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。以下操作均在Fedora Core 1.0里通过。文档摘要:1、什么是SkyEye?2、SkyEye可以做什么事情?3、安装SkyEye4、安装arm-elf交叉编译器5、测试你的arm-elf-gcc编译器6、执行你的hello程序7、编译并运行uClinux-dist-20030909.tar.gz8、加入网络功能9、安装完成SkyEye后,下一步将做什么?1、什么是SkyEye?SkyEye 是开源软件的一个项目,SkyEye的目标是在Linux和Windows操作系统里提供一个完全的仿真环境。SkyEye仿真环境相当于一个嵌入式
3、计算机系统,你可以在SkyEye里运行一些嵌入式Linux操作系统,如ARMLinux,uClinux,uc/OS-II(ucos-ii)等,并能分析和调试它们的源代码。如果你想知道关于SkyEye和嵌入式系统更详细的信息,请访问下面的站点:www.SkyEye.orghttp:/www.skyeye.org/index_cn.html通过SkyEye能仿真下面的硬件:CPU核心:ARM7TDMI, ARM720T, ARM9, StrongARM, XScaleCPU: Atmel AT91/X40, Cirrus CIRRUS LOGIC EP7312, Intel SA1100/SA11
4、10, Intel XScale PXA 250/255, CS89712, samsung 4510B, samsung 44B0(还不全)内存: RAM, ROM, Flash周边设备: Timer, UART, ne2k网络芯片, LCD, 触摸屏等目前能在SkyEye上运行下面的操作系统和系统软件:uC/OSII-2.5.x(支持网络)uClinux(基于Linux2.4.x内核, 支持网络)ARM Linux 2.4.x/2.6.xlwIP on uC/OSII基于uC/OSII, uClinux, ARM Linux的应用程序2.SkyEye可以做什么事情?1. 通过SkyEye可
5、以帮助促进嵌入式系统的学习,在不需要额外硬件的情况下学习和分析uclinux操作系统和其它嵌入式操作系统,如ucosII等。2. SkyEye可用于嵌入式系统的教学。3. 希望通过skyeye促进操作系统的研究,如ucosII,uclinux+RTAI,uclinux2.5.x等。4. 可以基于SkyEye进行仿真特定硬件模块的研究。5. SkyEye可以作为嵌入式集成开发环境开发嵌入式系统(当然需要对SkyEye做大量的工作)。注:引自陈渝SkyEye Project FAQ3、安装SkyEye到http:/gro.clinux.org/projects/skyeye/下载skyeye-0.
6、7.0.tar.bz2包:tar jxvf skyeye-v0.7.0.tar.bz2进入解压后的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,则运行下面的命令:./configure -target=arm-elf -prefix=/usr/local接下来执行:makemake install安装完成后执行sky
7、eye注意:a.如果你使用的是Mandrake Linux发行版,那么你在编译SkyEye时遇到错误,并且错误与readline, ncurse, termcap等有关,你可以试试下面的方法:ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h接着再make和make install看能否成功!b.如果你的Linux发行版是Debian Linux,那么不要使用gcc 2.95或是gcc 3.0,请使用gcc 3.2+c.gcc的版本要在2.96或以上d.如果SkyEye的版本大于0.6.0,那么使用LCD仿真需要在
8、Linux系统里安装GTK软件。4、安装arm-elf交叉编译器下载arm-elf-tools-20030314.shftp:/166.111.68.183/pub/embed/uclinux/soft/tools/arm或到ftp:/166.111.8.229/OS/Embeded执行:chmod a+x arm-elf-tools-20030314.sh然后:./arm-elf-tools-20030314.shls /usr/local/bin/你应能看到以arm-elf开头的可执行文件,其中arm-elf-gcc就是用来编译你目标平台的编译器的,当然还有一些小工具,后面将一一讲来。5、
9、测试你的arm-elf-gcc编译器先写一个小程序hello.cPHP源码: #include int main(void)int i;for(i = 0; i = -Wl,-elf2fltLIBS =OBJS = hello.oall:hellohello:$(OBJS)$(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS) $(LIBS)clean:rm -rf *.o *.elf *.gdb hello# end如果编译通过,就会产生hello可执行文件。用下面的命令:file hello你会发现,它是BFLT(binary FLAT),你目标平台所支持的
10、文件格式。6、执行你的hello程序这里,我们将借助genromfs这个小工具来完成测试,这个工具就是你在安装交叉编译器时产生的,你可以直接使用它。到http:/gro.clinux.org/projects/skye.0.4.tar.bz2包:tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2cd testsuits/at91/uclinux2(当然你还可以用别的)mkdir romfs(建一个目录,后面用)mount -o loop boot.rom /mnt/xxxcp -r /mnt/xxx/* romfs另外,把你编译好的可执行程序拷贝到/r
11、omfs/bin目录里,这里就是hello了!genromfs -f boot.rom -d romfs/注:可以用genromf -h来获得帮助!OK!执行下面的命令:skyeye linux(skyeye)target sim(skyeye)load(skyeye)runkernel start.很熟悉了吧。cd /binhello可以看到结果了吗?其实到了这一步,你就可以开发自己的程序了!7、编译并运行uClinux-dist-20030909.tar.gz到ftp:/166.111.68.183/pub/embed/uclinux/soft/或到ftp:/166.111.8.229/O
12、S/Embeded/uclinux/pub/uClinux/dist下载uClinux-dist-20030909.tar.gz假设把它下载到/usr/src/目录下,然后依次执行下面的命令:tar zxvf uClinux-dist-20030909.tar.gzcd uClinux-dist/在图形方式下可用命令make xconfig或在命令行方式下用命令make menuconfigvendor/product中选择GDB/ARMulatorkernel版本选择2.4然后save and exit运行下面这两条命:make depmake此时在/usr/src/uClinux-dist
13、/linux-2.4.x目录下会生成可执行文件linux在/usr/src/uClinux-dist/images/会生成romfs.img等文件在uClinux-dist目录下建立仿真AT91的skyeye配置文件skyeye.conf,内容如下:cpu: arm7tdmimach: at91mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000mem_bank: map=M, type=R, addr=0x0140
14、0000, size=0x00400000, file=images/romfs.imgmem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000这个时候就可以用skyeye来调试运行kerne
15、l了,在/usr/src/uClinux-dist执行如下命令:skyeye linux-2.4.x/linux(skyeye)target sim(skyeye)load(skyeye)runkernel start.注意:要在skyeye.conf所在目录下执行skyeye linux-2.4.x/linux8、加入网络功能a.用root用户进行操作。b.你要看你的/lib/modules/uname -r/kernel/drivers/net/目录里有没有tun.o如果没有的话你就需要编译你的linux内核来获得tun.o了。c.(1)运行tun设备模块:#insmod /lib/mod
16、ules/uname -r/kernel/drivers/net/tun.o如果你没有该设备,那你就要用下面的命令来创建它:#mkdir /dev/net#mknod /dev/net/tun c 10 200(2)运行vnet(虚拟集线器)设备模块(这一步不是必需的):获取vnet的源码,然后创建设备:#mknod /dev/net/vnet c 10 201#chmod 666 /dev/net/vnet创建vnet.o#make vnet.o插入模块vnet.o#insmod vnet.o进入test目录,用test来测度vnet.o#cd test#make#./testvnet1d.
17、配置skyeye.conf文件cpu: arm7tdmimach: at91mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.imgmem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000mem_bank
18、: map=M, type=RW, addr=0x02400000, size=0x00008000mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000# format: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.ddnet: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=1
19、0.0.0.1下面将对上面的一些参数作下说明:state=on/off意思是仿真的NIC(网络接口板)是有线的还是无线的;mac=仿真适配器的MAC地址;ethmod=tuntap/vnet在主机环境里使用的虚拟设备;hostip=意思是主机环境与keyeye交互用的IP格式: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.ddFor example:#set nic info state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=d
20、d.dd.dd.ddnet: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=10.0.0.1或net: state=on, mac=0:4:3:2:1:f, ethmod=vnet, hostip=10.0.0.1注意:如果你想在同一时刻运行两个或更多的skyeye,那么请为每一个skyeye使用不同的skyeye.confe.运行skyeye linux-2.4.x/linux9、安装完成SkyEye后,下一步将做什么?1、对于嵌入式操作系统的初学者和入门者和入门的学生而言,他们可以先看一些有关操作系统和嵌入式操作系统方面的教材和书籍,如与uC/
21、OS、Minix、 uClinux、Linux相关的书籍等。然后可以在Skyeye上开发一些简单的应用程序例子(如进程间通信、进程优先级、死锁情况、网络应用等),对某些操作系统功能(如进程调度、内存管理、网络子系统、文件子系统等)进行简单的修改和扩展,并通过Skyeye进行运行和调试,看看会发生什么情况。2、对于有一定经验的软件工程师而言,在SkyEye上完成一定的应用系统原型开发是值得一做的事情。比如移植或开发一个文件子系统或网络子系统到一个特定的操作系统中,相信比在一个真实的开发板上开发要容易一些。在Skyeye上进行一些操作系统的移植和开发(如移植RTLinux、RTAI等其它操作系统到
22、Skyeye上)也是很有挑战性的工作。3、对于硬件工程师而言,对Skyeye进行扩充,设计新的硬件仿真(如USB、IDE硬盘等)使得Skyeye的硬件仿真功能更加强大,支持更多功能的软件,是很有意义的事情。参考:SkyEye项目站点里的一篇中文文档;陈渝SkyEye Project FAQ;skyeye-0.7.0中的README文档。后记:为了让大家能快速上手,进行实际的开发工作,我赶凑了一篇文档,很粗糙。但我坚信随着更多的有经验的人的加入;随着我们自己水平的提高,一定会出现更多、更好的文章来。就让我们快点行动起来吧!最后,我再次建议大家看一下嵌入式Linux技术与应用这本书。可以到http
23、:/www.skyeye.org/document.htm或是ftp:/166.111.68.183/pub/embed/skyeye/document/或是http:/www.huihoo.org/mirrors/skyeye/下载文档,可以获得更多有关skyeye和嵌入式Linux开发的知识和经。 如果编译通过,就会产生hello可执行文件。用下面的命令:file hello你会发现,它是BFLT(binary FLAT),你目标平台所支持的文件格式。6、执行你的hello程序这里,我们将借助genromfs这个小工具来完成测试,这个工具就是你在安装交叉编译器时产生的,你可以直接使用它。到
24、http:/gro.clinux.org/projects/skye.0.4.tar.bz2包:tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2cd testsuits/at91/uclinux2(当然你还可以用别的)mkdir romfs(建一个目录,后面用)mount -o loop boot.rom /mnt/xxxcp -r /mnt/xxx/* romfs另外,把你编译好的可执行程序拷贝到/romfs/bin目录里,这里就是hello了!genromfs -f boot.rom -d romfs/注:可以用genromf -h来获得帮助!O
25、K!执行下面的命令:skyeye linux(skyeye)target sim(skyeye)load(skyeye)runkernel start.很熟悉了吧。cd /binhello可以看到结果了吗?其实到了这一步,你就可以开发自己的程序了!7、编译并运行uClinux-dist-20030909.tar.gz到ftp:/166.111.68.183/pub/embed/uclinux/soft/或到ftp:/166.111.8.229/OS/Embeded/uclinux/pub/uClinux/dist下载uClinux-dist-20030909.tar.gz假设把它下载到/usr
26、/src/目录下,然后依次执行下面的命令:tar zxvf uClinux-dist-20030909.tar.gzcd uClinux-dist/在图形方式下可用命令make xconfig或在命令行方式下用命令make menuconfigvendor/product中选择GDB/ARMulatorkernel版本选择2.4然后save and exit运行下面这两条命:make depmake此时在/usr/src/uClinux-dist/linux-2.4.x目录下会生成可执行文件linux在/usr/src/uClinux-dist/images/会生成romfs.img等文件在u
27、Clinux-dist目录下建立仿真AT91的skyeye配置文件skyeye.conf,内容如下:cpu: arm7tdmimach: at91mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.imgmem_bank: map=M, type=RW, addr=
28、0x02000000, size=0x00400000mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000这个时候就可以用skyeye来调试运行kernel了,在/usr/src/uClinux-dist执行如下命令:skyeye linux-2.4.x/linux(skyeye)target sim(skyeye)load(skyeye)runkernel start.注意:要在skyeye.conf所在目录下执行skyeye linux-2.4.x/linux8、加入网络功能a.用root用户进行操作。b.你要看你的/lib/modules/uname -r/kernel/drivers/net/目录里有没有tun.o如果没有的话你就需要编译你的linux内核来获得tun.o了。c.(1)运行tun设备模块:#insmod
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1