Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50122
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 164
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-05 23:14
文章分类

全部博文(11)

文章存档

2013年(11)

我的朋友

分类: LINUX

2013-08-05 23:59:26

本文主要来源于http://blog.csdn.net/zhenwenxian/article/details/5424434

写Linux设备驱动程序时,一般都是手动执行mknod去创建设备节点,有时候还是相对比较麻烦的。在这里就是给大家介绍内核给我们提供的一个比较快捷的方式,其实现是基于udev的,在嵌入式领域则是mdev。


Linux内核中定义了struct class,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。

struct class和device_create(…) 以及device_create(…)都定义在/include/linux/device.h中,使用的时候一定要包含这个头文件,否则编译器会报错。


使用范例如下:

struct class *xxx_class;

static int __init xxx_init(void)
{
    ……
    xxx_class = class_create(THIS_MODULE, "xxx");
    if(IS_ERR(xxx_class)) {
        printk("Error to call class_create for xxx_class\n");
        goto err_cdev_del;
    }
    device_create(xxx_class, NULL, MKDEV(major, 0), DEVICE_NAME);
    ……
}

static void __exit xxx_exit(void)
{
    ……

    device_destroy(xxx_class, MKDEV(major, 0));
    class_destroy(xxx_class);
    ……

}


阅读(927) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~