在Linux内核驱动开发中,设备类(Class)是一个重要的概念,它允许将相似类型的设备组织在一起,并在/sys/class/
目录下展示。本章将介绍如何自动创建一个设备类,并在其中显示设备信息。
函数 | 描述 |
---|---|
class_create() |
创建一个新的设备类 |
device_create() |
在类中创建设备节点 |
class_destroy() |
销毁设备类 |
device_destroy() |
销毁设备节点 |
以下是一个简单的示例,展示如何创建设备类并在其中添加设备:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
static struct class *my_class;
static struct device *my_device;
static int __init my_init(void)
{
// 创建设备类
my_class = class_create(THIS_MODULE, "my_class");
if (IS_ERR(my_class)) {
pr_err("Failed to create class\n");
return PTR_ERR(my_class);
}
// 在类中创建设备
my_device = device_create(my_class, NULL, MKDEV(0, 0), NULL, "my_device");
if (IS_ERR(my_device)) {
pr_err("Failed to create device\n");
class_destroy(my_class);
return PTR_ERR(my_device);
}
pr_info("Class and device created successfully\n");
return 0;
}
static void __exit my_exit(void)
{
device_destroy(my_class, MKDEV(0, 0));
class_destroy(my_class);
pr_info("Class and device destroyed\n");
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Example of creating a class in /sys/class/");
加载上述模块后,您可以在/sys/class/
目录下看到新创建的类:
$ ls /sys/class/
my_class
$ ls /sys/class/my_class/
my_device
通过使用Linux内核提供的设备类API,我们可以轻松地在/sys/class/
目录下创建和管理设备类。这不仅有助于设备的管理,还为用户空间提供了方便的接口。