kset是具有相同类型的kobject的集合,它内嵌了一个kobject所以它在sysfs文件系统中表现为一个文件夹,但它增加了新功能“支持热插拔事件......,在sysfs文件系统中直观的表现是:kobject所对应的文件夹不能再包含其他的文件夹,而kset可以,因为第一句话。
struct kobject
{
struct kset *kset; // 指向所属的kset(上图最浅色的指向)
struct kobject *parent;//指向所属的kobject(上图黑色间断指向),通常与kset ->kobject相等
.....................
}
struct kset
{
struct list_head list;//连接该kset集合中所有的kobject对象(上图kset child list)
spinlock_t list_lock;
struct kobject kobj;//上图中内嵌在kset中的kobject
struct kset_uevent_ops *uevent_ops;
}
在linux系统配置发生变化时(如kset,kobject)一个通知会从内核空间发送到用户空间,这就是热插拔事件。这个时候会调用uevent中的处理函数,向用户空间传递一些参数。用户空间通过这些参数来加载相应的驱动程序,创建设备节点等来相应热插拔事件
struct kset_uevent_ops
{
int (*filter)(struct kset*,struct kobject*);
const char * (*name)(struct kset *,struct kobject*);
int (*uevent)(struct kset *,struct kobject*,struct kobject_uevent_env*);
}
该kset中发生热插拔事件时,这3个函数将被调用。filter决定是否将事件传递给用户空间(返回0时不传递);name传递给用户空间相应的字符串;uevent将用户空间需要的参数添加到环境变量。
int kobject_set_name(struct kobject*,char *)//设置文件夹名字
int kset_register(struct kset*)//注册kset,
void kset_unregister(struct kset*)//注销kset
阅读(4288) | 评论(0) | 转发(3) |