设备初始化缩水篇(一)
来源:互联网 发布:网络共享 编辑:程序博客网 时间:2024/04/25 22:19
之前的都是直接复制,稍微翻译了一下,不过代码太乱,没有头绪,这里简化一下看看能否有一点头绪
int __init devices_init(void)
{
devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);
dev_kobj = kobject_create_and_add("dev", NULL);
sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);
sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);
}
int __init buses_init(void)
{
bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);
}
int __init classes_init(void)
{
class_kset = kset_create_and_add("class", NULL, NULL);
}
int __init firmware_init(void)
{
firmware_kobj = kobject_create_and_add("firmware", NULL);
}
int __init hypervisor_init(void)
{
hypervisor_kobj = kobject_create_and_add("hypervisor", NULL);
}
struct kset *kset_create_and_add(const char *name,
const struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
{
kset = kset_create(name, uevent_ops, parent_kobj);
error = kset_register(kset);
}
static struct kset *kset_create(const char *name,
const struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
{
kset->kobj.ktype = &kset_ktype;
return kset;
}
static struct kset *kset_create(const char *name,
const struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
{
retval = kobject_set_name(&kset->kobj, "%s", name);
}
int kset_register(struct kset *k)
{
kset_init(k);
err = kobject_add_internal(&k->kobj);
kobject_uevent(&k->kobj, KOBJ_ADD);
}
static int kobject_add_internal(struct kobject *kobj)
{
error = create_dir(kobj);
}
static int create_dir(struct kobject *kobj)
{
error = sysfs_create_dir_ns(kobj, kobject_namespace(kobj));
}
int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)
{
kn = kernfs_create_dir_ns(parent, kobject_name(kobj), S_IRWXU | S_IRUGO | S_IXUGO, kobj, ns);
}
struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,
const char *name, umode_t mode,
void *priv, const void *ns)
{
rc = kernfs_add_one(&acxt, kn);
}
int kernfs_add_one(struct kernfs_addrm_cxt *acxt, struct kernfs_node *kn)
{
ret = kernfs_link_sibling(kn);
}
static int kernfs_link_sibling(struct kernfs_node *kn)
{
rb_link_node(&kn->rb, parent, node);
}
看刚开始那几个devices_kset 、bus_kset 、class_kset 的parent都是NULL,所以在/sys目录下生成了devices、bus和class三个文件夹,而system_kset的parent为&devices_kset->kobj,所以在devices目录下生成了system目录
- 设备初始化缩水篇(一)
- 设备初始化缩水篇(二)
- 市值缩水一成,咋整?
- usb网卡驱动分析(一)——设备初始化
- kinect编程(一):初始化、启用kinect设备
- 2410的初始化流程(设备初始化)
- 深入理解Linux网络技术内幕——设备的注册与初始化(一)
- 深入理解Linux网络技术内幕-设备注册和初始化(一)
- JAVA初始化(一)
- 桥初始化(一)
- 第一讲:2410的初始化流程(设备初始化)
- 块设备(一)
- 3D图形学编程基础-基于Direct3D11-学习记录(一)初始化DX设备,实现立方体绘制
- Linux设备驱动--字符设备(一)
- 变量的初始化(一)
- (一) Andriod初始化流程
- Java 之 初始化(一)
- 事件模块(一)初始化
- 杨幂生宝宝 小糯米
- C++多态的实现原理(转载)
- .Net 中的反射
- 汽车中的AT、MT和AMT
- GCM:入门
- 设备初始化缩水篇(一)
- asp.net类中公共类DBHelp(C#)
- shell编程expect的几个应用实例
- 一步一步教你实现CTreeCtrl 自绘
- 经纬财富:井冈山现货白银(天通银)风险控制策略
- si4463突破最大包64字节发送
- switch语句能否作用在byte上,能否作用在long上,能否作用在String上
- AndroidMainifest标签使用说明4——<application>
- jQuery--效果