Android深度探索(卷1)HAL与驱动开发学习笔记(8)
Android深度探索(卷1)HAL与驱动开发学习笔记(8)
第八章 蜂鸣器驱动
L i n u x驱动的代码重用有很多种方法。可以采用标准C程序的方式。将要重用的代码放在其他的文件(在头文件中声明)中。如果要使用某些功能,i n clu d e相应的头文件即可(这种方式称为静态重用)。也可以使用另外一种动态重用的方式,也就是一个L i n u x驱动可以使用另外一个L i n u x驱动中的资源(函数、变量、宏等)。
卸载由于于异常情况而导致的Li n u x驱动模块无法卸载的情况
1:初始化函数崩溃
由于于L i n u x驱动模块的初始化函数(通过m o d u l e _ i n i t宏指定的函数〉进行了某些操作而崩溃,从而导致初始化函数无法正常返回,这种情况的表现是当前Lin u x驱动模块没用被任何其他的Li n u x驱动模块使用,但却显示已经被引用了一次。使用r m m o d bad_driverI命令卸载b a d_d r i v erl时会输出如下的信息,但却找不到使用bad_d r i v e r l的其他Li n u x模块。
ERROR: Module is bad_driverl is in use
2:卸载函数被阻塞
在使用rmmod命令卸载L i n u x驱动时,系统会调用卸载函数(通过modul e _ e x i t宏指定的函数),只有卸载函数成功返回肘,L i n u x驱动才会被卸载。如果卸载函数被阻塞(可能是死循环、并发等情况引起的阻塞),rmmod命令也会被阻塞.也就是说永远不会执行到卸载L i n u x驱动模块的代码。这种情况的表现是一执行rmmod命令就会停在那不动了,永远也不会返回到系统的操作提示符。