misc类设备驱动1——板载蜂鸣器驱动测试

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 

一、驱动部分

1、前言

九鼎移植的内核已经提供了蜂鸣器驱动源码(在SI中搜索关键字buzzer,发现出现有x210-buzzer.c文件;或者在make menuconfig界面搜索buzzer,得到路径信息drivers/char/buzzer,进入该目录发现有x210-buzzer.c文件;或者在内核源码里使用“grep -nr "buzzer" ./”来查找),因此不需要我们编写。

但是该驱动文件不一定被编译。该文件是否被编译,取决于Makefile文件中的宏:obj-$(CONFIG_X210_BUZZER_DRIVER) += x210-buzzer.o;而该宏又取决于Kconfig文件中的项目(X210_BUZZER_DRIVER)是否显示“y”;而Kconfig文件中的项目是否显示“y”,是由make menuconfig时配置的。因此要进行配置,配置之后再进行驱动的测试,以验证该驱动的可行性。

2、测试

步骤1:在make menuconfig界面进行配置以支持buzzer。

                Device Drivers  --->  Character devices  ---> [*] x210 buzzer driver 

步骤2:进行编译,即执行make。

步骤3:将新生成的zImage下载到开发板运行,按理开发板系统上应该生成/dev/buzzer这个设备文件,但实际没有。

[root@xjh dev]# ls /dev/buzzer
ls: /dev/buzzer: No such file or directory
[root@xjh dev]# 

经过bug排查,发现九鼎编写的代码中有个bug,drivers/char/buzzer/Makefile中的宏,如果与Kconfig对应的话,需要修改为如下:

#obj-$(CONFIG_BUZZER_DRIVER) += x210-buzzer.o
obj-$(CONFIG_X210_BUZZER_DRIVER) += x210-buzzer.o

步骤4:修改之后重新编译与下载内核运行,可以看到 /dev/buzzer这个设备文件。

[root@xjh ]# ls /dev/buzzer -l                            //设备文件
crw-rw----    1 root     root       10,  61 Jan  1 12:15 /dev/buzzer
[root@xjh ]#                     //主设备10,次设备号61  

至此,buzzer的驱动可以使用了,下面通过写应用来测试此驱动。

二、应用部分

1、浏览驱动有哪些操作

通过简单地浏览x210-buzzer.c这个驱动文件,得知其open、close函数都是空的,只有ioctl函数在做事情,于是可以据此编写应用层代码。

//省略部分代码
static struct file_operations dev_fops = {.owner   =   THIS_MODULE,.open    =   x210_pwm_open,    //空的.release =   x210_pwm_close,     //空的.ioctl   =   x210_pwm_ioctl,    //干活的
};static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &dev_fops,
};
//省略部分代码

x210_pwm_open()与x210_pwm_close()函数如下:

static int x210_pwm_open(struct inode *inode, struct file *file)
{if (!down_trylock(&lock))return 0;elsereturn -EBUSY;}static int x210_pwm_close(struct inode *inode, struct file *file)
{up(&lock);return 0;
}

x210_pwm_ioctl()函数如下:

