Vxworks内核驱动基本结构:
三张表:1. 系统设备表  2. 系统驱动表 3. 文件描述符表

    Vxworks 内部对每个设备使用DEV_HDR 数据结构进行表示:
Typedef struct
{
   DL_NODE    node;
   Short      drvnum;
   Char       *name;
}
    该结构中给出了链接指针(用以将该结构串入队列中)、驱动索引号、设备节点名称。内核提供这个结构较为简单,只存储了一些设备的关键信息。底层驱动对其驱动的设备都有一个自定义数据结构表示,其中包含了驱动设备寄存器基地址,中断号,可能的数据缓冲区,保存内核回调函数的指针,以及一些标志位。最关键的一点是DEV_HDR必须是自定义数据结构的第一个成员变量,因为这个用户自定义结构最后需要添加到系统设备队列中,必须能够在用户定义结构与DEV_HDR结构之间进行转换,而将DEV_HDR结构设置为用户自定义结构的第一个成员变量就可以达到目的。

typedef struct
{
       DEV_HDR     pFCcardHdr;
       BOOL        created;
       char *      buf_virts;
       UINT32      iobase;
       UINT32      membase;
       char        irq;
       UINT32      irqvec;
       UINT32      Bus;
       UINT32      Device;
       UINT32      Func;
}DRV_CTRL;

    系统提供了iosDevAdd(DEV_HDR *pDevHdr, char *name, int drvnum)用于驱动程序调用注册一个设备。第三个参数是设备对应的驱动程序索引号。这个驱动号是iosDrvInstall函数的返回值,在设备初始化函数中,我们首先调用iosDrvInstall注册驱动,然后使用iosDrvInstall 函数返回的驱动号调用 iosDevAdd添加设备到系统中通过这两步设备就可以被用户程序使用了。
    用户调用open函数打开一个设备文件时,系统将以传入的文件路径名匹配系统设备的设备节点名,匹配方式是最佳匹配。
 
系统驱动表:
    系统驱动表包含了当前注册到I/O子系统下的所有驱动。这些驱动可以直接驱动硬件工作的驱动层。系统驱动表底层实现是一个数组,数组元素数目在内核初始化过程中指定。I/O子系统提供iosDrvInstall供驱动程序注册,iosDrvInstall原型如下:
Int iosDrvInstall
(
  FUNCPTR  pCreate,   FUNCPTR  pDelete,  
  FUNCPTR  pOpen,    FUNCPTR  pClose,  
  FUNCPTR  pRead,   FUNCPTR  pWrite,  FUNCPTR  pIoctl /*pointer to driver ioctl function*/
)

    一个设备驱动在初始化过程中一方面完成硬件设备寄存器配置,另一方面就是向I/O子系统注册驱动和设备。一个驱动并不需要实现上述所有函数,无须实现的函数直接传递NULL指针就可以了。iosDrvInstall 函数的基本实现即遍历drvTable数组,查询一个空闲表项,用传入的函数地址对各成员变量进行初始化。
 
系统文件描述符表
    文件描述符表表项索引被用做文件描述符ID,即open函数返回值。对于文件描述符,需要注意:标准输入、标准输出、标准错误输出虽然使用0,1,2三个文件描述符,但是可能在系统文件描述符表中只占用一个表项,即都使用同一个表项。Vxworks内核将0,1,2三个标准文件描述符与系统文件描述符表中的内容分开进行管理。
    系统文件描述符中的内容主要是针对硬件设备,使用一次open函数调用就占用一个表项:
int fd = open(DevName, 2,0);

    应用程序每调用一次open函数,系统文件描述符表中就增加一个有效表项,直到数组满为止。此时open函数调用将以失败返回,因此注意如果需要反复打开设备的话,一定要在设备不用的时候调用close函数关闭该描述符指向的设备,并在每次调用open函数之后检查返回的文件描述符是否合法。

