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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM