Chinaunix首页 | 论坛 | 博客
  • 博客访问: 462537
  • 博文数量: 185
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 681
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-06 21:45
个人简介

为梦而战

文章分类

全部博文(185)

文章存档

2016年(3)

2015年(103)

2014年(79)

我的朋友

分类: LINUX

2014-05-11 15:27:35

原文地址:linux设备模型之kset 作者:cqqjliyuan

        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

阅读(717) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~