(原创,欢迎转载,但请注明出处,谢谢。)
因为我一直有自己的开发板,公司有这样的条件,并且开发的代码很多与外设有关系,基本没法用软件仿真,所以基本没用到skyeye。
最近忙着写rtems的文章,有朋友问我,怎样用rtems跑skyeye.去官网上一看,他们的确也用skyeye跑rtems,而且工作的很好。于是自己也下了个skyeye进行仿真,发现过程非常曲折,只是简单的跑个 hello world 可以,跑稍微复杂一点的代码,就不行了。自己一点点把这个问题解决了,把文章写出来,和大家分享。
目前,网络我还没跑成功,网络部分还等等,我再研究研究。
这里先介绍一下csb337:
CSB337~是~Cogent Computer Systems, Inc.~推出的一款基于~ATEML AT91RM9200~的开发板。它具有以下主要特性
Cogent. Cogent CSB337 Atmel AT91RM9200 OEM Single Board Computer Hardware Reference Manual [M]. Cogent Computer Systems, Inc.:
首先去http://www.skyeye.org/ 网站去下载 skyeye, 这里对版本有要求,skyeye 1.2.2
稍后我会说到为什么不用高版本的skyeye。
rtems 4.9.4 中自带了 csb337 的bsp,不需要我辛辛苦苦的去撰写调试了,直接拿来就能用。
请参照前几期写的文章建立rtems 的开发环境,我是在linux fc8下做的开发。
解压缩 rtems 4.9.4,进入rtems-4.9.4文件夹,键入以下命令:
export PATH=/opt/rtems-4.9/bin:$PATH
mkdir csb337
cd csb337
../configure --target=arm-rtems4.9 --disable-posix --enable-cxx --enable-networking --enable-rtemsbsp=csb337 --prefix=/opt/rtems-4.9
make all install
速度快的话,不到3分钟就应该解决战斗,成功安装 csb337 的BSP。
下面开始编译 skyeye 1.2.2
解压缩 skyeye1.2.2
进入skyeye1.2.2的目录
直接 make 就好了
成功了会在 binary下生成一个skyeye可执行文件。将skyeye拷贝到rtems的开发工具路径下:
cp binary/skyeye /opt/rtems-4.9/bin
拷贝完成后,下载rtems的demo代码。
http://www.rtems.com/ftp/pub/rtems/4.9.4/class-examples-4.9.4.tar.bz2
解压缩后,进入class-examples-4.9.4/hello_world_c文件夹,
键入以下命令
export RTEMS_MAKEFILE_PATH=/opt/rtems-4.9/arm-rtems4.9/csb337
make clean;make
应该成功 编译,在该文件夹下生成一个o-optimize的文件夹。
建立skyeye的配置命令
cpu: arm920t mach: at91rm92 mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000 mem_bank: map=M, type=R, addr=0x00100000, size=0x00010000 mem_bank: map=M, type=RW, addr=0x00200000,size=0x00100000 mem_bank: map=M, type=RW, addr=0x20000000,size=0x01000000 mem_bank: map=I, type=RW, addr=0xfffa0000, size=0x00060000
该文件命名为skyeye.conf,就保存在 /opt/rtems-4.9/bin下
键入命令:
skyeye -c /opt/rtems-4.9/bin/skyeye.conf -e o-optimize/hello.exe
以为能看到激动人心的 Hello World!,结果是什么也没有。
无奈之下寻找问题,csb337在成熟的硬件上跑过,应该不是rtems4.9的问题,问题应该在skyeye 1.2.2上。
于是,翻开skyeye 1.2.2的关于at91rm92的代码,才知道由于skyeye没有实现全部的at91rm92的硬件,调试串口没有实现,也没有全部实现at91rm92的AIU。所以才如此狼狈。
所以,从rtems官方的邮件列表中找到skyeye1.2.2关于csb337的补丁,然后打上。
重行编译 skyeye,顺利的看到了 Hello world.
然后,执行其他的测试用例,如class-examples-4.9.4/ticker,都可以成功。
说明没有问题了。
但是我下载http://www.rtems.com/ftp/pub/rtems/4.9.4/network-demos-4.9.4.tar.bz2,却没有执行成功的。
仔细查阅,skyeye并没有实现at91rm92的EMAC部分,故而也不可能实现网络通信。
于是考虑skyeye 1.3.2 版本应该解决了这个问题了吧。可是从官网上下载了skyeye 1.3.2,经过漫长的编译。
发现skyeye 1.3.2 连 ticker 示例都不能正常运行,更不用说网络示例了。
究其原应,也是没有实现全功能的AIU(高级中断管理单元所致),但skyeye 1.3.2关于at91rm92代码好像和lpc的合并到一起了。
我还没时间细看修改。先用skyeye 1.2.2编写一些任务级别的代码吧……可以动手做一些试验了,不必在真实的开发板上较劲了。
我已经将skyeye 1.2.2 打过补丁了,已经上传到csdn的资源上。有需要的朋友,可以从csdn资源站下载 http://download.csdn.net/source/2961509 。如果您对我所说有疑问,请和我讨论,谢谢。
(原创,欢迎转载,但请注明出处,谢谢。)