Linux内核API class_destroy

函数class_destroy()用于删除设备的逻辑类,即从Linux内核系统中删除设备的逻辑类。此函数执行的效果是删除函数__class_create()或宏class_create()在目录/sys/class下创建的逻辑类对应的文件夹。

class_destroy文件包含

#include <linux/device.h>

class_destroy函数定义

在内核源码中的位置:linux-3.19.3/drivers/base/class.c

函数定义格式:

void class_destroy(struct class *cls)

class_destroy输入参数说明

  • 函数class_destroy()的输入参数是struct class结构体类型的变量,代表设备的逻辑类,此结构体的详细解释请参考极客笔记函数__class_create()分析文档的返回参数说明部分。

class_destroy返回参数说明

  • 函数class_destroy()的返回值是void类型的变量,即不返回任何值。

class_destroy实例解析

编写测试文件:class_create_destroy.c

头文件引用、全局变量定义及相关函数声明:

/*头文件引用*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
MODULE_LICENSE("GPL");

/*全局变量定义*/
struct class *mem_class;        //设备类指针

模块加载函数定义:

static int __init class_create_destroy_init (void)
{
    printk("into the class_create_destroy_init\n");
    mem_class = class_create(THIS_MODULE, "my_char_dev");      //创建设备类

/*
    struct lock_class_key key;
    mem_class=__class_create(THIS_MODULE, "my_char_dev", &key); //创建设备类
*/

    if(IS_ERR(mem_class))      //判断创建是否成功
        {
            printk("Err: failed in creating class.\n");
            return -1;
    }
    printk("class create success\n");
    printk("out the class_create_destroy_init\n");
    return 0;
}

模块退出函数定义:

void __exit class_create_destroy_exit (void)
{
    printk("into class_create_destroy _exit\n");
        class_destroy(mem_class);              //删除设备类
    printk("the mem_class has been destroyed\n");
    printk("out class_create_destroy_exit\n");
}

模块加载、退出函数调用:

module_init(class_create_destroy_init);      //模块加载函数调用
module_exit(class_create_destroy_exit);      //模块卸载函数调用

实例运行结果及分析:

首先编译模块,执行命令insmod class_create_destroy.ko插入内核模块,然后输入命令dmesg -c查看模块插入结果,会出现如图A所示的结果。

Linux内核API class_destroy

执行命令ls /sys/class查看逻辑类目录,出现如图B所示的结果。

Linux内核API class_destroy

删除内核模块,执行命令rmmod class_create_destroy.ko,输入命令dmesg -c查看系统输出信息,然后再输入命令ls /sys/class查看设备类的目录是否存在,出现如图C所示的信息。

Linux内核API class_destroy

结果分析:

A说明设备类添加成功,说明宏class_create()能够动态的创建一个设备类,并将其加入Linux内核系统中。图B的设备类查看结果显示信息进一步说明了宏class_create()的作用。图C的显示信息说明了函数class_destroy()能够将设备类从Linux内核系统中删除,设备类目录的查看结果更进一步说明了函数class_destroy()的作用。

如果注释掉宏class_create()的调用,去掉对函数__class_create()的注释,保存文件,重新编译模块,加载模块,重新执行上面的测试,会出现和上面相同的结果,同样可以说明函数__class_create()的作用。

赞(0)
未经允许不得转载:极客笔记 » Linux内核API class_destroy
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址