09年我接触到 RTEMS,然后开始学习RTEMS,自己先后将 RTEMS移植到 AT91SAM9260的单板上,然后又移植到 Marvell 的 88F6281 的单板上。通过这两个移植,大量的阅读RTEMS 的手册,算是入了点门。
于是乎,把 AT91SAM9260 的RTEMS 4.9.4 BSP 撰写的整个过程与调试过程与大家分享。
开发 BSP的过程大致如下:
1.选择BSP模板,根据操作系统提供的BSP模板,选择与应用硬件环境最为相似的参考设计,针对具体的目标机对参考BSP进行必要的修改,形成自己的BSP;
2.建立新BSP目录。将模板BSP整个目录拷贝到适当的目录下(如 libbsp/arm/),重命名为at9260;
3.建立BSP配置文件。拷贝任意一个BSP.cfg,重命名为at9260.cfg,修改相关的体系结构定义;
4.修改启动代码、中断代码、调试串口的驱动、时钟系统的驱动、基本的CPU初始化、设置中断堆栈等;
5.修改autotools的宏;
6.修改链接脚本;
7.配置编译安装RTEMS的库;
8.针对应用裁剪RTEMS;
9.编译调试和测试。
开发AT91SAM9260的BSP
1.AT91SAM9260属于arm926ej-s,csb337是目前rtems支持arm版本最高的bsp,为arm920t,故选择csb337为模板修改
2.将c/src/lib/libbsp/arm/csb337复制为 c/src/lib/libbsp/arm/at9260
3.将c/src/lib/libcpu/arm/at91rm9200复制为c/src/lib/libcpu/arm/at91sam9260
注意:bsp的命名,由于bsp的名称需要出现在autotools宏中,所以,名称不能以数字开头,要符合autotools名称的命名规范。
将make/custom/csb337.cfg 复制为make/custom/at9260.cfg,文件内容修改如下:
#
# Config file for ZWJ4 - at91sam9260
#
# $Id: at9260.cfg,v 1.0 2009/12/1 Bacon Xu$
#
include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU=arm
RTEMS_CPU_MODEL=at91sam9260
# This is the actual bsp directory used during the build process.
RTEMS_BSP_FAMILY=at9260
# This contains the compiler options necessary to select the CPU model
# and (hopefully) optimize for it.
CPU_CFLAGS = -mcpu=arm920 -mstructure-size-boundary=8
# optimize flag: typically -O2
CFLAGS_OPTIMIZE_V = -O0 -g
这里注意:rtems 4.9 使用的gcc 版本是 4.3.2,对于4.3.2支持的CPU类型,可以查看《GNU gcc manual 4.3.2》的相关章节。
虽然gcc支持at91sam9260的arm926ej-s,可以这么写 -mcpu=arm926ej-s。但我在编译中发现:rtems4.9.1的版本 -mcpu=arm926ej-s 没有问题,但是 rtems4.9.4中就有编译问题,猜测可能是自动脚本没有生成相应的配置宏造成的问题。
所以,rtems4.9.4版本中我使用了 -mcpu=arm920 。
为了调试方便,尽量使用 -O0 的优化选项;
如果为了速度和性能,可选用 -O2 的选项;
如果为了生成执行体的体积,可以选择-Os 的选项。
(未完待续。。。下次讲修改相关代码。。。)