linux驱动之buses_init

linux驱动之buses_init()

通过buses_init()分析一下kset,kobject
代码:
driver/base/bus.c
lib/kobject.c

内核启动阶段,生成/sys/bus目录

static struct kset *bus_kset;
int __init buses_init(void)
{
   
	bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
	...
	return 0;
}

kset和kobject都代表sysfs中一个目录,kset有链表用于管理多个kobject,
kobject代表一个设备

struct kset {
   
	//kobj挂在list链表上
	struct list_head list;
	spinlock_t list_lock;
	struct kobject kobj;
	//当kobject有事件发生时调用,用于设置环境变量或过滤事件
	const struct kset_uevent_ops *uevent_ops;
};

分配一个kset并且注册,会在sysfs中生成目录,parent_kobj用于指定上级目录,
为NULL是上级目录就是/sys

struct kset *kset_create_and_add(const char *name,
				 const struct kset_uevent_ops *uevent_ops,
				 struct kobject *parent_kobj)
{
   
	struct kset *kset;
	int error;

	kset = kset_create(name, uevent_ops, parent_kobj);
	...
	error = kset_register(kset);
	...
	return kset;
}

动态分配kset

static struct kset *kset_create(const char *name,
				const struct kset_uevent_ops *uevent_ops,
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值