700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux驱动:自动创建设备节点

linux驱动:自动创建设备节点

时间:2019-01-04 22:03:19

相关推荐

linux驱动:自动创建设备节点

在加载驱动模块后,就要自己使用mknod创建设备节点,这样虽然是可行的,但是比较麻烦。我们可以在__init()函数里面添加一些函数,自动创建设备节点。创建设备节点使用了两个函数class_create()和device_create(),当然在__exit()函数里,要使用class_destory()和device_desotry()注销创建的设备节点。

1. 函数说明

struct device *device_create(struct class *class, struct device *parent,dev_t devt, const char *fmt, ...)struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)

在驱动用加入对udev的支持主要做的就是:在驱动初始化的代码里调用class_create(...)为该设备创建一个class,再为每个设备调用device_create(...)( 在2.6较早的内核中用class_device_create)创建对应的设备。

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

2. 具体用法

需要包含头文件 #include<linux/device.h>

static int led_init(){major = register_chrdev(0, "led_drv", &led_fops);led_drv_class = class_create("THIS_MODULE", "led_drv");device_create(led_drv_class, NULL, MKDEV(major, 0), NULL, "myled");return 0;}static void led_exit(){unregister_chrdev(major, "led_drv");device_destroy(led_drv_class, MKDEV(major, 0));class_destroy(led_drv_class);}

在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 device_create创建对应的设备。

加载模块后,会自动在/dev/下创建myled设备文件。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。