一、Linux下LED灯驱动原理
我们知道,在Linux下的任何外设驱动,最终由要配置相对应的硬件寄存器。所以这次的LED灯驱动最终也是对I.MX6ULL阿尔法开发板上的IO进行配置,于裸机不同的是,在Linux下编写驱动要符合Linux的驱动框架。所以我们需要编写一个LED灯的驱动,通过这个驱动连接到LED灯的硬件,也就是连接到LED寄存器,操作寄存器控制LED灯。
二、Linux下LED灯驱动程序编写
创建vscode工程,将我们第一次实验的工程拷贝一份。第一次的字符设备驱动中,由我们写好的Makefile和.vscode目录(里面是对Linux源码路径的包含)。
1、LED驱动的加载和卸载
打开vscode工程,我们只需要一个Makefile,一个LED驱动的.c文件和一个应用程序测试LED驱动。将前面我们编写的字符设备驱动改成LED驱动:
首先驱动文件我们先得注册驱动模块,和注销驱动模块(在Linux中,一般这种类似的创建函数都与销毁时成对存在的),添加上模块的作者和协议:
实例化这个模块:
注意:实例化模块的格式必须严格按照要求,并且我们加上了打印提示信息,当我们这个模块加载时,会调用一次Led_Init(),模块卸载时也会调用一次Led_Exit()。
我们就可以在Linux中加载我们创建的Led驱动,检查驱动是否成功,编译驱动文件,我们还得将Makefile文件中的编译名称改一下:
编译我们的led驱动模块,并将驱动模块拷贝到nfs的根文件系统下的驱动模块目录下:
在serialCRT中,我们加载我们的LED驱动:
可以看出我们的驱动没有问题,驱动模块创建好后,我们需要在驱动加载时,创建一个字符设备,可以LED属于字符设备,所以我们得注册LED的字符设备。
2、LED字符设备注册和注销
字符设备的注册使用函数,在第一篇文章中已经介绍过了所以不在介绍了:
static inline int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
创建一个变量接收返回值,