• 编译使用
insmod 001_kobject.ko #加载驱动,必须使用root用户
dmesg | tail #查看驱动加载情况
rmmod 001_kobject  #卸载驱动,必须使用root用户
dmesg | tail #查看驱动卸载情况
  • 查看挂载情况
lsmod
ls /sys

代码

#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 kobject *o3;
struct kobj_type kt;
// 模块加载时调用的函数
static int my_kobject_init(void)
{
    int ret;
    o1 = kobject_create_and_add("myobject01",NULL);
    o2 = kobject_create_and_add("myobject02",o1);
    //创建方式二
    o3 = kzalloc(sizeof(struct kobject),GFP_KERNEL);
    ret=kobject_init_and_add(o3,&kt,NULL,"%s","myobject03");

    return 0; // 返回 0 表示加载成功
}

// 模块卸载时调用的函数
static void my_kobject_exit(void)
{
    kobject_put(o1);
    kobject_put(o2);
    kobject_put(o3);
    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");