内核如何创建一个核心节点:
- struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
- {
- struct kobject *kobj;
- int retval;
- kobj = kobject_create();
- if (!kobj)
- return NULL;
- retval = kobject_add(kobj, parent, "%s", name);
- if (retval) {
- printk(KERN_WARNING "%s: kobject_add error: %d\n",
- __func__, retval);
- kobject_put(kobj);
- kobj = NULL;
- }
- return kobj;
- }
- EXPORT_SYMBOL_GPL(kobject_create_and_add);
节点是挂在kobj下。那么kobj在哪里呢?
- <div><pre name="code" class="csharp">struct kobject *kobject_create(void)
- {
- struct kobject *kobj;
- kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
- if (!kobj)
- return NULL;
- kobject_init(kobj, &dynamic_kobj_ktype);
- return kobj;
- }</pre>
- <pre name="code" class="csharp">static struct kobj_type dynamic_kobj_ktype = {
- .release = dynamic_kobj_release,
- .sysfs_ops = &kobj_sysfs_ops,
- };</pre></div>
所以。能够知道power节点是在sysfs的ops下创建。它的位置就是 /sys/power/
|