zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/caoyutao/p/5635895.html
Copyright © 2011-2022 走看看