77范文网 - 专业文章范例文档资料分享平台

vxWorks_BSP移植笔记(2)

来源:网络收集 时间:2019-03-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

广州致远电子有限公司 VxWorks BSP移植技术笔记 VxWorks技术笔记

1. 适用范围

主要从几个关键主题描述s3c2440a的 VxWorks BSP定制工作, 对整个过程作了详细描述。另外提供一些开发中需要使用的参考资源,包括手册、文档、代码和工具等。

适用于基于ARM的VxWorks 的BSP开发。

此次移植的VxWorks BSP基于Tornado 2.2,适用于EPC6000,MiniHMI-1000等基于s3c2440a的工控板上。实现了向量表映射,中断异常管理,系统时钟,辅助时钟,Uart等最基本的驱动与功能。可用于生成VxWorks的bootrom和VxWorks镜像。

移植技术笔记 ?2009 Guangzhou ZHIYUAN Electronics CO., LTD.

1

广州致远电子有限公司 VxWorks BSP移植技术笔记 VxWorks技术笔记

2. BSP分析

2.1 BSP的文件构成

VxWorks的BSP组成文件主要包含在四个目录下: ? ? ? ?

Tornado\\target\\config\\all :所有BSP的公共部分;

Tornado\\target\\config\\comps\\vxworks:基本模块描述文件(*.cdf); Tornado\\target\\config\\comps\\src:模块配置文件(被usrConfig.c使用); Tornado\\target\\config\\bspname:与目标板相关的部分。

通常将\\target\\config\\all 下的文件拷贝到\\target\\config\\bspname\\all,同时修改makefile文

件中的“CONFIG_ALL”项,设置为正确的路径。这样做的目的是为了在修改all目录下文件时不影响其它的BSP。

下面分别介绍这些文件: 1. all目录:

在该目录下主要有如下几个文件:

bootConfig.c:是bootrom的主要初始化与控制文件。BootConfig.c是usrConfig.c的一个子集,所以bootrom只能提供完整VxWorks Image中的部分功能。bootrom不使用MMU库(SPARC除外)。在集成环境下修改工程相关的配置信息不会影响bootrom,只有直接修改config.h,configAll.h,bootConfig.c和bootInit.c文件才会影响到bootrom;

bootInit.c:定义了romStart()函数,用于bootrom的第二阶段初始化。首先把text和data段从ROM拷到RAM中,然后初始化部分RAM,进行解压;

usrConfig.c:包含VxWorks镜像的主要初始化代码。在Tornado集成环境下生成VxWorks镜像时会用到此文件。

2. bspname目录:

在该目录下主要有如下几个文件:

Makefile:bootrom的Makefile文件。其中定义了一些宏,如:ROM_TEXT_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS;这些宏定义应该与config.h下的定义相一致;

config.h:包含所有的头文件和与CPU及系统相关的宏定义,如:对Cache和MMU的配置,RAM和ROM的定位以及大小配置;

romInit.s:该文件是bootrom和带ROM启动功能的 VxWorks 镜像的初始化入口汇编代码,即实现了romInit()。目标板一上电就开始执行romInit(),主要完成三部分工作: ? ? ?

关看门狗,屏蔽中断,禁能MMU,Cache,配置处理器时钟; 初始化内存控制器;

初始化堆栈指针和其它寄存器以执行C语言,然后调用romStart().

注意:romInit()中的函数或变量必须设计成与内存地址无关的代码(PIC),如

程序清单 2.1所示:

移植技术笔记 ?2009 Guangzhou ZHIYUAN Electronics CO., LTD.

2

广州致远电子有限公司 VxWorks BSP移植技术笔记 VxWorks技术笔记

程序清单 2.1 与内存地址无关代码

L$_HiPosn:

.long ROM_TEXT_ADRS + HiPosn - FUNC(romInit) L$_rStrtInRom:

.long ROM_TEXT_ADRS + FUNC(romStart) - FUNC(romInit) L$_SMRDATA:

.long ROM_TEXT_ADRS + SMRDATA - FUNC(romInit)

romInit.s只执行一些必要的初始化,其余的初始化工作在后面完成。

sysALib.s:包含目标板或系统相关的汇编语言函数,即实现了_sysInit(),是基于RAM的VxWorks镜像的入口程序,当bootrom引导完镜像后,就会从此出开始执行。sysALib.s类似于romInit.s完成的工作,但它不必设计成PIC,且可调用其它库中的函数。

sysSerial.c:串口驱动程序的安装和初始化。 bspname.h:包含与处理器相关的宏定义。

sysLib.c:包含与目标板或系统相关的C语言函数,sysLib.c中应该实现以下几类函数: ? ? ? ? ? ? ?

系统时钟中断相关的函数:sysClkConnect(),sysClkDisable(),sysClkEnable(), sysClkInt(),sysClkRateGet(),sysClkRateSet(); 系统硬件初始化函数:sysHwInit(),sysHwInit2()

内存相关的函数:sysMemTop(),sysNvRamGet(),sysNvRamSet()

串口相关的函数:sysSerialHwInit(),sysSerialHwInit2(),sysSerialChanGet() 杂项函数:sysBspRev(),sysModel(),sysToMonitor()

