BUS PRIVATE
/**
* struct bus_type_private - structure to hold the private to the driver core portions of the bus_type structure.
*
* @subsys - the struct kset that defines this bus. This is the main kobject
* @drivers_kset - the list of drivers associated with this bus
* @devices_kset - the list of devices associated with this bus
* @klist_devices - the klist to iterate over the @devices_kset
* @klist_drivers - the klist to iterate over the @drivers_kset
* @bus_notifier - the bus notifier list for anything that cares about things
* on this bus.
* @bus - pointer back to the struct bus_type that this structure is associated
* with.
*
* This structure is the one that is the actual kobject allowing struct
* bus_type to be statically allocated safely. Nothing outside of the driver
* core should ever touch these fields.
*/
struct bus_type_private {
struct kset subsys;<span style="white-space:pre"> </span>//指向本身的这个bus的kset集合
struct kset *drivers_kset;//子目录的drivers的kset
struct kset *devices_kset;//子目录的devices的kset
struct klist klist_devices;//链表,链表元素knode,每个knode所属一个设备struct device
struct klist klist_drivers;//同上,也是个链表。knode所属一个驱动实体 struct device_driver
struct blocking_notifier_head bus_notifier;//一个通知链表,给关心这个bus变化的对象进行操作
unsigned int drivers_autoprobe:1;//代表是否允许 驱动自动探测设备 设备自动探测驱动
struct bus_type *bus;//指向bus实体本身
};
//总结:
bus 是什么玩意????
答:bus就是管理着一组设备,设备之间代码表示都是结构体内嵌了个kobject,各个设备的object相互链接。然后这些object都一个parent,就是这个bus实体中内嵌的driver_kset or device_kset。
bus上有2个链表,链表元素是knode,一个链表是驱动链表,一个设备链表。然后,每个bus目录下,有2个目录 分别为driver和device,这2个目录其实就是对应这个private里的两个drivers_kset and devices_kset。新增设备或者驱动,加载链表上的同时,会把本身的kobject的parent指向driver或者device。
//
DEVICE PRIVATE
struct driver_private {
struct kobject kobj;//driver 实体的kobject对象变量
struct klist klist_devices;//管理的设备列表,列表里的设备都是匹配本驱动的
struct klist_node knode_bus;//一个knode节点,会连接到所属的bus的驱动列表上//
struct module_kobject *mkobj;//驱动归属模块 不太懂
struct device_driver *driver;//驱动实体本身
};
#define to_driver(obj) container_of(obj, struct driver_private, kobj)
//驱动的private,在sys目录里只存在于bus下的driver目录下的各个驱动的子目录下。
驱动的存在性,即被链接到bus总线的驱动链表上。本身又维护着匹配的设备链表。本身作为kobject隶属于driver目录
/**
* struct class_private - structure to hold the private to the driver core portions of the class structure.
*
* @class_subsys - the struct kset that defines this class. This is the main kobject
* @class_devices - list of devices associated with this class
* @class_interfaces - list of class_interfaces associated with this class
* @class_dirs - "glue" directory for virtual devices associated with this class
* @class_mutex - mutex to protect the children, devices, and interfaces lists.
* @class - pointer back to the struct class that this structure is associated
* with.
*
* This structure is the one that is the actual kobject allowing struct
* class to be statically allocated safely. Nothing outside of the driver
* core should ever touch these fields.
*/
struct class_private {
struct kset class_subsys;//class本身的kset
struct klist class_devices;//class涉及的knode元素单元的list列表
struct list_head class_interfaces;//
struct kset class_dirs;
struct mutex class_mutex;
struct class *class;
};
#define to_class(obj) \
container_of(obj, struct class_private, class_subsys.kobj)