标签:
一、Linux驱动的代码重用
由于编译是由多个文件组成的Linux驱动,所以有时候需要对代码的重用。Linux驱动的代码重用有很多种方法,可以采用标准C程序的方式,将要重用的代码放在其他的文件中,如果要用某些功能,include相应的头文件即可。也可以使用另外一种动态重用的方式,也就是一个Linux驱动可以使用另外一个Linux驱动中的资源。
当Linux驱动包含多个文件,Makefile文件就需要使用module-y来指定所有的目标文件。而不能只指定被引用的目标文件。
二、强行卸载Linux驱动
正常的驱动程序是可以正常装载和卸载的, 但是当出现异常情况时,Linux驱动可能会无法正常卸载,这时就需要强行来卸载。但是我们讨论的方法并不能强行卸载所有Linux驱动模块,只有由于异常情况而导致的Linux驱动模块无法卸载的情况。
1、初始化函数崩溃:由于Linux驱动模块的初始化函数进行了某些操作而崩溃,从而导致初始化函数无法正常返回。这种情况的表现是当前Linux驱动模块没有被其他的Linux驱动模块使用,但却显示已经被引用了一次。
2、卸载函数被阻塞:卸载函数被阻塞后,rmmod命令也会被阻塞,这种情况的表现是一执行rmmod命令就会停在那不动了,永远也不会返回到系统的操作提示符。
那么该怎么卸载呢?需要解决一个问题就是获取表示要卸载的Linux驱动模块的module结构体指针。因为struct module表示了Linux驱动的相关信息。但是由于卸载的Linxu驱动无法再次安装,因此无法在该Linux驱动程序中获取module结构体指针,我们的解决方案是从/proc/kallsyms文件中查找系统分配给药卸载的Linux驱动的module结构体的首地址,然后将该首地址强行转换成module结构体指针。
三、PWM驱动
通过I/O命令可以打开和停止PWM。PWM驱动与LED驱动实现流程相似,蜂鸣器也称为脉冲宽度调制,也就是PW。基本原理是通过脉冲来控制蜂鸣器的打开和停止。
标签:
原文地址:http://www.cnblogs.com/ww3344/p/5593708.html