vxWorks驱动架构的更多相关文章

  1. linux下的声卡驱动架构

    1.linux下的声卡驱动架构主要分为OSS架构和ALSA架构. 2.OSS架构 OSS全称是Open Sound System,叫做开放式音频系统,这种早期的音频系统这种基于文件系统的访问方式,这意 ...

  2. Linux网卡驱动架构分析

    一.网卡驱动架构 由上到下层次依次为:应用程序→系统调用接口→协议无关接口→网络协议栈→设备无关接口→设备驱动. 二.重要数据结构 1.Linux内核中每一个网卡由一个net_device结构来描述. ...

  3. 【转】USB协议架构及驱动架构

    1. USB协议 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 ...

  4. linux i2c驱动架构-dm368 i2c驱动分析

      linux i2c驱动架构-dm368 i2c驱动分析   在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-davinc ...

  5. 浅谈USB驱动架构 转载

    去年,老师让我分析基于HD3系统芯片的WindowsCE USB驱动的可行性.USB驱动非常庞大,多个软件层次相互交错,以及各种协议,USB系统对于一般人很难理解,我对其也只是理解一个大概,下面,我对 ...

  6. linux下i2c的驱动架构分析和应用

    i2c在linux下的代码在/driver/i2c下面,总体代码如下所示: i2c-core.c 这个文件实现了I2C核心的功能以及/proc/bus/i2c*接口.    i2c-dev.c  实现 ...

  7. 【驱动】linux下I2C驱动架构全面分析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  8. Linux USB驱动学习总结(一)---- USB基本概念及驱动架构

    USB,Universal Serial Bus(通用串行总线),是一个外部总线标准,用于规范电脑与外部设备的连接和通讯.是应用在PC领域的接口技术.USB接口支持设备的即插即用和热插拔功能.USB是 ...

  9. Linux的操作系统I2C驱动架构解说

    Linux的操作系统I2C驱动架构解说 发布时间:2006.10.16 04:52 来源:赛迪网技术社区 作者:LoneStar 最近因为工作需要涉及到了I2C总线.虽然我过去用过I2c,但看了 Li ...

随机推荐

  1. AppScan 扫描测试策略

    使用 AppScan 进行扫描 针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Ana ...

  2. 01_Python入门

    Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程 ...

  3. centos yum方式安装net-snmp v3

    SNMPv3的安全报头采用用户安全模式(USM),其提供具有机密性和完整性的网络管理通信.机密性通过采用数据加密标准(DES)来提供.尽管 这一算法以脆弱性著称(由于它采用的是40位的密钥),但与明文 ...

  4. Python之Suds库调用WCF实现复杂参数序列化

    今年主要做自动化测技术支持工作,最近一直在做接口自动化这块,前些天在研究将web页面模拟http进行接口自动化,这周杭州那边想测试WCF服务,所以这两天一直在探索.遇到的第一个问题就是服务参数传参序列 ...

  5. BZOJ 4034: [HAOI2015]树上操作 [欧拉序列 线段树]

    题意: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a . 操作 3 :询问某个节点 x 到根的路径中所有点的点权和. 显然树链剖分可做 ...

  6. java中的foreach用法及总结

    增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. pa ...

  7. java json字符串 获取value

    java中可以导入有关json的jar包,但是此jar包又得依赖其他的jar包 ,所以需要导入的包如下: 可在这里下载相关jar包,CSDN下载啥都要钱  讨厌死了  还是这个链接好---云盘 htt ...

  8. 如何在Centos 7上用Logrotate管理日志文件

    何为Logrotate? Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理. Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间. L ...

  9. 脚本启用python虚拟环境

    #!/bin/bash rm -rf /data/website/activities/virtualenvvirtualenv --no-site-packages -p python3 /data ...

  10. 脚本实现centos7修改二块网卡名称并配置ip信息

    #!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'`interface2=`ls /sys/class/net|g ...