Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203473
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-16 18:53
个人简介

只要心够决,没有什么不可以!!!

文章存档

2013年(35)

我的朋友

分类: 嵌入式

2013-09-10 20:35:52

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wushihua/archive/2010/09/10/5875984.aspx


混杂设备驱动程序

    混杂设备驱动程序是那些简单的字符驱动程序,它们拥有一些相同的特性。内核将这些共同行抽象至一个API中(具体实现代码见 drivers/char/misc),这些简化了驱动程序的初始化的方式。所有的混杂设备都被分配一个主设备号10,但每个设备可选择一个单独的次设备号。

普通的字符驱动程序完成初始化的顺序如下。

  1,通过alloc_chrdev_region()及相关函数分配主/次设备号。

  2,使用device_create()创建/dev和/sys节点。

  3,使用cdev_init()和cdev_add()将自身注册为字符驱动程序。

混杂驱动只需要调用misc_register()即可完成字符驱动的所有步骤:

       static struct misdevice mydrv_dev={

            MYDRV_MINOR,

             "mydrv",

            &mydrv_fops

};

 misc_register(&mydrv_dev);

其中MYDRV_MINOR是静态分配给混杂驱动程序的次设备号。也可以在mydrv_dev机构中通过指定MISC_DYNAMIC_MINOR而不是MYDRV_MINOR以要求动态分配的次设备号。每一个混杂驱动程序自动出现在/sys/class/misc 文件中。

下面以友善6410提供的buttons驱动来说明一下。

 

#define DEVICE_NAME     "buttons"

..

..

..

static struct file_operations dev_fops = {
    .owner   =   THIS_MODULE,
    .open    =   s3c64xx_buttons_open,
    .release =   s3c64xx_buttons_close,
    .read    =   s3c64xx_buttons_read,
    .poll    =   s3c64xx_buttons_poll,
};

static struct miscdevice misc = {
 .minor = MISC_DYNAMIC_MINOR,//动态分配次设备号
 .name = DEVICE_NAME,//设备名
 .fops = &dev_fops,//文件操作的方法
};

static int __init dev_init(void)
{
 int ret;

 ret = misc_register(&misc);//设备初始化

 printk (DEVICE_NAME"/tinitialized/n");

 return ret;
}

static void __exit dev_exit(void)
{
 misc_deregister(&misc);
}

总的来看混杂设备驱动程序主要是简化了驱动程序初始化的方式。

主要是参考<>和友善的按键驱动程序。

阅读(1901) | 评论(0) | 转发(0) |
0

上一篇:misc_register

下一篇:Linux中__iomem

给主人留下些什么吧!~~