一. 简介
上一篇文章说明了如何在设备树文件中添加蜂鸣器的设备节点。文章地址如下:
beep蜂鸣器驱动实验-开发板上测试设备树文件-CSDN博客
这里学习编写蜂鸣器的驱动框架代码,驱动框架代码其实与 Led灯驱动框架是一样的。
二. 蜂鸣器驱动框架代码实现
1. 创建 vscode工程
打开 ubuntu系统,进入 如下目录下:
/home/wangtian/zhengdian_Linux/Linux_Drivers
在 上面目录下创建 工程目录 7_beep:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers$ mkdir 7_beep
(1) 拷贝 .vscode
将前面实验 6_gpioled 工程中 .vscode目录及其下文件拷贝到该工程下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/7_beep$ sudo cp ../6_gpioled/.vscode/ ./ -rf
[sudo] wangtian 的密码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/7_beep$
注意: 拷贝.vscode 目录及其下文件的原因在于,.vscode目录下的文件中设置了 驱动程序可能会调用到的 Linux内核源码的路径(NXP官方)。
(2) 拷贝 Makefile文件
将前面实验 6_gpioled 工程中 Makefile拷贝到该工程下,操作如下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/7_beep$ cp ../6_gpioled/Makefile ./
更改 Makefile文件的目标文件名,更改为如下:
obj-m := beep.o
创建 beep.c文件:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/7_beep$ touch beep.c
2. 蜂鸣器驱动代码框架
将 6_gpioled 工程中 gpioled.c文件中头文件拷贝到 beep.c文件中:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_gpio.h>
下来编写 蜂鸣器的驱动框架代码。beep.c文件代码如下: