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_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS要与Makefile文件里定义的一致,LOCAL_MEM_LOCAL_ADRS和LOCAL_MEM_SIZE要正确。
romInit.s
这是系统上电后运行的第一个程序,根据具体目标板对寄存器和CPU进行设置;以CPU为ARM7TDMI为例,romInit.s 需要进行的工作有:
・保存启动方式:对于冷启动,如果CPU配置的是HIGH VECTORS,就设置入口地址为0xFFFF0000,否则设置入口地址为0x00000000;
・屏蔽中断:通过设置cpsr的I_BIT和F_BIT都为1来实现,还要设置中断寄存器为关模式,同时设定运行模式为SVC32模式;
・初始化堆栈指针pc和sp:堆栈指针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的开发要根据具体目标板的硬件进行。
结语
我们已经利用基于VxWorks的BSP开发包成功的进行了线缆调制解调器的底层软件开发。在开发过程中深感BSP在整个系统软件中的重要性――没有正确的BSP软件,整个系统的启动和运行也不会正确。另外需要强调的是:BSP的概念只是针对嵌入式操作系统而言的,而像DOS、WINDOWS、UNIX等BIOS操作系统是无BSP可言的。对同一目标板而言,不同操作系统的BSP在本质上是一样的,但是不同的操作系统将提供不同的支持库,另外在BSP结构上也可能会有所不同,在做BSP移植的时候应该注意。■
2008年10月19日星期日
Makefile的宏定义
订阅:
博文评论 (Atom)
0 评论:
发表评论