驱动--自动创建设备节点

自动创建设备节点

头文件:#include

自动创建设备节点:

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里 

驱动--自动创建设备节点_第1张图片

你可能感兴趣的:(linux)