读《Android深度探索(卷1)HAL与驱动开发》的一些思考08

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读《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驱动的一些方法。

以上是关于读《Android深度探索(卷1)HAL与驱动开发》的一些思考08的主要内容,如果未能解决你的问题,请参考以下文章

读《Android深度探索(卷1)HAL与驱动开发》的一些思考05

读《Android深度探索(卷1)HAL与驱动开发》的一些思考10

读《Android深度探索(卷1)HAL与驱动开发》的一些思考08

读《Android深度探索(卷1)HAL与驱动开发》的一些思考07

Android深度探索与HAL驱动开发(卷1)-- 第十章随笔

Android深度探索(卷1)HAL与驱动开发学习笔记