644 (LK) kobject 实例

/*
 * kobject example
 */
#include <linux/kobject.h>
#include <linux/module.h>
#include <linux/init.h>

static struct kobject *kobj_a;
static struct kobject *kobj_a1;
static struct kobject *kobj_a2;

static int __init example_init(void)
{
    /* Create kobject "ko_a" under /sys/kernel/ */
    kobj_a = kobject_create_and_add("ko_a", kernel_kobj);
    if (!kobj_a)
        goto err;

    /* Create kobject "ko_a1" under /sys/kernel/ko_a/ */
    kobj_a1 = kobject_create_and_add("ko_a1", kobj_a);
    if (!kobj_a1)
        goto err_a1;

    /* Create kobject "ko_a2" under /sys/kernel/ko_a/ */
    kobj_a2 = kobject_create_and_add("ko_a2", kobj_a);
    if (!kobj_a2)
        goto err_a2;

    return 0;

err_a2:
    kobject_put(kobj_a1);
err_a1:
    kobject_put(kobj_a);
err:
    return -EINVAL;
}

static void __exit example_exit(void)
{
    kobject_put(kobj_a2);
    kobject_put(kobj_a1);
    kobject_put(kobj_a);
}

module_init(example_init);
module_exit(example_exit);
MODULE_LICENSE("GPL");