Linux设备模型

        Linux设备模型是从内核2.6开始引入的,初衷是为了描述设备的拓扑结构及支持电源管理等新特性。从高次层来看设备模型主要由总线设备驱动构成,设备模型通过总线将系统中的设备和驱动关联起来。在设备模型中,所有的设备都通过总线相连,模型中的总线可以是实际物理总线或虚拟“平台”总线。

        Linux设备模型通过数据结构kobject和kset来实现设备的拓扑结构和层次关系。

1、kobject数据结构

 struct kobject {
 const char  *name;
 struct list_head entry;
 struct kobject  *parent;
 struct kset  *kset;
 struct kobj_type *ktype;
 struct sysfs_dirent *sd;
 struct kref  kref;
 unsigned int state_initialized:1;
 unsigned int state_in_sysfs:1;
 unsigned int state_add_uevent_sent:1;
 unsigned int state_remove_uevent_sent:1;
 unsigned int uevent_suppress:1;
};

 kobject通常是嵌入到其它结构中,比如字符设备

 struct cdev {
 struct kobject kobj;
 struct module *owner;
 const struct file_operations *ops;
 struct list_head list;
 dev_t dev;
 unsigned int count;
};

2、kobject相关的操作函数

int kobject_set_name(struct kobject *kobj, const char *fmt, ...)

该函数是设定kobject中的name成员。

void kobject_init(struct kobject *kobj, struct kobj_type *ktype)

该函数是初始化内核对象的kobject结构。

int kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)

该函数用来建立kobject层次关系和在sysfs下生成一个目录。

int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)

该函数是将kobject_init和kobject_add的功能合在一起。

struct kobject *kobject_create(void)

该函数是分配一个kobject对象并初始化

struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)

该函数是kobject_create和kobject_add功能的合并。
void kobject_del(struct kobject *kobj)

该函数是从sysfs中删除koject对应的目录。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值