直接进入正题
第一步、实验程序编写
1、创建 VSCode 工程
2、添加头文件路径
因为是编写 Linux 驱动,因此会用到 Linux 源码中的函数。我们需要在.vscode 目录下生成一个名为c_cpp_properties.json 的文件,在includePath(表示头文件路径)中添加 Linux源码中的头文件路径。
3、编写驱动程序
(1)驱动模块的加载和卸载
-
模块加载函数:
module_init(chrdevbase_init)。 -
模块卸载函数:
module_exit(chrdevbase_exit)。 -
这些函数是驱动模块的核心入口和出口。
(2)字符设备注册与注销
对于字符设备驱动而言,当驱动模块加载成功以后需要注册字符设备,同样,卸载驱动模块的时候也需要注销掉字符设备
一般字符设备的注册在驱动模块的入口函数 xxx_init 中进行,字符设备的注销在驱动模块的出口函数xxx_exit 中进行
-
注册设备函数:
register_chrdev或alloc_chrdev_region。 -
注销设备函数:
unregister_chrdev或unregister_chrdev_region。 -
这些函数是字符设备驱动的核心部分。
(3)实现设备的具体操作函数
-
file_operations 结构体中的
open、read、write、release等函数
(4)添加 LICENSE 和作者信息
-
LICENSE 是必须添加的,否则的话编译的时候会报错,作者信息可以添加也可以不添加
-
常见的 LICENSE 是
MODULE_LICENSE("GPL")
至此,字符设备驱动开发的完整步骤就讲解完了,而且也编写好了一个完整的字符设备驱动模板,以后字符设备驱动开发都可以在此模板上进行。
第二步、编写测试APP
1、编写测试 APP 程序
驱动编写好以后是需要测试的,一般编写一个简单的测试 APP,测试 APP 运行在用户空间。测试 APP 很简单通过输入相应的指令来对 chrdevbase 设备执行读或者写操作。
第三步、编译驱动程序和测试APP
1、编译驱动程序
首先编译驱动程序,也就是将 chrdevbase.c 这个文件编译为.ko 模块。创建Makefile文件,编写好后,输入“make”命令编译驱动模块。编译成功以后就会生成一个叫做 chrdevbaes.ko 的文件,此文件就是 chrdevbase 设备的驱动模块。
至此,chrdevbase 设备的驱动就编译成功。
2、编译测试 APP
测试 APP 比较简单,只有一个文件,因此就不需要编写 Makefile 了,直接输入命令编译。
输入命令:arm-linux-gnueabihf-gcc chrdevbaseApp.c -o chrdevbaseApp 进行编译,编译完成以后会生成一个叫做 chrdevbaseApp 的可执行程序。
注意:因为测试 APP 是要在 ARM 开发板上运行的,所以需要使用交叉编译,使用 arm-linux-gnueabihf-gcc 来编译
第四步、运行测试
1、将模块.ko文件和测试 APP复制到rootfs/lib/modules/4.1.15 目录中
为了方便测试,Linux 系统选择通过 TFTP 从网络启动,并且使用 NFS 挂载网络根文件系统。
将第三步中的 chrdevbase.ko 和 chrdevbaseAPP 复制到 rootfs/lib/modules/4.1.15 目录中(注意:需要使用sudo命令)
2、加载驱动模块
推荐使用 modprobe 命令加载驱动,使用 rmmod 命令卸载模块。
注意:要检查开发板根文件系统中有没有“/lib/modules/4.1.15”这个目录,如果没有的话自行创建。“/lib/modules/4.1.15”这个目录用来存放驱动模块,使用modprobe 命令加载驱动模块的时候,驱动模块要存放在此目录下
(1)对于一个新的模块使用modprobe加载的时候需要先调用一下depmod命令自动生成modules.dep(直接在内核启动、进入根文件后输入depmod命令即可)。
(2)输入命令 modprobe chrdevbase.ko 即可加载模块

3、创建设备节点文件
驱动加载成功需要在/dev 目录下创建一个与之对应的设备节点文件,应用程序就是通过操作这个设备节点文件来完成对具体设备的操作
输入命令:mknod /dev/chrdevbase c 200 0 来创建 /dev/chrdevbase 这个设备节点文件(注:这里是手动创建的方法,当然还有自动创建的方法)
mknod是创建节点命令,/dev/chrdevbase是要创建的节点文件,c表示这是个字符设备,200是设备的主设备号,0是设备的次设备号。
4、chrdevbase 设备操作测试
一切准备就绪,接下来就是“大考”的时刻了。使用 chrdevbaseApp 软件操作 chrdevbase 这个设备,看看读写是否正常。
输入命令:./chrdevbaseAPP /dev/chrdevbase

open、read、write、release函数都成功输出,测试成功
5、卸载驱动模块
如果不再使用某个设备的话可以将其驱动卸载掉,输入命令:rmmod chrdevbase.ko
卸载以后使用 lsmod 命令查看 chrdevbase 这个模块还存不存在
6、删除设备节点
卸载模块后应删除设备节点,输入命令:sudo rm /dev/chrdevbase (注:这里是手动删除的方法,当然还有自动删除的方法)
至此,chrdevbase 这个设备的整个驱动就验证完成了,驱动工作正常。

2038

被折叠的 条评论
为什么被折叠?



