文章目录
一、字符设备驱动概念
字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的串口、SPI、LCD、键盘等等都是字符设备,这些设备的驱动就叫做字符设备驱动。
二、驱动工作模式层级流程图
从应用到底层,各个层级之间函数调用流程、对应关系,如下图:
三、驱动知识点思维导图
3.1 设备号
**备注:输入命令“cat /proc/devices”可以查看当前已经被使用掉的设备号 **
主设备号:
次设备号:
3.2 设备名
3.3 设备操作函数集合:file_operations结构体
驱动中实现对设备操作的具体函数,都在内核中的file_operations这个结构体中定义好了。我们需要什么功能或者说需要对驱动设备进行什么操作,只需要实现具体对应的函数内容即可。
该结构体非常重要:
当我们在实现一个驱动的时候,主要有如下步骤:
(1)首先需要分析需求,即:我们需要对驱动设备进行哪些操作,比如打开设备、关闭设备、读设备、写设备等。
(2)确定好要实现的所有功能需求后,然后在file_operations结构体查找适合的函数指针,并逐一实现这些指针对应的功能函数。
(3)最后,将实现的每个函数赋值给file_operations结构体中对应的指针即可。
三、字符设备驱动框架思维导图
3.1 【旧字符驱动代码框架】思维导图
旧字符设备驱动代码框架所用到的主要函数、结构体等如下:
实现框架流程如下图:
3.2 【新字符驱动代码框架】思维导图
四、驱动常用命令
4.1 驱动模块加载 & 卸载
insmod xxx.ko
rmmod xxx
4.2 创建节点命令
mknod /dev/xxx c 主设备号 次设备号