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