- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
王明超手记9.doc
VxWorks BSP
1, VxWorks BSP介绍
绝大多数的嵌入式硬件设备都需要某种类型的软件初始化和管理。这部分工作大部分是由设备驱动层来完成的,它对硬件进行控制和管理,并为上层软件提供所需要的驱动支持。设备驱动层也叫板级支持包(BSP),它包含了嵌入式系统的启动代码和部分设备驱动程序。目标机系统加电后,首先执行的代码就是BSP。BSP与上层应用通过系统定义的接口进行交互。BSP在VxWorks系统中所处的位置如1所示。
1 BSP在操作系统中的层次
作为介于底层硬件与VxWorks之间的一个软件接口,BSP主要负责目标机上电后的系统初始化、提供部分硬件的驱动程序。
VxWorks BSP构成
VxWorks的BSP组成文件由几类文件组成:源文件、头文件、makefile文件和派生文件。其中具体包含情况如下:
Makefile:VxWorks及bootrom映像编译规则;
Config.h:包含所有和系统相关的宏定义,需要添加和裁剪的内核组件。
romInit.s:此文件内容为bootrom引导程序和基于ROM的VxWorks映像的入口初始化汇编代码。系统上电后程序入口点为romInit( ),是系统执行的首条代码。同时它也设置了启动类型参数。硬件和设备初始化操作将具体由在sysLib文件中的sysHwInit( )函数实现。
sysLib.c:这个文件提供目标机或系统相关关的C程序。该文件提供了板级接口,通过此接口,应用程序的实现与目标系统无关。sysLib.c通常包含系统时钟中断、内存相关选项、串口挂接配置以及定义系统重启地址等操作。
hwconfig.c: 此文件提供了系统中各个设备驱动挂接的软件接口。
sysInterrupt.c: 对于需要加入中断控制器进行中断管理的板卡,该文件对中断控制器的底层驱动进行与上层intLib.h库中函数的挂接。
sysMmu.c:该文件定义了系统初始化时需要使用的与cache和MMU模块相关的数据结构。
VxWorks内核启动过程
系统上电后,首先会执行一段最小初始化代码。附加引导代码将处理器跳至ROM入口点;然后跳至一段C程序,将ROM中余下内容复制到RAM中。接下来,处理器跳至RAM入口。
2 可加载型VxWorks映像
如2所示,目标板上电后,由引导带代码将ROM引导程序拷贝到RAM_HIGH_ADRS处,并跳转到该地址执行ROM引导程序,根据配置好的加载程序,将指定开发主机目录下的可加载VxWorks映像下载到RAM_LOW_ADRS处,并跳转到此处运行。
3 ROM驻留型VxWorks映像
如3所示,目标板上电后,引导带代码在初始化后直接运行搬移程序,将整个VxWorks映像搬移到RAM_LOW_ADRS处,并跳转到此处运行。
VxWorks BSP的移植与调试
1 BSP启动代码修改
本系统在移植操作系统时需要对BSP做如下修改。
修改config.h:
#define DEFAULT_BOOT_LINE
lltemac(0,0)host:vxWorks h=172.18.131.46 e=172.18.131.45 u=nuaa pw=nuaa f=0x8
ROM_TEXT_ADRS 此宏定义为系统上电后(冷启动)加载的地址。
ROM_WARM_ADRS 此宏定义为系统调用reboot函数重启后加载的地址。
ROM_SIZE 此宏定义为ROM的大小,经编译后的VxWorks镜像大小与此值有关。
此外,添加
#if defined(XPAR_APU_FPU_PRESENT)((TOOL==gnu)||(TOOL==diab))
#undef INCLUDE_SW_FP
#define INLCUDE_HW_FP
修改Makefile:
CPU_VARIANT = ppc440_x5
TOOL = gnu
TARGET_DIR = ppc440_0
VENDOR = Xilinx
ROM_TEXT_ADRS、ROM_WARM_ADRS、ROM_SIZE、RAM_LOW_ADRS和RAM_HIGH_ADRS应与config.h中保持一致。
4.2 启动代码调试方法
提出一种针对系统初始化代码的调试方法首先,不使用printf函数,因为此函数已经是标准C函数,而在汇编代码romInit.s中,串口设备尚未配置,标准输入输出的驱动也未挂载,无法使用此函数进行输出查看,需要参考驱动程序最底层代码,了解串口输出时需要对IP核哪些寄存器进行配置。此外,应阅读CPU手册,了解POWERPC的指令集以及汇编的编程规范,这样就可以对汇编代码进行点灯调试。此方法被实际用于本项目VxWorks移植初期,在初期时系统上电后如果串口无输出,可采用点灯调试法逐步排除各种原因。
具体实现的
文档评论(0)