目录
NO1.私有数据
Linux驱动文件指针中有一个结构体struct file *filp,例如:
static int test_open(struct inode *inode, struct file *filp);其中结构体filp可用于文件私有数据的保护,我们可以在open 函数里面设置好私有数据以后,在 write、 read、 close 等函数中直接读取private_data即可得到设备结构体。例如下图所示的用法。
NO2.Linux驱动框架总结(非设备树)
总结一下Linux中设备框架的特点、设备开发的流程。
01 设备框架的特点
Linux是一个成熟的操作系统,设备驱动开发必须基于Linux下的设备框架进行开发!
Linux在设备驱动编写的时候,完整的部分应该包括驱动具体器件(操作寄存器)、获取系统分配的设备号、根据设备号注册字符设备驱动、自动创建设备节点、注销设备号、注销节点。
Linux在板卡的命令中的常见操作有depmod(第一次加载设备)、modprobe + ...(加载具体的设备驱动模块)、lsmod(查看加载的设备模块)、mknodc + ...(手动创建设备节点,通常用自动创建设备节点)。
Linux中,驱动模块源文件以及APP文件的目录一般放在 /lib/modules/4.1.15/目录下面,当节点创建后,一般 /dev/*** 会出现设备的名字。
02 设备开发流程
1、C语言源文件中,使用函数alloc_chrdev_region()获取系统分配的设备号。
2、C语言源文件中,进行设备注册,涉及到函数cdev_init()和函数cdev_add()。
3、C语言源文件中,进行节点的注册,涉及到函数class_create()和函数device_create()。
4、C语言源文件中,退出函数进行设备的注销和节点的注销,包括节点删除函数cdev_del()和函数unregister_chrdev_region()、函数device_destroy()和函数class_destroy()。
5、C语言源文件中,完成设备操作函数结构体,并且实现设备操作函数结构体的操作函数。
6、编写Makefile--自动编译,编写.vscode--指定头文件
7、执行make
8、复制.ko文件到linux文件系统,例如
sudo cp chrdevbase.ko /home/xiaowen/linux/nfs/rootfs/lib/modules/4.1.15/ -f
9、第一次加载模块使用depmod
10、使用modprobe加载模块,例如modprobe chrdevbase.ko
11、使用lsmod查看当前系统中存在的模块
12、查看设备节点是否正确创建,命令为 ls /dev/ 或者 ls /dev/设备名 -l
13、APP函数运行测试