混杂设备驱动程序

    混杂设备驱动程序是那些简单的字符驱动程序,它们拥有一些相同的特性。内核将这些共同行抽象至一个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);
}

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值