测试环境:  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下使能蜂鸣器驱动的更多相关文章

  1. at91sam9x5 linux 4.1.0下dts驱动编程模型

    测试环境:  CPU: AT91SAM9X35      Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0) 转载请注明: 凌云物网智科嵌入式实 ...

  2. 【Linux】CentOS7.0下安装JDK环境

    写在前面:此次试验是在CentOS7上面安装的,亲测成功. 所需工具:JDK1.8安装包,xftp 具体步骤: 1,首先使用xftp连接到自己的虚拟机,然后查看是否有"/usr/java/j ...

  3. Linux下简易蜂鸣器驱动代码及测试实例

    驱动代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ...

  4. SpringCloud的应用发布(二)vmvare+linux,Centos7.0下发布应用

    一.运行环境 1.jdk下载安装 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 检查是否有老版本jdk 如 ...

  5. 【Tomcat】CentOS7.0下安装多个Tomcat及其配置

    安装前所需环境 在开始安装Tomcat之前,需要安装环境JDK,并配置JAVA环境.如果不知道如何配置,可参考这篇博客:[Linux]CentOS7.0下安装JDK环境 Tomcat安装 Tomcat ...

  6. Linux(RHEL7.0)下安装nginx-1.10.2

    查看当前系统版本是否支持 当前,nginx发布包支持以下Linux操作系统版本: RHEL/CentOS: Version Supported Platforms 5.x x86_64, i386 6 ...

  7. Deepin15.8系统下安装QorIQ Linux SDK v2.0 yocto成功完美运行的随笔

    2019.2.17日:最终安装成功,完美解决! 2019.2.16日:最终安装未成功,但是过程中排除 了几个bug,前进了几步,仅供参考. 写在最前面,yocto安装是有系统要求的,Deepin 15 ...

  8. linux驱动开发之九鼎板载蜂鸣器驱动测试【转】

    本文转载自:http://whylinux.blog.51cto.com/10900429/1932491 字符设备驱动用的fileopretion结构体. 1.板载蜂鸣器的驱动测试 我手里有一个BS ...

  9. Linux(Ubuntu)下安装NodeJs

    用以下命令来升级系统,并且安装一些Node.JS必要的包. Linux(Ubuntu)下安装NodeJs 安装nodeJS之前,如果没有安装g++ make libssl-dev等, 1.更新系统和依 ...

随机推荐

  1. Struts2技术内幕-----第七章

    1)基于人机交互的请求--响应模式主要由哪三大要素构成?     ①沟通协议-----人和机器都能够明白的数据通信格式     ②请求内容-----人通过某种机制向机器发起的数据请求     ③响应内 ...

  2. 关于setCharacterEncoding报错

    有时候,代码已搬家,就会报这个错,导致这个错误的原因是: HttpServletResponse存在于servlet-api.jar中, 2.3版本的servlet-api.jar中HttpServl ...

  3. JBoss for luna

    Redhat官方手顺 貌似已经404了,搬运地址 我的Eclipse是Luna,每次进入Eclipse Market去装 http://marketplace.eclipse.org/content/ ...

  4. Git的分支与合并

    在Git里面我们可以创建不同的分支,来进行调试.发布.维护等不同工作,而互不干扰.下面我们还是来创建一个试验仓库,看一下Git分支运作的台前幕后: $rm -rf test_branch_proj $ ...

  5. 关于Android4.2后WebView的js方法需要加@JavascriptInterface

    解读: targetSdkVersion>=17时,需要加上@JavascriptInterface,否则报错Uncaught TypeError: Object [object Object] ...

  6. git日志的查看与修改

    1.命令行中查看日志 git log 默认是显示所有的日志信息,之前出来的界面显示的日志,很少. 最后发现,只需要使用键盘上向下键↓,就可以继续浏览更多的日志 空格键,可以翻页浏览日志. 向左←  向 ...

  7. Jacob - Outlook

    import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; public class Util { public ...

  8. Unity Fresnel Hero(Dota2) Shader

    Shader "HeroShader" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _Rim ...

  9. 2013=7=29 nyist 13题

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地 ...

  10. QT静态链接

    想把QT的程序链接成一个独立的EXE以方便使用,查了很多资料都需要自行编译QT. 搜索了很多的资料,发篇写得比较简明一些:http://my.oschina.net/weiweiqiao/blog/2 ...