测试环境:  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. ckeditor与ckfinder简单整合使用

    Ckeditor与ckfinder简单整合使用 功能:主要用来发送图文的email,图片上传到本地服务器,但是email的图片地址要写上该服务器的远程地址(图片地址:例如:http://www.bai ...

  2. 【HDOJ】2780 Su-Su-Sudoku

    模拟+DFS. /* 2780 */ #include <cstdio> #include <cstring> #include <cstdlib> ][]; ][ ...

  3. wcf托管在IIS上,提示未能加载

    “/”应用程序中的服务器错误. 未能加载文件或程序集“ZBMYunCoreLib.DLL”或它的某一个依赖项.找不到指定的模块. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪 ...

  4. [LeetCode#252] Meeting Rooms

    Problem: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2] ...

  5. bzoj1334

    ..] of boolean;     a:..] of longint;     i,n,s,j,ans:longint; procedure sort(l,r: longint);   var i ...

  6. 如何 对 Windows 窗体控件进行线程安全调用

    //主线程 public delegate void UpdateMessage(string mes); public void UpdatePortMessage(string mes) { th ...

  7. 浅谈Redis及其安装配置

    一.Redis的介绍 二.Redis的安装配置 三.Redis的配置文件说明 四.Redis的简单操作 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. ...

  8. 利用纯java捕获和播放音频

    参考: 1.http://www.cjsdn.net/doc/jdk60/javax/sound/sampled/package-summary.html 2.http://www.cjsdn.net ...

  9. C# 客服端上传文件与服务器器端接收 (简单代码)

    简单代码: /*服务器端接收写入 可以实现断点续传*/ public string ConnectUpload(string newfilename,string filepath,byte[] fi ...

  10. Python IDLE 清屏工具

     转载自:http://www.cnblogs.com/maybego/p/3234055.html   1.下载clearwindow.py(右击-目标另存为,直接点击会打开脚本内容). 2.拷贝c ...