设备驱动中的misc(kernel-4.7)

Linux里面的misc杂项设备是主设备号为10的驱动设备,它的注册跟使用比较的简单,所以比较适用于功能简单的设备。

miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。 在内核中用struct miscdevice表示miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。miscdevice的API实现在drivers/char/misc.c中,misc装备的初始化,注册,注销都在这个文件中。在内核中,misc杂项装备驱动接口是对一些字符装备的简单封装,它们同享一个主装备号,有不同的次装备号,同享一个open调用,其他的操作函数在打开后应用linux驱动程序的方法重载进行装载。

misc的设备结构体定义在头文件linux/miscdevice.h里面

struct miscdevice  {
    int minor;            //misc设备的次设备号,misc设备主要依赖minor去区分
    const char *name;    //设备名
    const struct file_operations *fops;  //驱动主体处理函数入口指针
    struct list_head list;   //内核有misc list链表
    struct device *parent;
    struct device *this_device;  //当前装备
    const struct attribute_group **groups;
    const char *nodename;   //在/dev下面创建的设备驱动节点
    umode_t mode;
};

在misc.c中misc_init这个就是misc驱动模型的入口


static int __init misc_init(void)
{
    int err;
    struct proc_dir_entry *ret;

    ret = proc_create("misc", 0, NULL, &misc_proc_fops);//创建misc的proc入口
    misc_class = class_create(THIS_MODULE, "misc");//在/sys/class/目录下创建名为misc的类
    err = PTR_ERR(misc_class);
    if (IS_ERR(misc_class))
        goto fail_remove;

    err = -EIO; 
    ///注册设备,其中设备的主设备号为MISC_MAJOR为10。设备名为misc,misc_fops是操作函数的集合
    if (register_chrdev(MISC_MAJOR,"misc",&misc_fops))
        goto fail_printk;
    misc_class->devnode = misc_devnode;
    return 0;

fail_printk:
    printk("unable to get major %d for misc 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值