在vxworks6.x下添加一个新的驱动,一般需要添加6个文件,分别是

  • target/src/hwif/xxx 下
    xxx.c 和 xxx.mk --- 源文件和makefile文件
  • target/src/hwif/h/xxx 下
    xxx.h -- 头文件
  • target/config/comps/vxworks下
    xxx.cdf -- cdf文件用于被workbench识别
  • target/config/comps/src/hwif下
    xxx.dc xxx.dr - dc dr用于命令行编译
新加一个串口驱动需要添加的文件列表
  • vxbUccSio.c
  • vxbUccSio.h
  • vxbUccSio.mk
  • vxbUccSio.dc
  • vxbUccSio.dr
  • 40vxbUccSio.cdf
注意:如果是命令行编译的话(make),你还需要执行下面的内容,否则新驱动还是没有被更新到库文件中
If you have added/modified files in /target/config/comps/src/hwif folder, you need to re-create vxbUsrCmdLine.c. Move to /target/config/comps/src/hwif and execute make vxbUsrCmdLine.c
cd target/config/all/vxbUsrCmdLine.c
rm -f vxbUsrCmdLine.c
cd  /target/config/comps/src/hwif
make vxbUsrCmdLine.c 

另一篇文章曾经讲过如果想加一个驱动的话,需要在指定的目录下写对应的文件;如果你不想或者不能这样做的话,有没有别的办法呢?比如你想把新的驱动文件全部都放在BSP目录下。源文件/头文件包含在sysLib.c中,不要.mk,dc,dr只用workbench编译,把cdf也放在BSP目录下,这样可以吗?你会发现workbench里能看到这个component但是是灰的或者斜的,不可用!

首先要知道workbench的搜索cdf tool只会在 target/config/comps/vxWorks这个目录下和BSP目录下去搜,所以能够搜到你的CDF文件,表现为你可以看见这个component,灰的或者斜的表示组件不可用,cdf文件的依赖关系有问题,最有可能的问题是找不到你的源文件。

比如:以Fresscale DMA driver comopent为例:

Component DRV_DMA_FSL {
    NAME        Freescale DMA Controller Driver
    SYNOPSIS    Freescale DMA Controller Driver
    MODULES     vxbFslDma.o
    REQUIRES    INCLUDE_VXBUS \
                INCLUDE_PLB_BUS \
                INCLUDE_DMA_SYS
    _CHILDREN   FOLDER_DRIVERS
    INIT_RTN    vxbFslDmaRegister();
    PROTOTYPE   void vxbFslDmaRegister(void);
    _INIT_ORDER hardWareInterFaceBusInit
    INIT_AFTER  INCLUDE_PLB_BUS
}

你要是把这样的cdf放在BSP下,workbench中看到的肯定是灰的,即使vxbFslDma.o在BSP目录下。因为” MODULES vxbFslDma.o“在BSP路径下找不到,原因很简单,root路径不是BSP目录。

这个有两个办法可以解决:

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.

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中),该处汇编代码如下:

本文向读者介绍如何通过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