static int x210_pwm_ioctl(struct inode *inode, struct file *file,\unsigned int cmd, unsigned long arg)
{switch (cmd) {   //#define PWM_IOCTL_SET_FREQ	1//这个命令打开蜂鸣器并设置频率,需要带参数,参数含义是频率case PWM_IOCTL_SET_FREQ:printk("PWM_IOCTL_SET_FREQ:\r\n");if (arg == 0)return -EINVAL;PWM_Set_Freq(arg);break;//#define PWM_IOCTL_STOP		0//这个命令关闭蜂鸣器并设置频率,不需要带参数case PWM_IOCTL_STOP:default:printk("PWM_IOCTL_STOP:\r\n");PWM_Stop();break;}return 0;
}

2、开始编写应用代码

#include <stdio.h>
#include <sys/stat.h> //open这些函数所在的头文件
#include <fcntl.h>#define DEVNAME		"/dev/buzzer" //蜂鸣器对应的设备文件,这个啥时候创建的?
//这些命令来自驱动文件,应用层知道这些宏的含义
//按理应该写成头文件包含形式,这里不规范
#define PWM_IOCTL_SET_FREQ		1
#define PWM_IOCTL_STOP			0 int main(void)
{int fd = -1;fd = open(DEVNAME, O_RDWR);if (fd < 0){perror("open");return -1;}//文件描述符                  //频率ioctl(fd, PWM_IOCTL_SET_FREQ, 10000);//命令码来自驱动sleep(3);ioctl(fd, PWM_IOCTL_STOP);sleep(3);ioctl(fd, PWM_IOCTL_SET_FREQ, 3000);sleep(3);ioctl(fd, PWM_IOCTL_STOP);sleep(3);close(fd);	return 0;
}

3、测试实践

(1)将上面的应用程序命名为app.c;

(2)然后使用命令“arm-linux-gcc app.c -o app”进行编译;

(3)将得到的可执行文件下载至开发板进行运行;

[root@xjh mnt]# ls
Makefile       app            app.c          driver_test.c
[root@xjh mnt]# ./app
[ 2115.943865] PWM_IOCTL_SET_FREQ: //有声音
[ 2119.054830] PWM_IOCTL_STOP:
[ 2122.056309] PWM_IOCTL_SET_FREQ: //有声音,且和上面频率不一样
[ 2125.058158] PWM_IOCTL_STOP:
[root@xjh mnt]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github和git@osc提交问题

为什么80%的码农都做不了架构师&#xff1f;>>> 今天想用gitosc push下测试下自己能否正常使用gitosc的git仓库的&#xff0c;公钥SSH 已经加好。 ssh -T gitgit.oschina.net 测试正常。 结果报错could not read Username for https://git.oschina.net: No such fi…

怎样跟踪来访用户?

某些监视方法是比较容易想到的&#xff0c;比如&#xff0c;当你登录网站的时候&#xff0c;它就可以知道你是谁了。但是这些网络监视系统是如何通过你的上网行为记录你的个人信息呢&#xff1f; 广告系统经常通过追踪用户行为的方法来建立用户信息库&#xff0c;以定位谁是目标…

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录&#xff1f;LBS通讯录摘要&#xff1a;班级通讯录必备的功能&#xff0c;比如人员列表&#xff0c;人员地理位置标注&#xff0c;展示复杂信息窗口&#xff0c;公交和驾车等。一般班级人员都不会超过300个&#xff0c;因为可以高效…

开发板——在X210开发板上进行裸机开发的流程

流程总结 本文以“LED流水灯”为例&#xff0c;说明在X210开发板上进行裸机开发的流程。 步骤一&#xff1a;搭建嵌入式Linux开发环境 在虚拟机中安装与配置Linux系统&#xff0c;并安装交叉编译工具链&#xff1b; 在win主机上安装dnw软件、九鼎烧写SD卡软件等内容。 步骤二&a…

zmail邮件系统安装手册 V2.0版本

2019独角兽企业重金招聘Python工程师标准>>> Tmail邮件系统安装手册 V2.0版本 1、系统环境 centos6.0以上&#xff0c;最小化安装(64位系统) 2、部署 1、删除自带的postfix、mysql、httpd # rpm -qa|grep postfix|xargs rpm -e --nodeps # rpm -qa|grep mysql|xargs…

Cassandra1.2文档学习(5)—— Snitch

参考资料&#xff1a;http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureSnitchesAbout_c.html#concept_ds_c34_fqf_fk 一个snitch&#xff08;告密者&#xff09;决定应当从哪个数据数据中心和机架写入和读取数据。…

Entity Framework在WCF中序列化的问题(转)

问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象&#xff0c;那么对下面的错误一定不陌生。 接收对 http://localhost:5115/ReService.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。 这还可能是由于服务器中止了 HTTP …

【iHMI43 4.3寸液晶模块】demo例程(版本1.03)发布

技术论坛&#xff1a;http://www.eeschool.org 博客地址&#xff1a;http://xiaomagee.cnblogs.com 官方网店&#xff1a;http://i-board.taobao.com 银杏科技 GINGKO TECH. 保留权利&#xff0c;转载请注明出处 一、简介&#xff1a; 1、iHMI43 演示程序(版本号&#xff1a;1…

SDRAM——X210的SDRAM的初始化

以下内容源于朱友鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;s5pv210——初始化SDRAM - biaohc - 博客园 这里说的SDRAM&#xff0c;简单点理解就是内存。 一、SDRAM的简介 1、SDRAM的含义 SDRAM是Syncronized Dynamic Ramdam Access Me…

单独一台机器测试Open×××加密隧道的问题和解决

其实这篇文章和Open的关系倒不是很大&#xff0c;只是通过Open测试时暴露出的问题。这篇文章里面倒是包含了很多IP路由以及conntrack的细节内容。 有时候&#xff0c;为了节省机器&#xff0c;我希望在一台设备上模拟多个设备&#xff0c;当然&#xff0c;使用网络命名空…

SCRT中只换行不回车的问题(阶梯)

转载源&#xff1a;SecureCRT中只换行不回车的问题 - 知乎 在SecureCRT中有时会遇到由于Windows的换行和Unix的换行控制字符不同的问题&#xff08;\r\n-\n&#xff09;&#xff0c;导致显示如下图所示的“阶梯”&#xff0c;又不想到源码中一个个改控制字符&#xff0c;此时可…

开发板——X210开发板的软开关(供电置锁)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、前言 本章节在裸机课程的SD卡启动部分。 本文讲述如何设置开发板&#xff0c;使得一按下电源键程序运行后即可松手不会断电&#xff0c;即供电置锁。 二、软开关的简介 电路设计一般使用拨码开…

国产Linux软件

为什么80%的码农都做不了架构师&#xff1f;>>> 本页面收集支持deepin/Linux的国产软件&#xff0c;对于每款软件以“日出东方-发行时间较短&#xff1b;正当壮年-时间较长且稳定&#xff1b;每况愈下-你们懂的”评价 软件版本时间评价有道词典 Linux版1.02015-03…

QGLViewer 编译安装步骤

由于工作学习的需要&#xff0c;要用opengl绘制显示些模型动画&#xff0c;原来用的是Qt做UI&#xff0c;直接调用的是QGLWidget类&#xff0c;但这个只是提供了基本的框架&#xff0c;很多交互操作还需添加代码完成&#xff0c;自己偷懒也觉得繁琐&#xff0c;就借用了开源的工…

LED——S5PV210的LED的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、LED物理特性介绍 LED本身有2个接线点&#xff0c;一个是LED的正极&#xff0c;一个是LED的负极。 LED的功能就是亮或者不亮&#xff0c;只需要给LED的正极加电压即可点亮LED&#xff0c;去掉电压…

“.公司”域名注册总量TOP15:新网问鼎 万网居亚

IDC评述网&#xff08;idcps.com&#xff09;01月16日报道&#xff1a;根据ntldstats.com发布的最新数据显示&#xff0c;截止至01月15日17:00&#xff0c;在“.公司”域名注册总量大战中&#xff0c;新网打败众多国内外域名服务商&#xff0c;成为新晋霸主&#xff0c;其“.公…

Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备

返回 Mac App Store Prepare for Mac App Store Submission 提交到Mac 应用商店之前的准备 Most of your time is spent on coding tasks, but to develop for the Mac App Store, you need to perform a number of administrative tasks, using Xcode and other tools. You’l…

ARM通识——关于ARM的一些认识

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 注意&#xff0c;由于文章的撰写时间过早&#xff0c;很多内容没有更新&#xff0c;这里仅当一个通识了解。 1、ARM发展的里程碑 ARM的前身为艾康电脑&#xff08;Acorn&#xff09;&#xff0c;于…

使用RMAN备份数据库

1.1使用控制文件备份全库 1.1.1配置备份路径 1.1.2 RMAN备份全库 1.2使用catalog数据库备份全库 1.2.1配置到远程数据库的TNS 1.2.2创建表空间及设置用户 1.2.3进入目录数据库并注册 1.2.4 CATALOG方式备份全库 转载于:https://www.cnblogs.com/myrunning/p/4231057.html

「北京」京东 JD.COM 招聘中/高级前端工程师

职位描述&#xff1a; 1、计算机或相关专业专科以上学历&#xff0c;2年以上网站前端开发经验&#xff0c;电子商务相关从业经验优先&#xff1b;2、精通各种Web前端技术&#xff0c;对符合web标准的网站重构有丰富经验&#xff0c;有成功作品&#xff1b;3、理解并掌握JavaScr…