函数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
所示的结果。
执行命令ls /sys/class查看逻辑类目录,出现如图B
所示的结果。
删除内核模块,执行命令rmmod class_create_destroy.ko,输入命令dmesg -c查看系统输出信息,然后再输入命令ls /sys/class查看设备类的目录是否存在,出现如图C
所示的信息。
结果分析:
图A
说明设备类添加成功,说明宏class_create()能够动态的创建一个设备类,并将其加入Linux内核系统中。图B
的设备类查看结果显示信息进一步说明了宏class_create()的作用。图C
的显示信息说明了函数class_destroy()能够将设备类从Linux内核系统中删除,设备类目录的查看结果更进一步说明了函数class_destroy()的作用。
如果注释掉宏class_create()的调用,去掉对函数__class_create()的注释,保存文件,重新编译模块,加载模块,重新执行上面的测试,会出现和上面相同的结果,同样可以说明函数__class_create()的作用。