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

本文解析了Linux内核中sysfs文件系统的属性文件创建流程,详细介绍了sysfs_add_file_mode函数的工作原理,并展示了sysfs_dirent与attribute之间的关联方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

sysfs_create_file-->sysfs_add_file-->sysfs_add_file_mode

[cpp]   view plain  copy
  1. intsysfs_add_file_mode(struct sysfs_dirent *dir_sd,  
  2. conststruct attribute *attr, int type, mode_t amode)  
  3. {  
  4. umode_tmode = (amode & S_IALLUGO) | S_IFREG;  
  5. structsysfs_addrm_cxt acxt;  
  6. structsysfs_dirent *sd;  
  7. intrc;  
  8.   
  9. sd= sysfs_new_dirent(attr->name, mode, type); //sysfs_dirent的初始化  
  10. if(!sd)  
  11. return-ENOMEM;  
  12. sd->s_attr.attr= (void *)attr; //属性文件的关系  
  13. sysfs_dirent_init_lockdep(sd);  
  14.   
  15. sysfs_addrm_start(&acxt,dir_sd);  
  16. rc= sysfs_add_one(&acxt, sd); //层次关系的建立  
  17. sysfs_addrm_finish(&acxt);  
  18.   
  19. if(rc)  
  20. sysfs_put(sd);  
  21.   
  22. returnrc;  
  23. }  
   唯一的区别就是:在目录时是

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

  而在属性文件时是

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

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

[cpp]   view plain  copy
  1. struct attribute {  
  2.     const char      *name;  
  3.     struct module       *owner;  
  4.     mode_t          mode;  
  5. #ifdef CONFIG_DEBUG_LOCK_ALLOC  
  6.     struct lock_class_key   *key;  
  7.     struct lock_class_key   skey;  
  8. #endif  
  9. };  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值