BSP用于初始化硬件、引导操作系统并提供软件和硬件之间的设备驱动接口,针对某类体系结构的处理器开发BSP时,了解其基本的体系结构和指令系统是必要的。一般来说,BSP的设计与开发可分为几个步骤:

1、 建立开发环境,这个不用说了,就是装集成环境;

2、 选择合适的BSP模板,要尽可能的与硬件平台相近;

3、 修改或添加wind内核激活前的初始化代码,例如初始化CPU内核、MMU、Cache禁止/使能等;

4、 内核激活后,连接系统中断、系统时钟,修改或添加所需的设备驱动程序;

5、 测试与验证,BSP的正确性与稳定性对上层软件和整个系统的稳定起着至关重要的作用,因此BSP完成后要经过测试验证。

开发BSP过程中最主要的三个程序分别为:

1、 romInit.s中的romInit()函数,用于初始化CPU及内存;

2、 sysLib.c中的sysHwInit2()函数,用于将所有板上硬件初始化为静止状态;

3、 sysLib.c中的sysHwInit()函数,进一步初始化板件以使用vxWorks程序。

下面根据代码详细分析vxWorks的启动顺序:

一、 执行romInit():

系统启动时,处理器首先会跳到ROM中的入口点_romInit()(位于romInit.s中),该处汇编代码如下:

VxWorks里经常会看见有下面这2个组件,INCLUDE_MEMDRV和INCLUDE_RAMDRV,特别容易混淆,而且不明白它们具体是干什么用的,今天做了个研究,共享之。

1. INCLUDE_MEMDRV(memDrv)

Component INCLUDE_MEMDRV {
        NAME MEM disk driver
        SYNOPSIS allows a filesystem to be put on top of memory
        MODULES memDrv.o
        INIT_RTN memDrv ();
        HDR_FILES memDrv.h
}

 

#ifdef INCLUDE_MEMDRV

memDrv ();

#endif

typedef struct

{

DEV_HDR devHdr;

MEM_DRV_DIRENTRY dir;

off_t allowOffset;

} MEM_DEV;

风河注释:

The memDrv device allows the I/O system to access memory directly as a pseudo-I/O device. Memory location and size are specified when the device is created. The device provides a high-level means for reading and writing bytes in absolute memory locations through I/O calls. It is useful when data must be preserved between boots of VxWorks or when sharing data between CPUs. The memDrv driver is initialized automatically by the system with memDrv( ) when the INCLUDE_USR_MEMDRV component is included in VxWorks. The call for device creation must be made from the kernel:

STATUS memDevCreate (char * name, char * base, int length)

Memory for the device is an absolute memory location beginning at base. The length parameter indicates the size of the memory.

For additional information on the memory driver, see the memDrv( ), memDevCreate( ), and memDevCreateDir( ) entries in the VxWorks API reference.

1.1 嵌入式实时操作系统 VxWorks

Wind River System 公司(中文名称:风河系统,以下称 Wind River 或风河)组建于 1981年,是全球领先的嵌入式软件与服务商,主要为业界提供面向行业市场的嵌入式软件平台。它所提供的嵌入式软件平台包括集成化的实时操作系统、开发工具和技术。Wind River 公司的产品和专业服务已经在许多市场领域得到认可,主要包括空间技术及国防、汽车、消费电子、工业制品和网络基础设施领域。世界各地的电子设备制造商普遍把 Wind River 公司的嵌入式软件产品作为行业标准。包括NASA“勇气号”火星探测器在内的航空航天设备也采用 Wind River 嵌入式软件。

VxWorks 操作系统是美国 Wind River 公司于 1983 年设计开发的一种嵌入式实时操作系统(RTOS),是 Tornado 嵌入式开发环境的关键组成部分。

VxWorks 是一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统。它以其良好的可靠性和卓越的实时性,被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,1997 年 4 月在火星表面登陆的火星探路者上也使用了 VxWorks。

VxWorks 是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。VxWorks 只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。

VxWorks 为程序员提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。在各种 CPU 平台上提供了统一的编程接口和一致的运行特性,尽可能的屏蔽了不同 CPU 之间的底层差异。应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。基于 VxWorks 操作系统的应用程序可以在不同 CPU 平台上轻松移植。

VxWorks 系统适应日益复杂的 32 位嵌入式处理器产品的开发需求,其最重要的特点包括:

  • 可靠性高的实时性能
  • 可下载到最终产品内存的丰富和灵活的功能模块集
  • 与综合全面的主机开发环境的协同工作
1.1.1 VxWorks 系统主要功能

微内核 Wind Kernel:实现任务调度和管理、任务间通信、内存管理、系统时钟和定时器管理、 系统中断管理。

本文向读者介绍如何通过TQ2440的VxWorks BSP来制作生成VxWorks镜像,以及通过应用程序来做实验,以验证驱动实现的功能。

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。

VxWorks.net是一个提供嵌入式软硬件资源下载的网站,由一个具有丰富嵌入式软件开发经验的团队管理和维护。目前我们提供嵌入式软硬件资源的免费下载,只要注册登陆就可以下载其中的资源。随着网站的发展,我们后续会提供自主开发的商业软件资源,并开通VIP客服服务,敬请关注。

天嵌科技推出的TQ2440开发板,板载具有丰富的资源,包括UART,NOR FLASH,EEPROM,LCD,LED,网络等,针对这些资源,我们开发了VxWorks下的驱动,并做了实验验证,迫于时间关系,部分驱动和实验还没有完成。

第1章 通过BSP来生成VxWorks镜像并运行

1.1 BSP的安装

将TQ2440的VxWorks BSP拷贝到Tornado安装路径的target\config目录下,如下图:

S3C2440 vxworks

Abstract
This FAQ describes how to boot one or two target VMPC6a, 6c or 6d from the kernel stored in the SCSI hard disk. For BSP 02248.

Detail

Question : How to boot VxWorks from Vmpc6x User Flash using SCSI disk ?

Answer :

Here is a method which explains:

I How to configure BSP to include SCSI facilities ?

  1. Config.h
  2. bootConfig.c
  3. sysScsi.c
  4. ncrLib.a
II How to update VxWorks bootrom with SCSI included ?
  1. Upgrade Boot ROM Using VMPCBug firmware
  2. Upgrade VxWorks kernel
III Generate a standalone VxWorks kernel to be stored on the SCSI disk
IV How to access and configure the SCSI disk under VxWorks ?
V How to boot from SCSI disk ?
VI How to boot a second board from same first SCSI disk ?

It has been tested on:

Software configuration:

Solaris and windows NT 4, Tornado 2.2 environment.

BSP ID02248 under Tornado2.2/vxWorks5.5

Hardware:

Vmpc6c,6a board.

9Go QUANTUM FIREBALL SCSI disk

I How to configure BSP to include SCSI facilities ?

In order to use the scsiLib facilities in VxWorks, SCSI support has to be added to VxWorks kernel. To do so, Change or add the indicated lines on several files in the BSP directory (/target/config/).