其它可选函数:如:辅助时钟中断相关函数,总线相关函数

其中部分函数的实现在驱动程序子文件中完成。通过包含C文件的方式引入到sysLib.c中,如程序清单 2.2所示:

程序清单 2.2 包含C文件

#include \ /* sys interrupt */ #include \ /* sys timer */ #include \ /* sio channel */

#ifdef INCLUDE_END

#include \ /* END device */ #endif

2.2 BSP的执行逻辑

2.2.1 BootROM image

bootrom主要用于启动装载VxWorks image,因此完成较少的系统初始化,。一般有压缩和不压缩两种形式,如bootrom和boot_uncmp。与VxWorks image的主要区别在于Bootrom调用bootConfig.c,而VxWorks镜像调用usrConfig.c。

1. bootrom的执行逻辑:

移植技术笔记 ?2009 Guangzhou ZHIYUAN Electronics CO., LTD.

3

广州致远电子有限公司 VxWorks BSP移植技术笔记 VxWorks技术笔记

文件romInit.s中的romInit→文件bootInit.c中的romStart→文件bootConfig.c中的usrInit→sysHwInit()→usrKernelInit()→KernelInit(usrRoot,...)

usrRoot→bootCmdLoop(void)命令行选择,或autoboot→bootLoad(pLine, &entry)加载模块到内存(网络,TFFS,TSFS…) →netifAttach()→go(entry) →(entry)()从入口开始执行,不返回。

2.2.2 VxWorks image

1. 不带ROM引导功能的VxWorks镜像

不带ROM引导功能的VxWorks镜像向需要bootrom将其加载到RAM中,sysaLib.s是在RAM中执行的第一个函数,执行逻辑如下:

文件sysaLib.s中的sysInit→文件usrConfig.c中的usrInit→sysHwInit→usrKernelInit→ KernelInit(usrRoot,...)

其主要函数及功能如表 2.1 函数说明

表 2.1 函数说明

函 数 sysInit()

函 数 功 能 (a)锁住中断;(b)禁用缓冲; (c)初始化处理器寄存器到一缺省值;

(d)清除所有悬置中断; (e)激活usrInit(),指明启动类型。

usrInit()

(a)对bss赋零;

(b)保存bootType于sysStartType;

(c)调用excVecInit(),初始化所有系统和缺省中断向量; (d)依次调用sysHwInit(), usrKernelInit(),kernelInit().

usrKernelInit()

依次调用

classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),work

QInit()

kernelInit()

初始化并启动内核。 (a)激活intLockLevelSet(); (b)从内存池顶部创建根堆栈和TCB; (c)调用taskInit(),taskActivate(),用于usrRoot();

(d)调用usrRoot().

usrRoot()

初始化I/O系统,驱动器,设备(在configAll.h和config.h中指定)

(a)调用sysClkConnect(),sysClkRateSet(),

iosInit(),[ttyDrv()];

(b)初始化excInit(),logInit(),sigInit().

(c)初始化管道,pipeDrv();

(d)stdioInit(),mathSoftInit()或mathHardInit() (e)wdbConfig():配置并初始化目标代理机

usrConfig.c kernelLib.c usrKernel.c usrConfig.c 所 在 文 件 sysALib.s

2. 带ROM引导功能的VxWorks镜像

其中ROM驻留型的镜像在执行romStart函数时只把VxWorks镜像的data段复制到

RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行,执行逻辑如下: 移植技术笔记 ?2009 Guangzhou ZHIYUAN Electronics CO., LTD.

4

广州致远电子有限公司 VxWorks BSP移植技术笔记 VxWorks技术笔记

文件romInit.s中的romInit→文件\\comps\\src\\romStart.c中的romStart→文件usrConfig.c中的usrInit→sysHwInit→usrKernelInit→KernelInit(usrRoot,...)

其主要函数及功能如表 2.2所示:

表 2.2 函数说明

函数 1.romInit()

函数功能

(a)禁止中断;(b)保存启动类型;(c)硬件初始化;

(d)调用romStart();

2.romStart()

(a)将数据段从ROM拷贝到RAM,清内存;

(b)有必要的话将代码段从ROM拷贝到RAM,有必要的话

解压缩;(c)调用usrInit();

3.usrInit() 4.usrKernelInit() 5.kernelInit() 6.usrRoot()

初始化程序

如果相应的配置文件被定义,对应函数被调用

初始化并启动内核

初始化I/O系统,驱动器,创建设备

usrConfig.c usrKernel.c kernelLib.c usrConfig.c romStart.c 所在文件 romInit.s

2.2.3 Driver加载的时机

在syslib.c文件中,被初始化的设备是系统或调试所依赖的,我们称为“近设备”,例如串口、时钟;在用户应用程序内被初始化的设备是依赖于操作系统的,我们成为“远设备”,例如在driver中需要使用信号量。

移植技术笔记 ?2009 Guangzhou ZHIYUAN Electronics CO., LTD.

5

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库vxWorks_BSP移植笔记(2)在线全文阅读。

vxWorks_BSP移植笔记(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/528343.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: