自动创建设备节点
头文件:#include <linux/device.h>
自动创建设备节点:
struct class *cls;
cls = class_create(owner, name) /void class_destroy(struct class *cls)
功能:向用户空间提交目录信息
参数:
@owner :THIS_MODULE (宏,固定格式)
@name :目录名字
返回值:成功返回struct class *指针
失败返回错误码指针 int (-5)
if(IS_ERR(cls)){ //将错误码指针转换为错误码
printk("class _create error");
return IS_ERR(cls);
}
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...)
void device_destroy(struct class *class, dev_t devt)
功能:向用户空间提交文件信息
参数:
@class :目录名字 cls(向用户空间提交目录信息时产生的返回值)
@parent:NULL
@devt :设备号 MKDEV(major,0)
@drvdata :NULL
@fmt :文件的名字
返回值:成功返回struct device *指针
失败返回错误码指针 int (-5)
struct class*cls;
struct device *dev;
//自动创建设备节点
cls = class_create(THIS_MODULE,CNAME);
if(IS_ERR(cls)){
printk("class create error\n");
return PTR_ERR(cls);
}
dev = device_create(cls,NULL,MKDEV(major,0),NULL
,CNAME);
if(IS_ERR(dev)){
printk("device create error\n");
return PTR_ERR(dev);
}
头文件
声明处:
入口处:
//出口-》这里写了卸载时注销的函数
static void __exit hello_exit(void)//出口
{
device_destroy(devc,MKDEV(major,1));//注销内容
class_destroy(cls);//注销目录
iounmap(green_base);
iounmap(blue_base);
iounmap(red_base);
unregister_chrdev(major,CNAME);
}
注意:MKDEV(major,0)为一个宏,用于配置主设备号和次设备号
#insmod hello.ko
ls查看 并没有hello设备节点
自动创建设备节点hello建立在dev里