驱动程序的结构包括三个部分:初始化部分,函数功能部分和中断服务程序ISR。初始化部分初始化硬件,分配设备所需的资源,完成所有与系统相关的设置。如果是字符设备,首先调用iosDrvlnstall()来安装驱动程序,把中断向量和ISR挂上,然后调用iosDevAdd()来把驱动程序加到IO系统中:如果是块设备,首先把中断向量和ISR挂上,在内存中分配一个设备结构,然后初始化该结构。用户要使用该设备时,先调用设备初始化部分myInit()(一般放在sysLib.C中),再调用设备创建函数myDevCreate()返回一个BLK_DEV结构的指针,供文件系统初始化函数如

dosFsDevInit()使用。以下为块设备的初始化示例代码:

struct MyDevice{ //自定义的设备结构

BLK_DEV dev; 必须在结构的开始

Int interrupt;设备使用的中断号

....

}

int mylnit(){ //初始化函数

MyDevicelnit();//硬件初始化函数

MyDevice* Device =(MyDevice*)malloc(sizeof(MyDevice));

//为设备结构分配内存

Device->dev.bd_blkRd = Read;//初始化设备结构

Device->dev_blkWrt= Write;

intConnect(imToVec(9),my_ISR);//连接中断向量和中断服务程序ISR

)

  ISR处理硬件中断,管理具体的硬件输入输出,同时和驱动程序的其它部分通信。ISR中第一条指令用来读APIC的中断服务寄存器,以通知CPU已经接到中断请求。

my_ISR(int va1)//中断断服务函数

sysOutByte(0xa0,0x02);//中断响应

.....

semGive(my_sem);//通知其它程序中断处理完毕

}

   函数功能部分完成系统指定的功能,对于字符设备,这些函数就是指定的7个标准函数;对于块设备,则是在BLK_DEV或SEQ_DEV结构中指定的功能函数。应当注意的是,系统在调用块标准函数时,传递的设备结构指针是设备结构中BLK_DEV结构的指针,由于BLK_DEV定义在设备结构的开始处,该指针实际上也就是设备结构的指针。

STATUS Read (MyDevice* pDev,int startBlk,int numBlk,char*pBuf)

{

........

SemTake(my sem,WAI1 OREVER);//等待设备IO执行完成

)

Vxworks驱动程序的结构的更多相关文章

  1. 网络设备驱动程序-netdevice结构体关键部分注释

    仅仅做个记录,内核4.19 struct net_device { char name[IFNAMSIZ]; //网络设备的名称 struct hlist_node name_hlist; char ...

  2. VxWorks 任务

    任务:在执行时每个程序都被称之为任务.VxWorks操作系统中,任务可以直接地或者以共享方式访问大多数系统资源,为了维护各自的线程,每个任务必须保持有足够的上下文环境.(1)    任务状态:就绪(R ...

  3. Linux下的网卡驱动程序的编写过程(转)

    工作需要写了我们公司一块网卡的linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来,希 ...

  4. Linux设备模型(总线、设备、驱动程序和类)

    Linux设备驱动程序学习(13) -Linux设备模型(总线.设备.驱动程序和类)[转] 文章的例子和实验使用<LDD3>所配的lddbus模块(稍作修改). 提示:在学习这部分内容是一 ...

  5. WDF模型驱动程序开发

    WDF驱动程序开发 1. 引言 设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作.设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设 ...

  6. 利用WinDriver开发PCI设备驱动程序

    摘要 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发.作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果.从 ...

  7. 《Linux Device Drivers》第十八章 TTY驱动程序——note

    简单介绍 tty设备的名称是从过去的电传打字机缩写而来,最初是指连接到Unix系统上的物理或虚拟终端 Linux tty驱动程序的核心紧挨在标准字符设备驱动层之下,并提供了一系列的功能,作为接口被终端 ...

  8. 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .

    今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...

  9. 转:Linux网卡驱动程序编写

    Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...

随机推荐

  1. 关于document.body.scrollTop与documentElement.scrollTop

    遇到document.body.scrollTop值为0的问题 今天在写一个小demo的时候,使用滚动条,我用document.body.scrollTop获取滚动条的位置,但是很奇怪的发现在谷歌上获 ...

  2. UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]

    #219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...

  3. 编写服务器程序时遇到的connect:no route to host的问题

    亲测,,ftp服务器:在一台虚拟机上,没有问题.但是在不同的计算机或虚拟机上就会出现这种错误提示.一般是linux防火墙的问题 解决方法: 关闭linux防火墙 在root账户下 命令行:servic ...

  4. 一步一步从原理跟我学邮件收取及发送 11.完整的发送示例与go语言

    经过了这个系列的前几篇文章的学习,现在要写出一个完整的 smtp 邮件发送过程简直易如反掌.    例如我们可以轻松地写出以下的纯 C 语言代码(引用的其他C语言文件请看文末的 github 地址): ...

  5. (转载)Java:按值传递与按引用传递

    原链接:传送门 前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资 ...

  6. ajax请求 readyState为0 可能原因之一

    问题:同样的代码逻辑,PC端和iOS都能正常访问,但是Android系统请求都是报错: 上网查阅,关于ajax请求失败且状态码都是0的情况有很多,最后排查的原因是:域名证书问题:

  7. PyPI使用国内源

    默认的pip源的速度实在无法忍受,于是便搜集了一些国内的pip源,如下: 阿里云 https://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi. ...

  8. ssh快速登录远程服务器

    以前我的做法是创建一个shell脚本运行,今天了解了可以按照下面的方式: vi .ssh/config ,写入如下内容 HOST api User abc Port HostName 123.123. ...

  9. nginx+tomcat单个域名及多个域名配置

    同步首发:http://www.yuanrengu.com/index.php/20171130.html 项目开发接近尾声,开始着手在生产环境部署项目,开发阶段部署项目都没用nginx.项目是采用S ...

  10. Java JMS 程序基础 与 ActiveMQ 安装(一)

    一 ActiveMQ安装 从Apache官网上下载 ActivieMQ的安装包 apache-activemq-5.9.1-bin.tar.gz, 并拷贝到linux的安装目录解压 # tar -zx ...