太难了吧,看着看着就晕了,还是一个一个地仔细研究一下再写大作业吧
0x01 定义(参考书本)
表示系统中设备树的一个文件系统
0x02 前置知识(kobject,kset)
kobject
内核中有一个统一设备模型,提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构。设备模型的核心部分就是kobject,类似于java中的对象类,提供了诸如引用计数、名称和父指针等字段可以创建对象的层次结构
kobject通常是嵌入其他结构的,单独意义其实不大,例如cdev结构体中用到的kobject
这样子理解的话就是一个通用的对象结构体,我们在创建我们需要的对象的结构体时候,其结构体中会嵌入该kpbject结构体,从而可以拥有引用计数等那些功能
ktype
描述kobject所具有的普遍特性,对应的结构体为kobj_type结构体
sysfs_ops变量指向sysfs_ops结构体,该结构体描述了sysfs文件读写时的特性;default_attrs指向一个attribute结构体数组,该结构体定义了该kobject相关默认属性
kset
kset是kobject对象的集合体。把它看成是一个容器,将所有相关的kobject对象置于同一位置
0x03 sysfs具体解释
是一个虚拟文件系统,为我们提供了kobject对象层次结构视图,将kobject对象和目录项紧密联系起来(kobject对象中的dentry(目录项结构体)实现的),将kobject映射到某目录上
个人理解,sysfs实际上就是目录结构图???每个目录又对应的是一个kobject,sysfs仅仅是一颗树,不提供任何实际数据的文件。
所有具有相同类型的kobject在它们对应的sysfs目录下拥有相同的默认文件集合,属性文件
当从用户空间读取sysfs的项时调用show()方法,拷贝由sttr提供的属性值到buffer指定的缓冲区中,缓冲区大小为PAGE_SIZE字节;store()方法在写操作时调用,它会从buffer中读取size大小字节,将其放入attr表示的属性结构体变量中。