本章节将介绍 class_create class_destroy 使用
========================================================================
struct class 定义在#include
1.宏class_create()
文件包含:#include
宏定义:
在内核源码中位置:2.6.35-src/include/linux/device.h
-
310 #define class_create(owner, name) \
-
311 ({ \
-
312 static struct lock_class_key __key; \
-
313 __class_create(owner, name, &__key); \
-
314 })
功能描述:
宏class_create()用于动态创建设备的逻辑类,并完成部分字段的初始化,然后将其添加进linux内核系统中。此函数的执行效果就是在目录/sys/class/下创建一个新的文件夹,此文件夹的名字为此函数的第二个输入参数,单词文件夹是空的。宏class_create()在实现时,调用了函数__class_create(),作用和函数__class_create()基本相同。
输入参数说明:
宏class_create()有两个输入参数
宏owner是一个struct module结构体类型的指针,指向函数__class_create()即将创建的struct class类型对象的拥有者,一般赋值为THIS_MODULE,详细查看:src/include/linux/module.h
参数name是char类型的指针,代表即将创建的struct class变量的名字
返回参数:
宏class_create()函数返回 struct class的逻辑类
2.函数class_destroy()
文件包含:#include
函数定义:
函数实现: src/drivers/base/class.c
函数定义格式: void class_destroy(struct class *cls);
==================================================================
程序:简单在内核中建立自己的动态设备逻辑类
-
#include <linux/init.h>
-
#include <linux/module.h>
-
#include <linux/kernel.h>
-
-
#include <linux/device.h>//class_create
-
-
struct class *mem_class;
-
-
static int __init class_create_destroy_init(void)
-
{
-
printk("class_create_destroy_init init..\n");
-
mem_class = class_create(THIS_MODULE,"ywx_dev");
-
if(IS_ERR(mem_class))
-
{
-
printk("err:failed create class\n");
-
return -1;
-
}
-
printk("class create suceess\n");
-
return 0;
-
}
-
-
static void __exit class_create_destroy_exit(void)
-
{
-
printk("leaving class...\n");
-
class_destroy(mem_class);
-
printk("leaving finished.\n");
-
}
-
-
MODULE_LICENSE("GPL");
-
module_init(class_create_destroy_init);
-
module_exit(class_create_destroy_exit);
使用方法:
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# insmod ./class_create_destroy.ko
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# dmesg | tail -8
-
[ 2360.949466] class_create_destroy_init init..
-
[ 2360.949956] class create suceess
-
//在/sys/class/下生成我们自己建立的设备的逻辑类
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# ls /sys/class | grep ywx
-
ywx_dev
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# rmmod class_create_destroy
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# dmesg | tail -8
-
[ 2360.949466] class_create_destroy_init init..
-
[ 2360.949956] class create suceess
-
[ 2431.145922] leaving class...
-
[ 2431.149030] leaving finished.
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# ls /sys/class | grep ywx
-
root@ywx:/home/ywx/desktop/module/api_/class_create_destroy#
阅读(350) | 评论(0) | 转发(0) |