一、class_create

函数功能

class_create()用于动态创建设备的逻辑类,并完成部分字段的初始化,然后将其添加进Linux内核系统中。此函数的执行效果就是在/sys/class/目录下创建一个新的文件夹,此文件夹的名字为此函数的第二个输入参数,但此文件夹是空的。宏class_create()在实现时,调用了函数__class_create()。

函数实现

<内核源码路径>/include/linux/device.h中:

#define class_create(owner, name)        \
({                      \static struct lock_class_key __key;    \__class_create(owner, name, &__key);   \
})

参数说明

  • owner:一个struct module结构体类型的指针,指向函数__class_create()即将创建的、“拥有”这个struct class的模块。一般赋值为THIS_MODULE,此结构体的详细定义见文件include/linux/module.h。
  • name:char类型的指针,代表即将创建的struct class变量的名字,用于给struct class的name字段赋值。通俗地说,就是指向struct class名称的字符串的指针。

返回值

与函数__class_create()的返回值相同,都代表新创建的逻辑类。

二、class_destroy

函数功能

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

函数声明与实现

函数声明

<内核源码路径>/include/linux/device.h中:

extern void class_destroy(struct class *cls);

函数实现

<内核源码路径>/drivers/base/class.c中:

/*** class_destroy - destroys a struct class structure* @cls: pointer to the struct class that is to be destroyed** Note, the pointer to be destroyed must have been created with a call* to class_create().*/
void class_destroy(struct class *cls)
{if ((cls == NULL) || (IS_ERR(cls)))return;class_unregister(cls);
}

参数说明

  • cls:struct class结构体类型的变量,代表通过class_create创建的设备的逻辑类。

返回值

无。

综合说明

开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样)。实际上现在Linux内核已经为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。
内核中定义了struct class结构体,顾名思义,一个struct
class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建
好了这个类,再调用device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应
device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。

注意事项

(1)class_create宏需要与函数class_destroy()配对使用,不能单独使用。当单独使用时,第一次不会出现错误,但当第二次插入模块时就会出现错误。

(2)class_create创建一个逻辑类后,还需在这个类下面创建设备,不然的话这个类没什么用。

参考链接

(1)​​​​​​Linux内核API class_create|极客笔记

(2)004_linux驱动之_class_create创建一个设备类 - 陆小果哥哥 - 博客园

(3)class_create(),device_create()使用

Linux内核API之class_create与class_destroy相关推荐

  1. linux vma,内存管理 – Linux内核API find_vma

    find_vma函数功能描述:find_vma( )函数根据一个属于某个进程的虚拟地址,找到其所属的进程虚拟区间,并返回相应的vma_area_struct结构体指针. find_vma文件包含 #i ...

  2. linux ns机制,Linux内核API ns_to_timespec

    ns_to_timespec函数功能描述:函数ns_to_timespec( )将参数表示的时间转换成用结构体timespec变量表示的时间,参数的时间单位是纳秒. ns_to_timespec文件包 ...

  3. linux irq 接口,中断机制 – Linux内核API irq_set_chip_data

    irq_set_chip_data函数功能描述:此函数是为irq_desc(结构体变量irq_desc的定义参见文件linux-3.19.3/include/linux/irqdesc.h)数组中对应 ...

  4. linux终止进程api,进程调度 – Linux内核API kthread_stop

    kthread_stop函数功能描述:此函数用于终止输入参数k对应的进程. kthread_stop文件包含 #include kthread_stop函数定义 在内核源码中的位置:linux-3.1 ...

  5. linux 内核 nice,进程调度 – Linux内核API set_user_nice

    set_user_nice函数功能描述:此函数用于设置进程的nice值,其实nice值的计算是根据进程的静态优先级,所以此函数用于更改进程的静态优先级.在更改进程的静态优先级的同时,会检查此进程是否可 ...

  6. linux中nice和prio关系,进程调度 – Linux内核API task_nice

    task_nice函数功能描述:此函数用于获取进程的nice值,nice值其实代表进程的优先级,此优先级与静态优先级有关,与静态优先级的关系是:nice=static_prio-120. task_n ...

  7. linux timeval,定时机制 – Linux内核API timeval_compare

    timeval_compare()函数用于比较两个timeval变量表示的时间的大小. timeval_compare文件包含 #include timeval_compare函数定义 在内核源码中的 ...

  8. Linux内核wait,进程调度 – Linux内核API wait_for_completion

    wait_for_completion函数功能描述:此函数用于阻塞当前进程,等待其他进程的执行结束,被等待进程保存在输入参数的wait字段所代表的等待队列中,只有当等待队列中的进程被函数complet ...

  9. linux complete,Linux内核API complete_all

    complete_all函数功能描述:此函数主要用于唤醒等待队列中的所有的睡眠进程,并能更改等待队列被唤醒的次数,唤醒次数保存在参数的done字段中,函数设置字段done的值为在done原值的基础上加 ...

  10. linux内核memset,linux内核API每天来一发(2)

    函数名 格式化一个字符串,并把它放在缓存中. 用例 int snprintf (char * buf, size_t size, const char * fmt, ... ...) 参数说明 buf ...

最新文章

  1. springMVC4(9)属性编辑器剖析入参类型转换原理
  2. Integer 和 int的种种比较
  3. 网络推广外包——网络推广外包专员浅析移动端网站建设要点
  4. Openlayers中实现地图上添加一条红色直线
  5. PHP自动加载spl_autoload_register()
  6. 运算符之:5、位运算符(7个)
  7. 【机器视觉】dev_update_on和dev_update_off算子
  8. php作品答辩问问题,一般答辩会问到什么问题
  9. 将枚举类型的数据绑定到控件
  10. LeetCode 1367. 二叉树中的列表(双重递归)
  11. Oracle expdp impdp导出导入命令及数据库备份
  12. ERROR 1017 (HY000): Can't find file: './hue3/auth_user.frm' (errno: 13 - Permission denied)
  13. 奇怪的车次,你信不信
  14. Cookie和Session的详细介绍和使用规范
  15. Web前端/辅助工具
  16. 双击jar包 运行SpringBoot项目
  17. pytorch加载自己的图像数据集
  18. 教你15道广东糖水甜品
  19. excel转置怎么操作_EXCEL技巧-行列快速转换
  20. MySQL 表的建立与多表联结查询

热门文章

  1. 英国议会上院AI报告AI in the UK-ready, willing and able附原文183页(赞赏后下载ZIP包)
  2. STK航空仿真(一)界面配置和插入模型
  3. 衡山湘大学计算机学校,南岳衡山烧香求学业显灵感恩南岳大庙祈福考上985双一流重点大学...
  4. li 字多出了省略号_css实现DIV,LI等元素超出部分文字用省略号…显示
  5. 互联网金融指导意见或引发P2P跑路狂潮
  6. DDR中的一些知识点说明(ODT,ZQ校准,OCT,TDQS)
  7. 温度传感器DS18B20的相关介绍以及基于MSP430的驱动程序(附代码)
  8. 如何设计一个网络程序
  9. Vue 开源项目库汇总
  10. android动态修改桌面图标,Android动态更换桌面图标