linux文件系统的系统分析--(七)sysfs下属性文件的创建

xiaoxiao2021-02-27  155

  属性文件的建立和目录的建立相差不大,因为不管目录还是普通文件,都由一个sysfs_dirent代表

sysfs_create_file-->sysfs_add_file-->sysfs_add_file_mode

[cpp]   view plain  copy intsysfs_add_file_mode(struct sysfs_dirent *dir_sd,   conststruct attribute *attr, int type, mode_t amode)   {   umode_tmode = (amode & S_IALLUGO) | S_IFREG;   structsysfs_addrm_cxt acxt;   structsysfs_dirent *sd;   intrc;      sd= sysfs_new_dirent(attr->name, mode, type); //sysfs_dirent的初始化   if(!sd)   return-ENOMEM;   sd->s_attr.attr= (void *)attr; //属性文件的关系   sysfs_dirent_init_lockdep(sd);      sysfs_addrm_start(&acxt,dir_sd);   rc= sysfs_add_one(&acxt, sd); //层次关系的建立   sysfs_addrm_finish(&acxt);      if(rc)   sysfs_put(sd);      returnrc;   }      唯一的区别就是:在目录时是

sd->s_dir.kobj= kobj; //sysfs_direntkobject的联系建立

  而在属性文件时是

sd->s_attr.attr = (void *)attr;    //sysfs_dirent与attribute的联系

    后面,在分析文件的读写时,会再次回头看到attr的,这里先给出attribute的定义:

[cpp]   view plain  copy struct attribute {       const char      *name;       struct module       *owner;       mode_t          mode;   #ifdef CONFIG_DEBUG_LOCK_ALLOC       struct lock_class_key   *key;       struct lock_class_key   skey;   #endif   };  
转载请注明原文地址: https://www.6miu.com/read-15679.html

最新回复(0)