在驱动模块初始化函数中实现设备节点的自动创建
st vargs;
struct device *dev;
va_start(vargs, fmt);
dev = device_create_vargs(class, parent, devt, NULL, fmt, vargs);
va_end(vargs);
return dev;
}
第一个参数指定所要创建的设备所从属的类,第二个参数是这个设备的父设备,如果没有就指定为NULL,第三个参数是设备号,第四个参数是设备名称,第五个参数是从设备号。
下面以一个简单字符设备驱动来展示如何使用这几个函数
#include
#include
#include
#include
#include
#include
MODULE_LICENSE (GPL);
int hello_major = 555;
int hello_minor = 0;
int number_of_devices = 1;
struct cdev cdev;
dev_t dev = 0;
struct file_operations hello_fops = {
.owner = THIS_MODULE
};
static void char_reg_setup_cdev (void)
{
int error, devno = MKDEV (hello_major, hello_minor);
cdev_init (cdev, hello_fops);
cdev.owner = THIS_MODULE;
cdev.ops = hello_fops;
error = cdev_add (cdev, devno , 1);
if (error)
printk (KERN_NOTICE Error %d adding char_reg_setup_cdev, error);
}
struct class *my_class;
static int __init hello_2_init (void)
{
int result;
dev = MKDEV (hello_major, hello_minor);
result = register_chrdev_region (dev, number_of_devices, hello);
if (result0) {
printk (KERN_WARNING hello: can't get major number %dn, hello_major);
return result;
}
char_reg_setup_cdev ();
/* create your own class under /sysfs */
my_class = class_create(THIS_MODULE, my_class);
if(IS_ERR(my_class))
{
printk(Err: failed in creating class.n);
return -1;
}
/* register your own device in sysfs, and this will cause udev to create corresponding device node */
device_create( my_class, NULL, MKDEV(hello_major, 0), hello %d, 0 );
printk (KERN_INFO Registered character drivern);
return 0;
}
static void __exit hello_2_exit (void)
{
dev_t devno = MKDEV (hello_major, hello_minor);
cdev_del (cdev);
device_destroy(my_class, MKDEV(adc_major, 0)); //delete device node under /dev
class_destroy(my_class); //delete class created by us
unregister_chrdev_region (devno, number_of_devices);
printk (KERN_INFO char driver cleaned upn);
}
module_init (hello_2_init);
module_exit (hello_2_exit);
这样,模块加载后,就能在/dev目录下找到hello0这个设备节点了。
节点 自动 创建 设备 实现 模块 初始 函数 驱动 相关文章:
- 基于ZigBee的城市照明监控系统网关节点的软硬件设计(01-15)
- 嵌入式多节点的无线批量程序更新系统设计(11-02)
- 智能互连的物联网边缘节点的真正安全(06-13)
- 一种基于FPGA的T-MPLS网络Gb/s核心节点的设计(06-04)
- 智能传感器节点能有多强大,这个方案告诉你(06-03)
- RS485应用所遇到的问题和维护总结一下(12-21)