Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71740
  • 博文数量: 14
  • 博客积分: 286
  • 博客等级: 二等列兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-16 16:39
文章分类

全部博文(14)

文章存档

2012年(13)

2011年(1)

我的朋友

分类: 嵌入式

2012-09-22 22:25:19

通过动态申请设备号并加载设备驱动程序后, 可通过 /proc/devices 文件来查看主设备号,然后可以使用mknode命令来创建设备文件,或者在驱动程序里面动态创建设备文件

首先, 分配一个 struct class 结构体变量, 并且调用class_create函数来初始化
        dev_class = class_create(owner, name)

extern struct class * __must_check __class_create(struct module *owner,
                                                                          const char *name,
                          struct lock_class_key *key);

#define class_create(owner, name)
({
static struct lock_class_key __key;
__class_create(owner, name, &__key);
})

这个类存放于sysfs下面,一旦创建好了这个类,再调用 device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应 device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。

然后使用 device_create()来创建设备节点

extern struct device *device_create(struct class *cls,
                                                    struct device *parent,
                    dev_t devt, void *drvdata,
                    const char *fmt, ...)
                    __attribute__((format(printf, 5, 6)));

当动态创建设备文件后,在卸载设备驱动程序时, 需要调用device_destroy() 和 class_destroy() 来销毁创间的设备节点和类
extern void device_destroy(struct class *cls, dev_t devt);
extern void class_destroy(struct class *cls);
阅读(2457) | 评论(0) | 转发(0) |
0

上一篇:[转]cdev_init函数

下一篇:没有了

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