vxworks是美国wind river公司研发嵌入式实时操作方法系统,具有高性能,可裁减性好等特性,能支持几种微处理器(如powerpc,x85,arm,sparc);自问世对来,对其良好町靠性与卓越实时性被广泛地使用于通信,航空,航天等高精尖技术信息及实时性条件极高领域中。bsp(board support package,板级支持包)用处是针对特殊硬件平台,为操作方法系统内核供应操作方法接口,使操作方法系统能够独立于底层硬件。对上层使用屏蔽具体硬件,vxworks高可移植性就是通过bsp解决方案。at91rm9200是atmel公司生产一款arm9核IC,本文重点说明将vxworks移植到该IC过程中bsp定制过程。
1 bsp理念
bsp通常是指针对具体硬件平台,用户所编写运行源代码与部分设备软件驱动程序集合。它所解决方案功能包括初始化与软件驱动部分设备。最基本bsp仅需支持处理器复位,初始化,软件驱动串口与必要时钟处理。bsp是相对于操作方法系统而言,不同操作方法系统对应不同形式bsp,因此,在写bsp时一定要按照条件操作方法系统对bsp定义形式来写。在vxworks系统中,bsp是介于底层硬件环境与vxworks的间一个软件接口,它主要功能是系统加电后初始化目标机硬件与vxworks,并供应部分硬件软件驱动程序。bsp在vxworks系统中层次关系如图1所示。
bsp为各种板卡硬件功能供应了统一软件接口,包括硬件初始化,中断捕捉与处理,硬件时钟与定时器管理,内存地址映射,对及内存分配等。每个bsp还包括一个rom运行或其他运行机制。
2 vxworks引导过程
在编写bsp的前,首先要了解整个系统运行过程。vxworks映像由源代码段,数据段与bss段3部分结合。vxwotks内核能分为3种:可加载种类映像,romvxworks映像与rom驻留型映像。这3种种类映像组织是不一样,因此运行过程有所差别。
可加载映像包括vxworks与boot rom两部分内容,两部分是独立建立。首先,由系统引导源代码把rom引导程序搬到ram_high_adrs。然后,rom引导程序开始启动,将vxworks映像加载到ram_low_adrs,的后跳转到vxworks映像装入点。
romvxworks映像在bsp初始化时,会把lmage完全搬到ram中执行,包括源代码段与数据段。在拷贝执行完毕后,系统控制权转移给ram中vxworks映像初始化源代码。
rom驻留型映像仅仅是将rom中vxworks映像数据段与bss段拷贝到ram中,完成后系统控制权转移给rom/flash里vxworks映像初始化源代码,源代码段留在rom中并在rom中启动。在rom中启动vxworks映像主要足为了节省ram空间,带来不利则是启动速度慢。
图2与图3分别是下载型与rom型vxworks映像初始化过程。
下面临rom型vxworks内核运行过程为例,说明各文件用处:
romlnit()保存运行种类,屏蔽中断;初始化内存与寄存器,屏蔽cache;初始化cpu,将堆栈指针定位于被拷贝boot rom映像在ram地址;跳到romstart()。
rorastart()根据不同映像种类将vxworks映像不同部分解压缩<如果需)并加载到ram中。
usrinit() 对vxworks映像bss段清零;调用intvecbaseset()设置中断矢量基地址表;调用excvecinit()初始化异常中断矢量;调用syshwinit()初始化系统硬件;调用usrkernelinit()初始化wind内核;调用kernellnit()运行wind内核,运行usrroot()任务。
usrroot()设置操作方法系统时钟,建立设备,安装软件驱动,调用syshwinit2()安装系统时钟与辅助时钟中断对及串口等设备中断,初始化i/o,文件系统,调用应用程序软件。
3 vxworks在at91rm9200上bsp设计方案
3.1 at91rm9200介绍
at91rm9200片上资源包括:arm920t处理器棱,16kb内部sram与128kb内部rom存储器;支持sdram,sram,burst flash与compactflash,smartmedia对及nandflash无缝连接;16kb数据cache,16kb指令cache,完全可编程代码外部总线接口ebi,4个32位pio控制器能达到122个可编程代码i/o引脚(每个都有输入控制,可中断及开路输出能力);带有8个优先级,可单独屏蔽中断源先进中断控制器,6组硬件定时器,4个通用同步/异步收发器usart。
3.2 bsp中几个显要文件修改
由于at91rm9200内核是arm920t,所对bsp文件主要在vxworks编泽环境tornado目录target/config/all与target/config/integrator920t文件夹里。其中,a11文件夹里文件对于绝大多数bsp都是共用,普通来说不需修改,特别是“configall.h”;integrator920t文件夹里文件就是所要编写bsp文件,这些文件往往及系统硬件密切关联。
3.2.1 修改makeflie
makefile文件定义编译与链接整个bsp规则,如编译工具选择,编译选项与包含文件路径等;控制生成vxworks映像文件种类,同时含有存储区大小资料,对于存储区大小资料改动必须及config.h对应改动同步。有些型号参数需在该文件中定义,如处理器种类,编译工具,目标地址等。下面说明一些须修改型号参数与地址:
3.2.2 修改config.h
config.h文件包含了所有头文件与及cpu关联特殊定义。vxworks内核组件设置由config.h文件定义。config.h中主要修改内容有定义引导行与修改地址。
(1)定义引导行
其中,mac(o,0)为at91rm9200IC中emac设备;host为主机名;vxworks为要下载文件名;h为主机ip地址;e为目标板ip地址;u为用户名;pw为密码;tn为目标板名称。
(2)修改地址
该文件中地址定义,如rom_text_adrs,rom_size,ram_low_adr,sram_high_size等要及makefik文件中关联定义一致。本设计方案中源代码段存储在连接armIC外部片选cso上flash里面,基地址为oxl0000000,因此.定义如下:
vxworks缺省设置由configall.h来确定。普通来说,缺省设置设置及自行研发硬件系统设置不同,用户可通过cotlfig.h来改变缺省设置。用户须查看configall.h,并在config.h中将不需软硬件设置与初始化去掉。例如,缺省设置中普通包含浮点处理器,而at9lrm9200中没有浮点寄存器,因此就要删掉关联设置。
3.2.3 修改integrator920t.c
该文件中设置所有非可选,及at91rm9200IC关联资料,如各硬件关联寄存器地址定义,设备寄存器中对应位定义,各硬件中断矢量与中断优先级定义,dbug与usart控制,网口定义,系统时钟与辅助时钟型号参数设置等。vxworks所要运用目标板包含设备软件驱动程序头文什应当包含在该文件开始。该文件中各项宏定义均是at91rm9200IC,并根据具体条件定义。例如,电源管理控制器中用到两个锁相环plla与pllb,对它们部分型号参数设定源代码如下:
3 2.4 修改rornlnit.s
该文件包含引导rom与romvxworks映像入口初始化汇编源代码。入口点为rominit()函数,是系统加电运行后首先执行源代码。主要功能是:保存运行种类,使处理器复位;初始化flash与sdram;设置mmu到已知状态;指令cache使能;初始化mmu控制寄存器(指令32位,数据32位,写缓冲使能);开漏写缓冲,并且使指令与数据cache都兀效;通过设置cpsrirq禁止位,fir禁止位与先进中断控制器aic中中断禁止寄存器来屏蔽中断,跳转到bootinit.c中rom-start(),同时传递运行种类。其中,中断屏蔽源代码如下:
在调试这段源代码时,由于串口与网口都没有运行,因此仅仅能通过点灯程序来跟踪程序执行情况,设置不同led亮来显示程序执行到哪一步。例如,如果要并行输入/输出口c32位中第15位亮,则能编程代码为;
在编写本文件时,需注意地方是:不要在该文件里进行过多初始化操作方法,大部分硬件初始化操作方法在syslib.c文件中syshwinit()函数中进行。
3.2.5 修改syslib c
syslib.c是bsp初始化核心源代码。在这个文件中,必须复位所有硬件,使其处于初始化状态,保证后面开中断后不会产生假中断。这个文件包含了由目标机体系构造决定,及系统关于c程序。这些c程序供应板级接口。这些接口,vxworks与应用程序软件构造及系统无关。该文件功能包括:定义了rram,sram,rom,外部片选IC物理地址与虚拟地址;定义中断优先级寄存器中各个位对应优先级;调用syshwinit()初始化串口与网口,安装irq/svc中断堆栈分配程序;总线中断功能等。本文件中有两个显要函数:syshwinit()与syshwinit2()。syshwinit()源代码如下:
syshwinit2()用来连接系统中断,安装isr,进行其他设置。它在初始化系统时钟时,由sysclkconnect()调用,主要用来初始化中断库与中断软件驱动,安装系统时钟与辅助时钟中断对及串口等设备中断。
4 编译生成映像
系统定制完成后,有两种编译方法:一种是在tornado下进行编译,生成映像文件;另一种是直接用make工具编译,但要写好脚本文件。装载到目标板中vxworks映像取决于运用下载方法,其中主要包括对下多种:
①vxworks。这是ram映像,vxworks需通过目标板上引导程序从串口或网口把它下载到目标板ram中启动。在tornado研发环境下,这是一个默认选项,主要用在调试阶段。运用宿主机上windsh工具与符号表。
②vxworks.st。这也是ram映像,需通过引导rom把vxworks映像下载到目标机内存中才能执行。该对象文件内置符号表。
③vxworks_rom。这是一个非压缩,rom映像。在这个对象文件执行前,先把自己拷贝到目标机ram中。这种种类映像通常在运行阶段速度相比较慢,因为源代码在rom中执行,但执行阶段比rom驻留型映像要快。
④vxworks.st_rom。这是rom压缩vxworks映像。它在执行前先把自己解压并拷贝到目标机ram中执行。
⑤vxworks.res_rom。这是rom驻留型非压缩vxworks映像。它在执行前把数据段拷贝到目标机ram中。这种种类映像在运行阶段相比较快,但在目标机上执行速度比rom种类映像慢(因为cpu访问rom比访问ram要慢)。通常在ram空间相比较小目标机上运用这种种类映像。
5 需注意难题
首先,应该避免在rominit.s中进行过多初始化操作方法。该史件中仅仅是进行必要最小硬件初始化,大部分硬件初始化都是在syshwinit()中完成。另外,romtnit.s中源代码不应当被其他模块或函数调用。
其次,应该避免sysalib.s中工作太少。bsp研发人员通常错误地认为在rominit.s里初始化过设备不需在sysalib.s中从新初始化。实际上,vxworks映像并不认为它是由引导映像程序引导,因此,它必须从新设置与初始化所有它自己需运用设备。sysinit()是该文件中最主要一个函数,也是第一个函数。该例程中很多工作及rominit()是相同,目是保证内核映像在启动及冷运行时,软硬件环境高度一致。
最后,对特定bsf。软件驱动程序修改,仅仅能在特定bsp目录下。此设计方案中目录为target/config/integra-tor920t,不要直接在target/src/drv对及target/h/drv中修改。仅仅有风河公司源程序才能存放在这些目录下。
6 结论
本文在说明bsp理念,用处与vxworks映像类别对及系统运行过程基础上,对atmel公司生产arm9处理器at91rm9200为例,重点说明了vxworksbsp设计方案中需修改几个显要文件,最后提出了需注意难题。尽管目标板硬件不同,bsp解决方案也不尽相同,但基本思想是一样。本设计方案对各类研发板系统移植与后续应用程序软件研发有一定参考价值