sys文件系统总结,,

参考博客:http://blog.csdn.net/fudan_abc/archive/2007/09/01/1768277.aspx

在2.6内核版本以上就多了sysfs文件系统,主要功能:

电源管理和系统关机

这些需要一个对系统的结构的理解. 例如, 一个 USB 宿主适配器不可能被关闭, 在处理所有的连接到这个适配器的设备之前. 这个设备模型使能了一个按照正确顺序的系统硬件的遍历.

与用户空间的通讯

sysfs 虚拟文件系统的实现被紧密地捆绑进设备模型, 并且暴露它所代表的结构. 关于系统到用户空间的信息提供和改变操作参数的旋纽正越来越多地通过 sysfs 和 通过设备模型来完成.

可热插拔设备

计算机硬件正更多地动态变化; 外设可因用户的一时念头而进出. 在内核中使用的来处理和(特别的)与用户空间关于设备插入和拔出的通讯, 是由设备模型来管理.

设备类别

系统的许多部分对设备如何连接没有兴趣, 但是它们需要知道什么类型的设备可用. 设备模型包括一个机制来分配设备给类别, 它在一个更高的功能性的级别描述了这些设备, 并且允许它们从用户空间被发现.

对象生命期

许多上面描述的功能, 包括热插拔支持和 sysfs, 使在内核中创建和操作对象复杂了. 设备模型的实现要求创建一套机制来处理对象生命期, 它们之间的关系, 和它们在用户空间的表示.

(linux设备驱动第三版)


用subsystem管理kset集合,kset管理kobject集合

subsystem->kset管理kset->kobject ,kset->list管理kobject

主要函数:

kobject_register->kobject_add,kobject_unregister->kobject_del

kset_register,subsystem_register都添加自身对象到上一级

为实现特定的组织结构而引入的结构功能结构,只要某个结构包含了这个功能结构也就具有了这个功能,例子很多:kref,应用计数,list_head,链表。。等等

kset具有list就有了管理个个kobject功能,而kset有有kobject所以也可以被其他的kset管理,而其上层往往是subsystem结构

同样的subsystem包含kset,而kset又包含kobject所以subsystem也有被管理的属性

ldd3的examples:


首先明白内核中已经存在全局变量subsystem结构的bus_subsys,因为是顶层(一般全局变量都是顶层),所以不表现为kobject的被管理属性,而是kset的管理属性,用于管理ldd3的subsys,所以还穿在class_subsys,等subsystem的全局变量,

相关函数其实就是调用了两个注册函数,bus_register(), device_register()。bus_create_file()是在sysfs下创建一个文件夹,

因为定义了

struct bus_type ldd_bus_type = {
.name = "ldd",
.match = ldd_match,
.hotplug = ldd_hotplug,
};

struct device ldd_bus = {
.bus_id = "ldd0",
.release = ldd_bus_release
};

ldd_bus即使总线,又是设备
bus_register(),向系统注册ldd_bus_type这个总线类型。bus_create_file()这个就是向sysfs中创建一个文件。device_register()系统注册ldd_bus这个硬件类型。

device_register()的代码,它也是向devices_subsys这个subsystem注册

所以说bus_register(),device_register(),driver_regedist(),等函数都是对sysfs文件系统的操作,最终都要调用kobject_register或kobject_add,都是顶层的向bus_sys,devices_sys,drivers_sys全局变量注册kobject,除了对kobject的操作外,device_register(),driver_regedist(),两个函数还分别去bus的devices和drivers中寻找相应的设备和驱动,并且调用prode

可以认为因为结构从kobject到kset在到subsystem在到ldd_bus结构扩展了,函数也从kobject->register,在到kset->。。。。到bus_register,,函数也扩展了,因为要设置的参数变多了,所以了解了功能结构是对上层的理解很有帮助。

sysfs文件系统就说到这里了,,想进一步了解就去看上面我给的网址了


你可能感兴趣的:(struct,通讯,list,扩展,file,linux)