#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/kobject.h>
struct kobject *o1;
struct kobject *o2;
struct kset *ks;
struct kobj_type kt;
// 模块加载时调用的函数
static int my_kobject_init(void)
{
int ret;
ks = kset_create_and_add("mykset",NULL,NULL);
o1 = kzalloc(sizeof(struct kobject),GFP_KERNEL);
o1->kset = ks;
ret = kobject_init_and_add(o1,&kt,NULL,"%s","mykobjcet01");
o2 = kzalloc(sizeof(struct kobject),GFP_KERNEL);
o2->kset = ks;
ret = kobject_init_and_add(o2,&kt,NULL,"%s","mykobjcet02");
return 0; // 返回 0 表示加载成功
}
// 模块卸载时调用的函数
static void my_kobject_exit(void)
{
kobject_put(o1);
kobject_put(o2);
kset_put(ks);
printk("Goodbye, World! Driver unloaded.\n");
}
// 注册模块的入口和出口函数
module_init(my_kobject_init);
module_exit(my_kobject_exit);
// 模块许可证声明,必须是 GPL 兼容的许可证才能加载到内核中
MODULE_LICENSE("GPL");
// 模块作者信息
MODULE_AUTHOR("wyl");
// 模块描述
MODULE_DESCRIPTION("kobject");