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.更新系统和依 ...
随机推荐
- ckeditor与ckfinder简单整合使用
Ckeditor与ckfinder简单整合使用 功能:主要用来发送图文的email,图片上传到本地服务器,但是email的图片地址要写上该服务器的远程地址(图片地址:例如:http://www.bai ...
- 【HDOJ】2780 Su-Su-Sudoku
模拟+DFS. /* 2780 */ #include <cstdio> #include <cstring> #include <cstdlib> ][]; ][ ...
- wcf托管在IIS上,提示未能加载
“/”应用程序中的服务器错误. 未能加载文件或程序集“ZBMYunCoreLib.DLL”或它的某一个依赖项.找不到指定的模块. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪 ...
- [LeetCode#252] Meeting Rooms
Problem: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2] ...
- bzoj1334
..] of boolean; a:..] of longint; i,n,s,j,ans:longint; procedure sort(l,r: longint); var i ...
- 如何 对 Windows 窗体控件进行线程安全调用
//主线程 public delegate void UpdateMessage(string mes); public void UpdatePortMessage(string mes) { th ...
- 浅谈Redis及其安装配置
一.Redis的介绍 二.Redis的安装配置 三.Redis的配置文件说明 四.Redis的简单操作 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. ...
- 利用纯java捕获和播放音频
参考: 1.http://www.cjsdn.net/doc/jdk60/javax/sound/sampled/package-summary.html 2.http://www.cjsdn.net ...
- C# 客服端上传文件与服务器器端接收 (简单代码)
简单代码: /*服务器端接收写入 可以实现断点续传*/ public string ConnectUpload(string newfilename,string filepath,byte[] fi ...
- Python IDLE 清屏工具
转载自:http://www.cnblogs.com/maybego/p/3234055.html 1.下载clearwindow.py(右击-目标另存为,直接点击会打开脚本内容). 2.拷贝c ...