Andriod深度探索—HAL与驱动开发 第八 章 读书笔记and一点心得
Linux驱动的代码重用
Linux 驱动的代码重用有很多种方法。可以采用标准C 程序的方式。将要重用的代码放在其他的文件(在头文件中声明〉中。如果要使用某些功能, include 相应的头文件即可(这种方式称为静态重用)。也可以使用另外一种动态重用的方式,也就是一个Linux 驱动可以使用另外←个Linux驱动中的资源(函数、变量、宏等〉。
强行卸载Linux驱动
如果编写的Ljnux 驱动程序在逻辑上是正确的,那么可以正常装载和卸载,但在某些情况下,可能某些程序会出现异常情况。这时Linux 驱动可能会无法正常卸载。
情况一:初始化函数崩溃
由于Linux 驱动模块的初始化函数(通过module_init 宏指定的函数〉进行了某些操作而崩溃,从而导致初始化函数无法正常返田二这种情况的表现是当前Linux 驱动模块没用被任何其他的Linux 驱动模块使用,但却显示已经被引用了一次。
情况二:卸载函数被阻塞
在使用rmmod 命令卸载Linux 驱动时,系统会调用卸载函数(跑过module_exit 宏指定的函数),只有卸载函数成功返回肘, Linux 驱动才会被翻载。如果卸载函数被阻塞(可能是死循环、并发等情况引起的阻塞), rmmod 命令也会被阻塞. 也就是说永远不会执行到卸载Linux 驱动模块的代码。这种情况的表现是一执行rmmod 命令就会停在那不动了,永远也不会返回到系统的操作提示符。
不管是哪种情况,都需要解决一个不可回避的问题,就是要获取表示要卸载的Linux 驱动模块的module 结构体指针。因为struct module 表示了Linux 驱动的相关信息.
蜂鸣器(PWM)驱动
蜂鸣器也称PWM,基本原理是通过脉冲来控制蜂鸣器的打开和停止。本节通过I/O命令来打开和停止PWM的。
心得:PWM驱动与LED驱动的实现流程类似,可能还要简单一些。本章演示了如何将一个Linux驱动分成多个实现文件,使用了比较简单的PWM驱动。这章主要讲解了Linux驱动常用的代码重用方式。此外还介绍了一种强行卸载Linux驱动的方法。通过这种方法,就可以免去不断重启机器的痛苦了。
本人博客地址:http://home.cnblogs.com/u/jie617530/