之前我们学习了驱动程序的编写框架以及了解了字符设备驱动需要做的事。现在我们就正式编写一个功能函数点亮一盏灯(所有的故事都得从一盏灯亮了开始)。
首先电灯得知道引脚号,快去翻原理图!通过看RK3399的原理图我看到led2的引脚以及什么时候点亮。引脚就是GPIO1_C7(55=32+16+7),高电平点亮。
使用GPIO函数操作LED设备,需要用的GPIO函数:
1.申请GPIO口的使用权
gpio_request(unsigned int gpio,const char *label);//引脚号,引脚名称
2.将GPIO口设置为输入/输出模式
gpio_direction_input(unsigned gpio);//输入模式
gpio_direction_output(unsigned gpio);//输出模式
3.释放GPIO口
gpio_free(unsigned int gpio);
之前说过,我们要创建字符设备文件。我们可以在用户层打开设备文件然后写入数据让灯实现亮灭。这里设计应用层了,那么我们就需要调用内核文件自己写的文件操作函数,也就是fops结构体,定义自己的file_operations结构实现对应的读写文件操作。(设备注册函数register_chrdev把file_operations结构体告诉内核), 装驱动程序时,就会去调用这个入口函数。
用户进程利用在对设备文件进行诸如read/write操作的