• Vxworks驱动程序的结构 分类: vxWorks 2014-03-13 08:54 382人阅读 评论(0) 收藏


    驱动程序的结构包括三个部分:初始化部分,函数功能部分和中断服务程序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执行完成
    )

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    php关于网页乱码问题
    EditPlus编写PHP使用技巧
    Dedecms当前位置(面包屑导航)的处理
    css有关鼠标移动上去图片变透明度变化
    CSS之Position详解
    如何修改FlashFXP默认编辑工具使用记事本打开
    ecshop点击订购、加入按钮没反应的解决方法
    kindEditor完整认识 PHP上调用并上传图片说明
    OpenCV 实现分水岭算法
    OpenCV 矩形轮廓检测
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706655.html
Copyright © 2020-2023  润新知