Android深度探索--HAL与驱动开发----第八章读书笔记
通过蜂鸣器的实现原理,实现一个完整的蜂呜器驱动,可以打开和关闭蜂鸣器. PWM驱动的实现方式不同于LED驱动, PWM 驱动将由多个文件组成。这也是大多数 Linux 驱动的标准实现方式.
刚开始是LED驱动的代码重用,Linux 驱动的代码重用有很多种方法。可以采用标准 C程序的方式。将要重用的代码放在其他 的文件 (在头文件中声明〉中。 如果要使用某些功能, include 相应的头文件即可〈这种方式称为 静态重用〉。也可以使用另外一种动态重用的方式,也就是一个 Linux 驱动可以使用另外←个 Linux 驱动中的资源(函数、变量、宏等)。接下来讲强行卸载Linux驱动的内容,本节的方法只能卸载自于异常情况而导致的 Linux 驱动模块无法卸载 的情况。
情况 1:白 初始化函数崩溃
情况 2: 卸载函数被阻塞
蜂鸣器驱动蜂鸣器驱动的原理蜂鸣器也称为 PWM (脉冲宽度调制〉,基本原理是通过脉冲来控制蜂鸣器的打开和停止。实现蜂鸣器驱动测试蜂鸣器驱动
PWM 驱动与LED驱动的原理相似,只要会了一种实验,另一种也会明白。但是其中的代码需要认真编写,理解运行的相关步骤
通过有I/O命令可以打开和停止PWM,PWM 驱动由3 个文件组成: pwm.c, pwm_fun.h 、pwm_fun.c。
pwm.c 是驱动主程序。
pwm_fun.h 引用了相应的头文件,以及定义了一些宏。
pwm_fun.c 文件则包含了打开和停止PWM的两个函数( pwm_start 和pwm_stop )。
运行之后从Makefile 文件的内容可以看出,
1,首先将pwm.c 和pwm_fun.c 文件编译成pwm.o和pwm_fun.o,
2,然后再将这两个*.o文件链接成pwm_driver.o,
3,最后生成pwm_driver.ko 。
接下来测试蜂鸣器驱动,首先进入/root/drivers/ioctl 目录, 执行build础脚本文件编译和上传ioctl 文件〈如果启动多个Android 设备,要选择上传到S3C6410 开发板。在测试PWM 驱动之前,先要按照上一节的方法编译和安装PWM 驱动,然后进入开发板终端的Idata/local 目录, 输入打开和关闭PWM的明令 。由于ioctl 命令必须要求输入I/O命令的参数,但PWM 驱动未使用I/O 命令参数。所以ioctl 最后一个命令行参数可以任意输入。执行上面的命令后,如果输出(# . / ioctl /dev/pwm_dev 1 0)的信息,并且PWM. 可以正常发出尖叫声,说明PWM 驱动测试成功。
PWM
Linux代码的重用:
在头文件中加载即可使用到原来所有的功能,还有动态方式就是一个驱动使用另一个驱动的资源。
对于像蜂鸣器这样的实验,它的内部文件有很多,所有要有很多的源代码以用于妥善管理。
有多个文件的话,module-y指定所有的文件,然后将会生成一个build.sh脚本,使用sh执行,使用dmesg查看日志信息。
代码重用分为静态和动态的。静态重用是生成.ko内核,动态重用是模块依赖,一个驱动使用另一个驱动模块里导出的符号。
重启开发板或者模拟器.ko文件就会自动消失。使用异常情况卸载:1.初始化函数卸载。2.卸载函数被阻塞
卸载一个驱动,需要输入一堆命令查询module结构体的首地址,安装和下载force_kill_driver驱动。
蜂鸣器的驱动实现原理与LED基本相同,但是实现方式不同,因为PWM是由多个文件组成的。
PWM基本原理是通过脉冲来控制蜂鸣器的打开和停止。GPFCON只用了最高的两位来控制PWM。
静态函数结构体,PWM设备文件open函数,使用信号量控制在同一时刻 只能打开PWM设备文件,然后close函数释放信号量,ioctl()函数处理I/O命令,设置文件设备file_operation设备,最后在最开 始初始化信号量,移除信号量。在pwm.h文件PWM_IOTCL_START打开,PWM_IOTCL_STOP停止,这里在Linux底层驱动中有详 解,生成.ko文件,编译成功。
测试蜂鸣器一般使用I/O命令的参数,可以正常发声。http://www.cnblogs.com/caoyutao/
Android深度探索--HAL与驱动开发----第八章读书笔记的更多相关文章
- Android深度探索--HAL与驱动开发----第二章读书笔记
1. 底层开发工具包括: JDk6或者以上版本:Eclipse3.4或以上版本:ADT(用于开发Android应用程序),CDT(用于开发AndroidNDK程序):Android SDK:Andro ...
- Android深度探索--HAL与驱动开发----第九章读书笔记
Google为Android加入HAL主要有如下的目的. 统一硬件的调用接口.由于HAL 有标准的调用接口,所以可以利用HAL屏蔽Linux 驱动复杂.不统一的接口. 解决了GPL版权问题.由于Lin ...
- Android深度探索--HAL与驱动开发----第一章读书笔记
1. Android的系统架构有四层,它的发展目前来说 是比较成熟的,流行于目前的市场.其架构包括四层(linux内核.C/C++代码库.Android SDK API.应用程序). 2. 驱动是直接 ...
- Android深度探索--HAL与驱动开发----第十章读书笔记
printk函数的用法于-printf 函数类似,只不过printk函数运行在内核空间, printf函数运行在用户空间.也就是说,像Linux 驱动这样的Linux内核程序只能使用printk 函数 ...
- Android深度探索HAL与驱动开发 第四章 源代码下载和编译
前面说过Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动的移植,所以为了开发和测试Linux驱动,有必要学习在Ubuntu Linux下如何搭建两套开发环境:A ...
- Android深度探索HAL与驱动开发 第三章 Git入门
Git功能十分复杂,简单来说它使你的开发更为快捷和可控,尤其是在开源项目上展现的友好的交互和回馈. 熟悉一些git指令操作对开发者的帮助可以避免开发者受到一些外在因素打断开发进度,甚至延误项目的che ...
- Android深度探索HAL与驱动开发 第二章 搭建Android开发环境
通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因, ...
- Android深度探索--HAL与驱动开发----第五章读书笔记
第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...
- 《Android深度探索HAL与驱动开发》第一章阅读心得
首先了解到Android系统架构是由四层构成:其中第一层是Linux内核,他的作用是负责Linux的驱动程序以及内存.进程.电源等管理操作:第二层是C/C++代码库,也就是Linux下.so的文件:第 ...
随机推荐
- linux rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpm
linux rpm 安装mysql异常: [root@localhost upload]# rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpmerror: Fail ...
- 常用的WEB服务
1.股票行情数据 Web Service(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) http://www.webxml.com.cn/WebServices/StockInfoWS ...
- 由于客户端检测到一个协议错误 代码0x1104
重新连接N次都还是这个错误提示,最后再重起电脑,还是没用.研究了一下错误终于解决了. 首先检查远程连接端口对不对?Windows远程默认的连接端口是3389,一般大家连接时直接输入IP或域名就可以连接 ...
- 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错
在android中下载文件,写好下载文件的代码后需要配置相应的权限 <uses-permission android:name="android.permission.INTERNET ...
- Android studio下gradle Robolectric单元测试配置
android studio下gradle Robolectric单元测试配置 1.Robolectric Robolectric是一个基于junit之上的单元测试框架.它并不依赖于Android提供 ...
- C++内存管理的缩影
都说C++内存管理是个大坑.实际上也确实是这样. C++有析构函数,每当一个对象过期的时候,C++会执行两个动作 1.执行析构函数. 2.将对象和对象的所有数据删除. 很多人就会问了,既然有把对象删除 ...
- ORACLE中的支持正则表达式的函数
ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBS ...
- PDF 补丁丁 0.5.0.2520 测试版发布:新春快乐!
新的PDF测试版今天发布了. 新的测试版比旧测试版本增加了如下功能: 合并文件功能可以导出.导入文件列表,方便合并大量文件.一天干不完,保存一下,明天继续来. 合并文件功能可以统一已合并文件的旋转方向 ...
- JavaScript Array对象sort() 方法小结
sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...
- 前端神器Sublime Text3 常用插件&常用快捷键
Sublime Text3常用插件 使用Package Control组件安装 也可以安装package control组件,然后直接在线安装: 按Ctrl+`调出console(注:安装有QQ输入法 ...