Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240334
  • 博文数量: 22
  • 博客积分: 592
  • 博客等级: 中士
  • 技术积分: 344
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-22 14:49
文章分类

全部博文(22)

文章存档

2013年(2)

2012年(6)

2011年(14)

我的朋友

分类: LINUX

2011-05-24 11:36:19

        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) |
1

上一篇:胸怀有多大魅力就有多大

下一篇:*.c 和*.h

给主人留下些什么吧!~~