您的位置:首页 > 其它

自动创建设备节点

2011-12-09 23:52 239 查看
驱动程序编写好后,还需要创建设备节点,有两种方式,一是通过mknod命令去手动创建,例如:mknod /dev/hello c 250 0,/dev/hello为设备节点名字,c代表字符设备,250和0代表它的主次设备号。二是使用udev或mdev来实现自动创建设备节点。使用mknod手动创建设备节点不够灵活,如果是动态分配的设备号怎么办,难道每次加载驱动后去查看/proc/devices文件中查看它的主设备号,要是产品发布时怎么办,显然不太现实

利用udev(mdev)来实现设备节点的自动创建,udev(mdev)存在于应用层。

包含头文件

#include<linux/device.h>

新建一个class结构体指针

static struct class *my_class;

在初始化函数中调用class_create()函数创建一个类,参数分别为模块所有者和class结构name字段,在/sys/class/下体现。

my_class= class_create(THIS_MODULE, "my_class");

if(IS_ERR(my_class))

{

printk("Err: failed increating class.\n");

return -1;

}

调用device_create()函数创建设备节点,参数分别为所从属类,这个设备的父设备,没有就制定NULL,设备号,设备的私有数据,最后一组参数指定设备节点名,比如这里的名为hello。函数原型:

extern struct device *device_create(struct class *cls, structdevice *parent,

dev_t devt, void *drvdata,

const char *fmt, ...)

具体实现在drivers/base/core.c中

程序中使用

device_create(my_class,NULL,dev_n,NULL,"%s","hello");

或者

device_create(my_class,NULL,dev_n,NULL,"hello");

设备卸载删除类和设备节点

device_destroy(my_class,dev_n);

class_destroy(my_class);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: