RTEMS 4.9.4 CSB337 的 skyeye 仿真环境的建立

(原创,欢迎转载,但请注明出处,谢谢。)

 

因为我一直有自己的开发板,公司有这样的条件,并且开发的代码很多与外设有关系,基本没法用软件仿真,所以基本没用到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.:

  1. 180MHz Ateml AT91RM9200,ARM920T~的~CPU,16KB~的指令~Cache~和~16KB~的数据~Cache;
  2. 32MByte 32~位宽的~SDRAM,8MByte 16~位宽的~Intel 28F640J3A StrataFLASH (NorFlash);
  3. Epson S1D13706 320$/times$240~液晶屏控制器,其内部带~80KB~的帧缓冲区;
  4. 2~个~RS-232~口,其中一个带有完整的握手信号;
  5. 3~个额外的串口,TTL~电平,没有握手信号;
  6. USB~设备接口;
  7. 10/100Mbps~以太网接口,使用~AT91RM9200~内部的~MAC,Phy~使用~LXT971A;
  8. Dallas DS1307~实时时钟芯片,带~56Byte NVRAM;
  9. Infineon SAK82C900~双~CAN~控制器,通过~SPI~连接。

首先去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 。如果您对我所说有疑问,请和我讨论,谢谢。

 

(原创,欢迎转载,但请注明出处,谢谢。)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(网络,cache,Path,开发工具,makefile,reference)