at91sam9x5 linux 4.1.0下使能蜂鸣器驱动

时间:2022-10-14 23:44:46

测试环境:  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&period;1&period;0下dts驱动编程模型

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

  2. 【Linux】CentOS7&period;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&plus;linux,Centos7&period;0下发布应用

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

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

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

  6. Linux(RHEL7&period;0)下安装nginx-1&period;10&period;2

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

  7. Deepin15&period;8系统下安装QorIQ Linux SDK v2&period;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. CentOS 7 (无盘安装)PXE服务器的搭建(失败求助版)

    折腾了一天半,PXE无盘服务器以暂时失败而告终. 基本原理 1. 首先客户端主机需要支持PXE,大部分主板都支持. 2. PXE服务器需要安装DHCP.TFTP.FTP服务. 3. DHCP服务用来给 ...

  2. MySQL同主机不同数据库的复制命令

    MySQL同主机不同数据库的复制命令:注意运行在Terminal中,不运行在MySQL命令行中. 1 mysqldump Portal_DEV -u root -ppassword1$ --add-d ...

  3. 在百万数据中找出重复的数据sql

    select * from (select count(name) as isone, name from tbl_org_departments group by name) t where t.i ...

  4. JUnit4 笔记

    1. JUnit4基础 JUnit4 与 JUnit3不同的是,不需要继承测试类,而是通过JDK5提供的注解去标识测试方法. 常用的注解如下: @Before:初始化方法 对于每一个测试方法都要执行一 ...

  5. &lpar;原&plus;转&rpar;Ubuntu下安装understand及在启动器中增加快捷方式

    参考网址: http://www.xuebuyuan.com/1353431.html http://www.2cto.com/os/201309/242543.html http://my.osch ...

  6. Dom4j下载及使用Dom4j读写XML简介

    sitinspring(如坐春风)原创,转载请注明作者及出处. 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4 ...

  7. APP软件半成品测试技巧

    由于现在产品类型的多样性,产品功能的先进性,更多体现在产品质量的稳定性和可靠性.软件应用的领域不断深入,设计的复杂程度逐步扩大,开发的周期不断缩短,质量的要求就逐渐提高.然而根据我们公司的版本迭代速度 ...

  8. c&plus;&plus; 实现拓扑排序

    要简洁大方地实现拓扑排序,首先要了解两个标准模板 std::queue 和 std::vector 1 queue 添加头文件 #include<queue> 定义一个int类型的队列 q ...

  9. python引入自定义模块

    Python的包搜索路径 Python会在以下路径中搜索它想要寻找的模块:1. 程序所在的文件夹2. 标准库的安装路径3. 操作系统环境变量PYTHONPATH所包含的路径 将自定义库的路径添加到Py ...

  10. Django开发笔记&lpar;一&rpar;

    Django开发笔记(一) 标签(空格分隔): Django Python 1. 创建并运行Django项目 创建开发环境 安装Django pip install django==version 执 ...