Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4251700
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: LINUX

2012-01-03 13:04:05

本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:yuweixian4230@163.com
博客:
yuweixian4230.blog.chinaunix.net  


本章节将介绍 class_create class_destroy 使用
========================================================================
struct class 定义在#include

1.宏class_create()
文件包含:#include

宏定义: 
   在内核源码中位置:2.6.35-src/include/linux/device.h
  1. 310    #define class_create(owner, name) \
  2.  311   ({ \
  3.  312          static struct lock_class_key __key; \
  4.  313          __class_create(owner, name, &__key); \
  5.  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);

==================================================================    
程序:简单在内核中建立自己的动态设备逻辑类

附件代码: class_create_destroy.rar   将rar修改为tar.bz2
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>

  4. #include <linux/device.h>//class_create

  5. struct class *mem_class;

  6. static int __init class_create_destroy_init(void)
  7. {
  8.     printk("class_create_destroy_init init..\n");
  9.     mem_class = class_create(THIS_MODULE,"ywx_dev");
  10.     if(IS_ERR(mem_class))
  11.     {
  12.         printk("err:failed create class\n");
  13.         return -1;
  14.     }
  15.     printk("class create suceess\n");
  16.     return 0;
  17. }

  18. static void __exit class_create_destroy_exit(void)
  19. {
  20.     printk("leaving class...\n");
  21.     class_destroy(mem_class);
  22.     printk("leaving finished.\n");
  23. }

  24. MODULE_LICENSE("GPL");
  25. module_init(class_create_destroy_init);
  26. module_exit(class_create_destroy_exit);
使用方法:
  1. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# insmod ./class_create_destroy.ko
  2. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# dmesg | tail -8
  3. [ 2360.949466] class_create_destroy_init init..
  4. [ 2360.949956] class create suceess
  5. //在/sys/class/下生成我们自己建立的设备的逻辑类
  6. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# ls /sys/class | grep ywx
  7. ywx_dev
  8. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# rmmod class_create_destroy
  9. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# dmesg | tail -8
  10. [ 2360.949466] class_create_destroy_init init..
  11. [ 2360.949956] class create suceess
  12. [ 2431.145922] leaving class...
  13. [ 2431.149030] leaving finished.
  14. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy# ls /sys/class | grep ywx
  15. root@ywx:/home/ywx/desktop/module/api_/class_create_destroy#


阅读(3619) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~