zoukankan      html  css  js  c++  java
  • 第八章

    代码重用分为静态和动态两种。

    模块依赖,也称为导出符号。如果只能用一句话解释如何利用导出符号实现代码共卒,这句话就是“在一个驱动模块里使用另一个驱动模块里的被导出的符号(常章、变量、函数等)”。

    如果编写的Linux驱动程序在逻辑上是正确的,那么可以正常装载和卸载,但在某些情况下,可能某些程序会出现异常情况。这时Linux驱动可能会无法正常卸载。

    有很多基于ARM处理的Linux驱动最初都是在基于X86的PC上开发和测试的.如果在模拟 器或开发板上采用动态装载.ko文件的方式测试Linux驱动,就算无法正常卸载Linux驱动 , 只要重新启动模拟器或开发板,动态Linux模坏就会从内存中卸载。但如果在PC上开发测试Linux驱动,由于程序出错而无法卸载时,虽然也可以通过重启来解决问题,但一般开发人员都在PC上打开了很多软件、网页等资源。如果每次无法卸载Linux驱动时都要重启机器,那估计在机器崩溃之前自己先崩溃了。因此,就需要一种方法来解决这个问题,使得在无法通过rmmod 命令卸载Linux驱动时,在不启动机器的情况下,仍然可以卸载Linux驱动。

    情况1:白初始化函数崩溃

    由于Linux驱动模块的初始化函数(通过module_init宏指定的函数)进行了某些操作而崩溃,从而导致初始化函数无法正常返田二这种情况的表现是当前Linux 驱动模块没用被任何其他的Linux驱动模块使用,但却显示已经被引用了一次。

    情况2:卸载函数被阻塞

    在使用rmmod命令卸载Linux驱动时,系统会调用卸载函数(跑过module_exit宏指定的函数),只有卸载函数成功返回时,Linux驱动才会被卸载。如果卸载函数被阻塞(可能是死循环、 并发等情况引起的阻塞),rmmod命令也会被阻塞,也就是说永远不会执行到卸载 Linux 驱动模块的代码。这种情况的表现是一执行rmmod命令就会停在那不动了,永远也不会返回到系统的操作提示符。

  • 相关阅读:
    110 docker saltstack高效运维 ubuntu的安装和ubuantu安装python
    110 redis的哨兵集群 redis-cluster docker安装
    109 使用nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    108 正向代理, 反向代理 nginx负载均衡 RDB数据切换AOF数据的操作 redis的主从复制
    107 nginx安装 使用 部署web站点 nginx虚拟主机
    106 mysql 安装 主从复制 redis的安装, 支持多实例化, 持久化操作
    105 python3 ipython jupter 虚拟环境的安装
    javascript
    前端-HTML
    协程/IO多路复用
  • 原文地址:https://www.cnblogs.com/homwok/p/5644664.html
Copyright © 2011-2022 走看看