2008年10月19日星期日

Makefile的宏定义

Makefile文件控制镜像的创建,在Makefile文件里使用了将近135个宏,最简单的Makefile文件要包含以下的宏:

・CPU
:目标板CPU的类型;

・TOOL
:主机的make工具,为GNU

・TGT_DIR
target路径,默认为$(WIND_BASE)/target

・TARGET_DIR
BSP目录名;

・VENDER
:目标板生产商名;

・BOARD
:目标板名;

・ROM_TEXT_ADRS
boot ROM的入口地址(16进制表示,并且与config.h文件定义相同)

・ROM_SIZE
ROM的大小;

・RAM_LOW_ADRS
:加载vxWorks的目标地址;

・RAM_HIGH_ADRS
boot ROM拷贝到RAM的目标地址;

・HEX_FLAGS
:特殊结构的标记,用于产生S-记录文件;

・MACH_EXTRA
:扩展文件,用户可以加入自己的目标模块;

除此以外,Makefile文件还需要包括以下文件:

・$(TGT_DIR)/h/make/defs.bsp
Vxworks系统运行的标准变量定义;

・$(TGT_DIR)/h/make/make.$(CPU)$(TOOL)
:提供了特别的目标机结构和一套编译工具,如make. ARM7TDMI_Tgnu

・$(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE)
:提供了与主机系统有关的定义;

・rules.bsp
:在创建目标文件时所需要的规则;

・rules. $(WIND_HOST_TYPE)
:指出创建目标文件时所需的从属文件表;

如果没有用all目录下的文件而是拷贝到bspname下修改并使用,需要定义与这些文件有关的宏,如

BOOTINIT=bootInit.c

这样在创建镜像时就不会用all目录下的文件而使用bspname目录下的相应文件了;

Makefile文件里凡是16进制数前面都无需加"0x"

bspname.h

根据具体目标板设置串行接口、时钟以及I/O设备等。在该文件中必须包含以下内容:

中断向量/级别

・I/O
设备地址

设备寄存器位的含义

系统和附加时钟参数(最大和最小速率)

config.h

根据目标板的具体情况配置宏定义,注意ROM_TEXT_ADRSROM_SIZERAM_LOW_ADRSRAM_HIGH_ADRS要与Makefile文件里定义的一致,LOCAL_MEM_LOCAL_ADRSLOCAL_MEM_SIZE要正确。

romInit.s

这是系统上电后运行的第一个程序,根据具体目标板对寄存器和CPU进行设置;以CPUARM7TDMI为例,romInit.s 需要进行的工作有:

保存启动方式:对于冷启动,如果CPU配置的是HIGH VECTORS,就设置入口地址为0xFFFF0000,否则设置入口地址为0x00000000

屏蔽中断:通过设置cpsrI_BITF_BIT都为1来实现,还要设置中断寄存器为关模式,同时设定运行模式为SVC32模式;

初始化堆栈指针pcsp:堆栈指针sp指向STACK_ADRS,这个宏的定义为当镜像为驻留ROM时,该宏值为_sdata,当镜像为非驻留ROM时该宏值为_romInit,这两个地址经过地址映射后都指向被拷贝镜像在RAM的目标地址;

初始化cache,屏蔽cache

根据具体目标板的需要初始化其他寄存器;

指针跳转到romStart()函数并执行;

bootConfig.c

一般不需要用户修改,也可以根据具体情况做适当修改;

sysALib.s

romInit.s文件实现的功能相似,但如果在romInit.s文件里对DRAM和内存控制器进行了初始化在这里不再进行这项工作;

创建VxWorks镜像

根据具体需要在命令行环境下利用Makefile创建各种镜像,也可以在Tornado的集成环境下Build菜单中选择Build Boot ROM来创建各种类型的Boot ROM

除此以外,如果系统硬件包括串口,还要根据具体情况修改sysSerial.c文件;如果包含网络部分要修改configNet.h;如果包含NVRAM要修改bootnv.h文件。总之,BSP的开发要根据具体目标板的硬件进行。



结语

我们已经利用基于VxWorksBSP开发包成功的进行了线缆调制解调器的底层软件开发。在开发过程中深感BSP在整个系统软件中的重要性――没有正确的BSP软件,整个系统的启动和运行也不会正确。另外需要强调的是:BSP的概念只是针对嵌入式操作系统而言的,而像DOSWINDOWSUNIXBIOS操作系统是无BSP可言的。对同一目标板而言,不同操作系统的BSP在本质上是一样的,但是不同的操作系统将提供不同的支持库,另外在BSP结构上也可能会有所不同,在做BSP移植的时候应该注意。

0 评论: