linux 创建节点方式


通过 device_create_file 创建/sys/devices下的设备节点

1 使用DEVICE_ATTR初始化device_attribute,或直接初始化该结构体

static DEVICE_ATTR(fw_version,S_IRUGO,mxt_fw_version_show, mxt_fw_version_store);

2 调用device_create_file创建属性节点

ret = device_create_file(&pdev->dev, &dev_attr_fw_version.attr);

3 删除节点

if(ret) 
    device_remove_file(&pdev->dev, &dev_attr_fw_version.attr);

查看代码,其实device_create_file最终也调用了sysfs_create_file;一般是下一种方法用的多。

通过 sysfs_create_group 创建/sys/下的设备节点

这种情况,创建的节点的dev和platform驱动中的dev不是一个
1 首先定义设备:

static DEVICE_ATTR(fw_version,S_IRUGO,mxt_fw_version_show, mxt_fw_version_store);

2 增加结构体:

static struct attribute *mxt_attrs[] ={
&dev_attr_fw_version.attr,
NULL
}
static const struct attribute_group mxt_attr_group = {
.attr = mxt_attrs,
}

3 创建kobject

kobj = kobject_create_and_add("name", struct kobject *parent);

4 创建节点:

ret = sysfs_create_file(&kobj.&dev_attr_fw_version.attr);//或
ret = sysfs_create_group(&kobj.&mxt_attr_group);

5 删除节点:

if(kobj == NULL)
    kobject_del(kobj);
if(ret)
    sysfs_remove_file(&kobj.&dev_attr_fw_version.attr);//或
    sysfs_remove_group(&kobj.&mxt_attr_group);

通过proc_create创建/proc/下节点

1 创建目录

struct proc_dir_entry *dir=NULL;
dir= proc_mkdir("dir_name",parent_name);

2 创建节点

 proc_create("node_name", 0664, dir, &nod_fops);//0664是权限,fops是file_fops

3 删除节点

 remove_proc_entry("node_name", dir);

字符设备创建/dev和/sys/class节点

这种方式没有用到kobject的show、store,所以需要自己填充cdev_ops

dev_class = class_create(THIS_MODULE, DEV_NAME);
	
dev_device = device_create(dev_class, NULL, dev_id, NULL, DEV_NAME);

3 删除

IS_ERR(dev_device)==1;//发生错误
    device_destroy(dev->lclass,id);
IS_ERR(dev_class)==1;//发生错误
    class_destroy(dev->class);

mknod创建临时节点

···
mknod /dev/name c id_major id_minor 字符设备的
rm 一切皆文件 xiu a
···

链接

int sysfs_create_link(struct kobject *kobj, struct kobject *target,const char *name)

void sysfs_remove_link(struct kobject *kobj, char *name);

posted @ 2021-12-23 15:28  月的光景  阅读(1257)  评论(0编辑  收藏  举报