at91sam9x5 linux 4.1.0下使能蜂鸣器驱动
测试环境: CPU: AT91SAM9X35 Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0)
转载请注明: 凌云物网智科嵌入式实验室: http://iot-yun.com/ 郭文学<guowenxue@gmail.com>
最新的atmel代码使用了Device Tree替换了以前的platform虚拟总线架构,该文章介绍了最新的Linux内核如何添加使能PWM控制蜂鸣器的全过程。目录结构:
1, DTS修改
2, Make menuconfig选项
3, 应用程序
4,测试
1, DTS修改
Linux内核里关于pwm-beeper驱动的DTS说明文档:
[guowenxue@centos6 linux-at91-linux4sam_5.]$ cat Documentation/devicetree/bindings/input/pwm-beeper.txt
* PWM beeper device tree bindings Registers a PWM device as beeper. Required properties:
- compatible: should be "pwm-beeper"
- pwms: phandle to the physical PWM device
在Linux内核的dts文件中,只有mini6410的dts文件中使用了pwm-beeper驱动,所以我们需要参考他来修改:
[guowenxue@centos6 linux-at91-linux4sam_5.]$ vim arch/arm/boot/dts/s3c6410-mini6410.dts
buzzer {
compatible = "pwm-beeper";
pwms = <&pwm >;
pinctrl-names = "default";
pinctrl- = <&pwm0_out>;
};
修改at91sam9x35ek的DTS文件,添加pwm-beeper设备
[guowenxue@centos6 linux-at91-linux4sam_5.]$ vim arch/arm/boot/dts/at91sam9x35ek.dts ahb {
apb {
macb0: ethernet@f802c000 {
phy-mode = "rmii";
status = "okay";
}; pwm0: pwm@f8034000 {
pinctrl-names = "default";
pinctrl- = <&pinctrl_pwm0_pwm2_0>;
status = "okay";
}; ............... buzzer {
compatible = "pwm-beeper";
pwms = <&pwm0 >;
pinctrl-names = "default";
pinctrl- = <&pinctrl_pwm0_pwm2_0>;
status = "okay";
};
...............
2, 内核make menuconfig
Linux内核自带PWM的beeper驱动drivers/input/misc/pwm-beeper.c,我们需要在make menuconfig中选中并使能它。
Device Drivers --->
Input device support --->
[*] Miscellaneous devices --->
<*> PWM beeper support
内核编译启动后,我们可以看到新的蜂鸣器设备:
~ >: cat /proc/bus/input/
devices handlers
~ >: cat /proc/bus/input/devices
I: Bus= Vendor=001f Product= Version=
N: Name="pwm-beeper"
P: Phys=pwm/input0
S: Sysfs=/devices/soc0/buzzer/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=
B: EV=
B: SND= ~ >: ls /sys/class/input/event0/
dev device power subsystem uevent
~ >: ls /dev/input/event0
/dev/input/event0
3, 编写蜂鸣器测试应用程序
/*********************************************************************************
* Copyright: (C) 2016 Guo Wenxue<guowenxue@gmail.com>
* All rights reserved.
*
* Filename: test_buzzer.c
* Description: This file
*
* Version: 1.0.0(08/06/2016)
* Author: Guo Wenxue <guowenxue@gmail.com>
* ChangeLog: 1, Release initial version on "08/06/2016 03:16:54 PM"
*
********************************************************************************/ #include <stdio.h>
#include <unistd.h>
#include <stdint.h>
#include <fcntl.h>
#include <linux/input.h>
#include <errno.h>
#include <string.h> #define DEV_BUZZER "/dev/input/event0"
#define BUZZER_FREQ 2700 /* 2.7KHz */ int main(int argc, char **argv)
{
int fd = -;
int version ;
int rv;
struct input_event event;
int freq = BUZZER_FREQ; if( argc != )
{
printf("Usage: %s [freq<2700/0>]\n", argv[]);
return -;
} freq = atoi(argv[]); if( (fd=open(DEV_BUZZER, O_RDWR)) < )
{
printf("open buzzer '%s' failure: %s\n", DEV_BUZZER, strerror(errno));
return -;
} event.type = EV_SND;
event.code = SND_TONE;
event.value = freq; write(fd, &event, sizeof(struct input_event)); close(fd);
return ;
}
4, 编译和测试
PC端编译:
[guowenxue@centos6 utils]$ /opt/buildroot-2012.08/arm926t/usr/bin/arm-linux-gcc test_buzzer.c -o test_buzzer
[guowenxue@centos6 utils]$ file test_buzzer
test_buzzer: ELF -bit LSB executable, ARM, version (SYSV), dynamically linked (uses shared libs), not stripped
ARM端下载测试
~ >: tftp -gr test_buzzer 192.168.2.18
test_buzzer % |*******************************| :: ETA
~ >: chmod a+x test_buzzer ~ >: ./test_buzzer
Usage: ./test_buzzer [freq</>]
~ >: ./test_buzzer 蜂鸣器的工作频率是2.7KHz,开启蜂鸣器
~ >: ./test_buzzer 传参数0则关闭蜂鸣器
at91sam9x5 linux 4.1.0下使能蜂鸣器驱动的更多相关文章
- at91sam9x5 linux 4.1.0下dts驱动编程模型
测试环境: CPU: AT91SAM9X35 Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0) 转载请注明: 凌云物网智科嵌入式实 ...
- 【Linux】CentOS7.0下安装JDK环境
写在前面:此次试验是在CentOS7上面安装的,亲测成功. 所需工具:JDK1.8安装包,xftp 具体步骤: 1,首先使用xftp连接到自己的虚拟机,然后查看是否有"/usr/java/j ...
- Linux下简易蜂鸣器驱动代码及测试实例
驱动代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ...
- SpringCloud的应用发布(二)vmvare+linux,Centos7.0下发布应用
一.运行环境 1.jdk下载安装 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 检查是否有老版本jdk 如 ...
- 【Tomcat】CentOS7.0下安装多个Tomcat及其配置
安装前所需环境 在开始安装Tomcat之前,需要安装环境JDK,并配置JAVA环境.如果不知道如何配置,可参考这篇博客:[Linux]CentOS7.0下安装JDK环境 Tomcat安装 Tomcat ...
- Linux(RHEL7.0)下安装nginx-1.10.2
查看当前系统版本是否支持 当前,nginx发布包支持以下Linux操作系统版本: RHEL/CentOS: Version Supported Platforms 5.x x86_64, i386 6 ...
- Deepin15.8系统下安装QorIQ Linux SDK v2.0 yocto成功完美运行的随笔
2019.2.17日:最终安装成功,完美解决! 2019.2.16日:最终安装未成功,但是过程中排除 了几个bug,前进了几步,仅供参考. 写在最前面,yocto安装是有系统要求的,Deepin 15 ...
- linux驱动开发之九鼎板载蜂鸣器驱动测试【转】
本文转载自:http://whylinux.blog.51cto.com/10900429/1932491 字符设备驱动用的fileopretion结构体. 1.板载蜂鸣器的驱动测试 我手里有一个BS ...
- Linux(Ubuntu)下安装NodeJs
用以下命令来升级系统,并且安装一些Node.JS必要的包. Linux(Ubuntu)下安装NodeJs 安装nodeJS之前,如果没有安装g++ make libssl-dev等, 1.更新系统和依 ...
随机推荐
- (bug更正)利用KVC和associative特性在NSObject中存储键值
KVC 一直没仔细看过KVC的用法,想当然的认为可以在NSObject对象中存入任意键值对,结果使用时碰到问题了. 一个简单的位移动画: CAKeyframeAnimation *keyPosi=[C ...
- javascript 与 java
- 【产品对比分析】See做了明星衣橱想做的东西?
不断地发现.联想.思考,让学到的东西互通起来吧! 先来两张See的界面图镇楼—— See简介: See是一个专注找同款的时尚社区,主打功能是一键拍照找同款,由社区为你提供最佳商品或 ...
- 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-c
[技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx' remains ...
- MacOS快捷键
- h.264宏块与子宏块类型
宏块类型mb_type 宏块类型表示的是宏块不同的分割和编码方式,在h.264的语法结构中,宏块类型在宏块层(macroblock_layer)中用mb_type表示(请参考h.264语法结构分析中的 ...
- C++ Virtual详解(注意函数被隐藏的问题)
Virtual是C++ OO机制中很重要的一个关键字.只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就 ...
- 最完整的合并相交集合的Java代码(查并集)
这个是自己写的算法,如果有大牛,麻烦帮我并行化.初学者则可以学到不少东西. 产生测试用例 import java.io.*; import java.util.Random; public class ...
- Tomcat禁止显示目录和文件列表
Tomcat禁止显示目录和文件列表 打开 tomcat的安装目录/conf/web.xml 文件 <servlet> <servlet-name>default</s ...
- [LeetCode#201] Bitwise AND of Numbers Range
Problem: Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of al ...