• 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命令就会停在那不动了,永远也不会返回到系统的操作提示符。

     

     

     

     

     

  • 相关阅读:
    [BZOJ 4001] [TJOI 2015] 概率论
    【计算几何】推导坐标的旋转公式
    【动态规划学习】01背包
    (坑)网络流24题
    bzoj2442(单调队列优化)
    [lydsy2005]能量采集
    主席树
    [noi2005][treap]序列维护
    [Apio2012][Treap]派遣
    [CodeVs][1514][Treap][书架]
  • 原文地址:https://www.cnblogs.com/zhangnene/p/5640696.html
Copyright © 2020-2023  润新知