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);