RK3568驱动指南|第二篇 字符设备基础-第11章 创建设备节点实验(一)
函数作用:
用于动态创建设备的逻辑类,并完成部分字段的初始化,然后将其添加进Linux内核系统。
参数含义:
owner:struct module结构体类型的指针,指向函数即将创建的这个struct
class的模块。一般赋值为THIS_MODULE。
name:char类型的指针,代表即将创建的struct class变量的名字。
返回值:struct class * 类型的结构体。
class_destroy(…)函数
该函数在“内核源码/include/linux/device.h”文件中所引用,如下(图11-2)所示:
图 11-2
函数作用:
用于删除设备的逻辑类,即从Linux内核系统中删除设备的逻辑类。
参数含义:
owner:struct module结构体类型的指针,指向函数即将创建的这个struct
class的模块。一般赋值为THIS_MODULE。
name:char类型的指针,代表即将创建的struct class变量的名字。
返回值:无
device_create(…)函数
该函数在“内核源码/include/linux/device.h”文件中所引用,如下(图11-3)所示:
函数作用:
用来在class类中下创建一个设备属性文件,udev会自动识别从而进行设备节点的创建。
参数含义:
cls:指定所要创建的设备所从属的类。
parent:指定该设备的父设备,如果没有就指定为NULL。
devt:指定创建设备的设备号。
drvdata:被添加到该设备回调的数据,没有则指定为NULL。
fmt:添加到系统的设备节点名称。
返回值:struct device * 类型结构体
device_destroy(…)函数
在“内核源码/include/linux/device.h”文件中所引用,如下(图11-4)所示:
函数作用:
用来删除class类中的设备属性文件,udev会自动识别从而进行设备节点的删除。
参数含义:
cls:指定所要创建的设备所从属的类。
devt:指定创建设备的设备号。
返回值:无
至此,关于自动创建节点相关的函数就介绍完成了,会在下一小节中对于设备节点的自动创建进行相应实验程序的编写。
11.2 实验程序的编写
本实验对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\06。
本章实验将编写Linux下的自动创建设备节点实验代码,首先采用自动申请设备号的方式进行设备号的申请,并对获取的主设备号与次设备号进行打印,之后对字符设备进行注册(file_operations结构体只填充owner 字段即可,会在下个章节对file_operations结构体进行讲解),最后自动对设备节点进行创建。
编写完成的chrdev_node.c代码如下(图11-5)所示
相较于上一章节实验,本章节代码在入口函数中添加了自动创建设备节点相关代码,在驱动出口函数中添加了相应的删除设备节点相关代码(相关代码已加粗)。
需要注意的是,在进行设备节点添加时,类的创建要放在设备创建之前;在进行设备节点删除时,类的删除要放在设备删除之后。
11.3 运行测试
11.3.1 编译驱动程序
在上一小节中的chrdev_node.c代码同一目录下创建 Makefile 文件,Makefile 文件内容如下(图11-6)所示:
对于Makefile的内容注释已在上图添加,保存退出之后,来到存放chrdev_node.c和Makefile文件目录下,如下图(图11-7)所示:
然后使用命令“make”进行驱动的编译,编译完成如下图(图11-8)所示:
编译完生成 chrdev_node.ko目标文件,如下图(图11-9)所示:
至此我们的驱动模块就编译成功了,下面进行驱动的运行测试。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。