第八章 蜂鸣器驱动

(1)代码重用

代码重用分为静态和动态两种。静态方式为编译由多个文件组成的 Linux 驱动,这种方式是代码级的重用,也就是将需要重用的代码和使用这些代码的使用者放在一起进行编译,最终生成一个可执行文件或程序 库 (.ko、 .so 等)。另外一种代码共享的方式:模块依赖,也称为导出符号。如果只能用一句话解释 如何利用导出符号实现代码共享,这句话就是“在一个驱动模块里使用另一个驱动模块里的被导出 的符号(常章、变量、函数等〉”,在 Linux 驱动中可以使用如下两个宏导出函数:

EXPORT SYMBOL(符号名)

EXPORT SYMBOL GPL(符号名)

其中EXPORT SYMBOL GPL 仅用于采用GPL协议的Linux驱动模块中。

(2)强行卸载Linux驱动

情况1:由于 Linux 驱动模块的初始化函数(通常module_init宏指定的函数)进行了某些操作而崩溃,从而导致初始化函数无法正常返回,这种情况的表现是当前 Linux 驱动模块没用被任何其他的Linux 驱动模块使用,但却显示已经被引用了一次。

这种情况的关键是引用计数器的值和引用者不一致。实际上引用者是不存在的,因此,只需要将当前的 Linux 驱动模块的引用计数器清零即可。修改引用计数器可以使用下面两个函数。

static inline int try_module_get(struct module *module)  //使module指向的linux模块驱动的引用计数器加1

extern void module_put(struct module *module)  //使module指向的Linux驱动模块的引用计数减1

情况 2: 卸载函数被阻塞在使用 rmmod命令卸载 Linux 驱动时,系统会调用卸载函数(module_exit宏指定的函数),只有卸载函数成功返回,Linux 驱动才会被卸载。如果卸载函数被阻塞(可能是死循环、并发等 情况引起的阻塞),rmmod 命令也会被阻塞,也就是说永远不会执行到卸载 Linux 驱动模块的代码。这种情况的表现是一执行 rmmod 命令就会停在那不动了,永远也不会返回到系统的操作提示符。

(3)蜂鸣器驱动

蜂呜器驱动的原理:蜂鸣器也称为PWM(脉冲宽度调制),基本原理是通过脉冲来控制蜂鸣器的打开和停止。

实现蜂鸣器驱动

时间: 2024-10-05 04:19:10

第八章 蜂鸣器驱动的相关文章

第八章让开发版发出声音:蜂鸣器驱动

第八章本章主要介绍蜂鸣器的实现原理,并实现一个完整的蜂鸣器驱动(可以打开和关闭蜂鸣器),以及把Linux驱动分成多个文件的方式. 蜂鸣器是开发板上带的一个硬件设备,可以通过向寄存器写入特定的值来控制蜂鸣器发出尖叫声. PWM驱动不同于LED驱动,将由多个文件组成,这也是大多数Linux驱动的标准实现形式.也就是说一个复杂的驱动不太可能将所有的代码都放在一个文件中,最好将相关的代码放在相应的文件中,在编译Linux驱动的时候讲这些文件进行联合编译.这些文件的数据结构.函数的代码也可以被多个不同的驱

第八章 让开发板发出声音:蜂鸣器驱动

这一章的主要内容是让开发板发出声音——蜂鸣器驱动,在Linux驱动开发中重点也学习了这一部分内容,同时最后我们小组的考核内容是通过中断控制蜂鸣器发七个音符的音. 这一部分中,要中断控制蜂鸣器,在中断和蜂鸣器代码的基础上进行增加.中断与蜂鸣器的代码不变,在中断的测试代码中,首先要定义七个音符,之后将开发板上的七个键与七个音符相连接,再将七个音符的转换与蜂鸣器相连接,来达到所需的效果. 核心代码: int main() { int fd,fd1; int div; int keyval; fd1 =

第八章 让开发板发出声音:蜂鸣器驱动 心得笔记

蜂鸣器也称为PWM脉冲宽度调制,基本原理就是通过脉冲来控制蜂鸣器的打开和停止.蜂鸣器是开发板上带的一个硬件设备,可以通过向寄存器写入特定的值来控制蜂鸣器发出的声音.本节介绍了蜂鸣器的实现原理,并实现一个完整的蜂鸣器驱动,可以打 开和关闭.PWM驱动的实现方式不同于LED驱动,PWM驱动由多个文件组成,这也是大多数Linux驱动的标准实现方式. Linux驱动的代码重用有很多种方法.分为静态重用和动态重用,静态重用是代码级的重用,就是将需要重用的代码和使用这些代码的文档放在一起编 译,最终生成一个

第八章、让开发板发出声音:蜂鸣器驱动

通过对这一章节的学习我学到了如下知识: 一.蜂鸣器的知识:蜂鸣器也称为PWM(脉冲宽度调制),其基本原理是通过脉冲来控制蜂鸣器的打开和关闭,定时器的输出引脚与蜂鸣器的三极管相连,此电路的三极管是PNP性,当引脚是高电平时,此三极管处于饱和状态,电路导通,电流流过蜂鸣器,此时蜂鸣器发声,反之,当引脚是高电平时,此三极管处于截止状态,电路关断,蜂鸣器停止发声.       蜂鸣器驱动由三个文件组成:pwm_c.pwm_fun.h.pwm_fun.c.其中pwm.c是驱动主程序.pwm_fun.h引用

Android深度探索(卷1)HAL与驱动开发 第八章 让开发板发出声音:蜂鸣器驱动 读书笔记

PWM驱动的实现方式不同于LED,PWM驱动由多个文件组成.大多数Linux驱动的标准实现方式都是这种.一个复杂的驱动不会把所有代码都放在一个文件中.相关的代码会放在相应的文件中,在编译Linux驱动时将这些文件进行联合编译.当开发一个Linux驱动时,在init.exit等函数中发生错误时,Linux驱动可能会安装失败.甚至使用rmmod命令也无法正常地来将LINUX驱动卸载.这时就需要将相应的Linux驱动的内存地址修改,实现对Linux驱动的卸载. Linux驱动代码的重用有两种方式,第一

让开发板发出声音:蜂鸣器驱动

第八章介绍了一个个实验:蜂鸣器驱动,让开发板发出声音. 将介绍蜂鸣器的实现原理,并实现一个完整的蜂鸣器驱动,通过该驱动可以控制蜂鸣器的打开与关闭. 蜂鸣器也称为PWM脉冲宽度调制,基本原理就是通过脉冲来控制蜂鸣器的打开和停止.蜂鸣器是开发板上带的一个硬件设备,可以通过向寄存器写入特定的值来控制蜂鸣器发出的声音.本节介绍了蜂鸣器的实现原理,并实现一个完整的蜂鸣器驱动,可以打开和关闭.PWM驱动的实现方式不同于LED驱动,PWM驱动由多个文件组成,这也是大多数Linux驱动的标准实现方式. Linu

八、蜂鸣器驱动--学习笔记

第八章.蜂鸣器驱动--学习笔记 蜂鸣器是 S3C6410 开发板上带的一个硬件设备.可以通过向寄存器写入特定的值来控制蜂鸣器 发出尖叫声.本节将介绍蜂鸣器实现原犁,并实现一个完整的蜂呜器驱动(可以打开和关闭蜂鸣器).PWM驱动的实现方式不同于LED驱动,PWM驱动将由多个文件组成.这也是大多数i n u x驱动的标准实现方式.也就是说--个复杂的驱动不太可能将所有的代码都放在…个文件中.最好将相关的代码放在相应的文件中.在编译L i n u x驱动时将这些文件进行联合编译.本节将介绍把Li n

linux驱动开发之misc设备与蜂鸣器驱动(一)

1.板载蜂鸣器的驱动测试 我手里有一个BSP,九鼎的Bsp,里面有蜂鸣器的驱动,我们先测试一下好不好用.我们拿到一个BSP时,如果要做或移植蜂鸣器的驱动,首先要确定下这个内核 中究竟有没有蜂鸣器的驱动,我们可以用sourceInsight将内核放进去,搜索buzzer这个文件,看有没有,如果不行,也可以在内核中输入make menuconfig,利用这个配置界面来搜索buzzer英文,看不能找到相应的信息,从而也会知道这个设备在哪个路径下,通过对九鼎的内核进行make menuconfig后,搜

第8章 让开发板发出声音,蜂鸣器驱动 心得体会

第8章让开发板发出声音,蜂鸣器驱动 心得体会 通过学习Android深度探索(卷1)HAL与驱动开发的第8章 让开发板发出声音,蜂鸣器驱动,我加深对驱动的认识.以下主要是我对本节实验和参考在Linux驱动开发中使用PWM控制蜂鸣器中的一些见解. 先编写一个简单的蜂鸣器驱动程序,根据开发板上的硬件IO接口和Android驱动规范,在kernel中的driver目录中新建一个Buzzer文件,新建一个buzzer.c的源文 在目录下创建一个Makefile文件 先运行make clean命令清楚到编