Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3404881
  • 博文数量: 754
  • 博客积分: 10132
  • 博客等级: 上将
  • 技术积分: 7780
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-14 23:36
文章分类

全部博文(754)

文章存档

2012年(3)

2011年(39)

2010年(66)

2009年(167)

2008年(479)

我的朋友

分类: LINUX

2009-04-08 16:09:38

drivers/base/bus.c:bus_register() ;
include/linux/kobject.h
 
#define decl_subsys(_name,_type,_hotplug_ops) \
struct subsystem _name##_subsys = { \
 .kset = { \
  .kobj = { .name = __stringify(_name) }, \
  .ktype = _type, \
  .hotplug_ops =_hotplug_ops, \
 } \
}
 
static struct sysfs_ops bus_sysfs_ops = {
 .show = bus_attr_show,
 .store = bus_attr_store,
};
 
static struct kobj_type ktype_bus = {
 .sysfs_ops = &bus_sysfs_ops,
};
 
decl_subsys(bus, &ktype_bus, NULL);
 
subsys_set_kset(bus, bus_subsys);
#define subsys_set_kset(obj,_subsys) \
 (obj)->subsys.kset.kobj.kset = &(_subsys).kset
解析:
struct kobject {
char * k_name;    指向设备名称的指针
char name[KOBJ_NAME_LEN];   设备名称
struct kref kref;    对象引用计数
struct list_head entry;   挂接到所在kset中去的单元
struct kobject * parent; 指向父对象的指针
struct kset * kset;    所属kset的指针
struct kobj_type * ktype;   指向其对象类型描述符的指针
struct dentry * dentry; sysfs文件系统中与该对象对应的文件节点路径指针
};
struct kset {
struct subsystem * subsys;   所在的subsystem的指针
struct kobj_type * ktype;   指向该kset对象类型描述符的指针
struct list_head list;      用于连接该kset中所有kobject的链表头
struct kobject kobj;     嵌入的kobject
struct kset_hotplug_ops * hotplug_ops; 指向热插拔操作表的指针
};
Kset数据结构还内嵌了一个kobject对象(由kobj域表示),所有属于这个kset 的kobject对象的parent
域均指向这个内嵌的对象。
(obj)->subsys.kset ;  //与总线bus相关的子系统集合
(obj)->subsys.kset.kobj ; //与总线bus相关的子系统集合对象的父对象
(obj)->subsys.kset.kobj.kset ; //与总线bus相关的子系统集合对象的父对象所属集合{相当于bus的父kset指向bus_subsys的kset}
阅读(1337) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~