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,一经查实,立即删除!

相关文章

【微信开发】上传下载多媒体文件

最近一段时间&#xff0c;开始入手了微信开发。感觉挺有意思的&#xff0c;虽然目前还是遇到了许多解决不了的问题。上传下载多媒体文件&#xff0c;这个作为高级接口的一部分功能&#xff0c;可能使用的人并不多&#xff0c;所以现在网上关于这个接口的使用教程很少。于是我就…

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…

misc类设备驱动2——misc类设备的简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有其侵权请告知删除。 一、misc类设备的含义 1、名字含义 misc是英文Miscellaneous的缩写&#xff0c;中文意思是“杂项、混杂”&#xff0c;因此“misc类设备”也叫“杂项设备”或者“混杂设备”。因为这些字符设备不…

怎样跟踪来访用户?

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

舟桥test

<p>testaa</p><p><script src"https://gist.github.com/chengdongdong/6ecf6f921c818d84d7a1.js"></script></p>转载于:https://blog.51cto.com/zchengdong/1599304

misc类设备驱动3——misc驱动框架源码分析(核心层+具体操作层)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有其侵权请告知删除。 前言 由misc类设备驱动1——misc类设备的简介可知&#xff0c;misc类设备驱动框架包括以下两部分&#xff1a; 1、内核开发者实现的部分 drivers/char/misc.c文件主要包括2个关键点&#xff1a;类…

mint锁屏设置

心血来潮&#xff0c;给笔记本装了linux&#xff0c;版本是当下最火的mint。唔&#xff0c;使用体验不错&#xff5e;下面记录的是修改mint锁屏相关设置的修改方式。 In Linux Mint 13, the screen lock feature is disabled by default. After being idle for a while, the sc…

effective C++ 读后笔记

首先不得不说侯捷翻译的书大部分我都很喜欢&#xff0c;因为侯捷本身是一名出色的C技术专家。这本书讲的是C如何高效的运行&#xff0c;我想要成为一名卓越的开发人员&#xff0c;代码的高效性是必不可少的。很多人的代码质量很差&#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…

安卓开发.四大组件.activity.1

安卓开发.四大组件.activity.1 转载于:https://www.cnblogs.com/motadou/p/3534056.html

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

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

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

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

Android Training精要(六)如何防止Bitmap对象出现OOM

1.使用AsyncTask異步加載bitmap圖片避免OOM: class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private int data 0; public BitmapWorkerTask(ImageView imageView) { // Use a …

iOS会议和组织

全世界有许多iOS会议和组织&#xff0c;如果你没有机会去参加&#xff0c;知道他们的存在和向他们学习对你也是有益的。事实上&#xff0c;他们中有些提供免费的幻灯片、视频&#xff0c;有用资料等&#xff0c;所以你不能够忽视他们。 有一些会议的主题并不仅仅关于iOS的&…