zoukankan      html  css  js  c++  java
  • 读《Android深度探索(卷1)HAL与驱动开发》的一些思考08

    编译是由多个文件组成的Linux驱动。对于复杂的Linux 驱动,就需要使用多个源代码文件存放不同的功能代码,这样有利于代码的分类和管理。

    小实验:将 3 个.c 文件分别编译成 3 个.0 文件,并将这3 个.0 文件链接生成.ko 文件。

    1.编写main.c文件,以及fun.c、product.c和product.h文件。

    2.编写makefile文件

    obj-m := main.o

    multi_file_driver-y := fun.o  product.o

    3.执行#sh build.sh

    4.执行dmesg命令查看日志信息。

        另外一种代码共享的方式:模块依赖,也称为导出符号。利用导出符号实现代码共享就是:在一个驱动模块里使用另一个驱动模块里的被导出的符号(常量、变量、函数等)。

     

    卸载由于异常情况而导致的Linux驱动模块无法卸载的情况:

    1.初始化函数崩溃

    2.卸载函数被阻塞

     

    蜂鸣器(PWM)驱动:

    1.原理:通过脉冲来控制蜂鸣器的打开和停止。

    2.实现蜂鸣器驱动。

          PWM由3个文件组成:pwm.c、pwm_fun.h、pwm_fun.c。其中pwm.c是驱动主程序。pwm_fun.h引用了相应的头文件,以及定义了一些宏。pwm_fun.c文件则包含了打开和停止PWM的两个函数(pwm_start和pwm_stop)。

    3.测试蜂鸣器驱动

          在/data/local目录下,输入如下命令打开PWM。

          #./ioctl /dev/pwm_dev 1 0

          输入如下的命令停止PWM。

          #./ioctl /dev/pwm_dev 0 0

    通过本章的学习,掌握了Linux驱动常用的代码重用方式,了解到卸载Linux驱动的一些方法。

  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/limomo/p/5604775.html
Copyright © 2011-2022 走看看