第八章感想

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

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

1.编写main.c文件,以及fun.cproduct.cproduct.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驱动的实现方式不同于LED驱动,由多个文件组成。Linux驱动的代码重用有很多方式。对于复杂的linux驱动,需要使用多个源代码文件存放不同的功能代码,有利于代码分类和管理,也需要编译多个源代码文件。代码重用分为静态和动态两种。

本节中介绍了一种代码共享的方式,模块依赖。对于一些无法正常卸载的linux驱动,比如:初始化函数崩溃,卸载函数被阻塞。这是需要获取表示要卸载的linux驱动模块的module结构体指针。接下来介绍了如何通过相应的寄存器来控制蜂鸣器的打开和关闭,并且在实现蜂鸣器驱动时,将打来和关闭蜂鸣器的函数放到了另外的C源代码文件中。

原文地址:https://www.cnblogs.com/cwbblogs/p/5653053.html