《android深度探索》卷1第八章笔记1314王宁

author author     2022-07-30     747

关键词:

第八章 读书笔记

1、编译是由多个文件组成的Linux驱动(静态重用)

对于复杂的Linux驱动,需使用多个源代码文件存放不同的功能代码,这样有利于代码的分类与管理,那么必须编译多个源代码文件,最终生成.ko文件或编译进Linux内核

下面,就介绍将3.c文件分别编译为3.o文件,并将这3.o文件链接(link)成一个.ko文件——静态重用

2Linux驱动模块的依赖(动态重用)

在一个驱动模块里使用另一个驱动模块内被导出的符号,如常量、变量、函数等。

接下来学习了强行卸载linux驱动,只能卸载由于卸载异常而导致的linux驱动模块无法正常卸载的情况。情况1:初始化函数崩溃 情况2:卸载函数阻塞

PWM驱动由三个文件组成:PWM.CPWM—fun.hpwm-fun.c、其中pwm.c是驱动主程序。

3.强行卸载Linux驱动

情况1:初始化函数崩溃

由于Linux驱动模块的初始化函数进行了某些操作而崩溃,从而导致初始化函数无法正常返回,这种情况是当前Linux驱动模块没有被任何其他的Linux驱动模块使用,但却显示已经被应用了一次。这种情况是因为引用计数器的值和引用者不一致。只需要将当前的Linux驱动模块的引用计数器清零即可

情况2:卸载函数被阻塞

在使用rmmod命令卸载Linux驱动时,系统会调用卸载函数,只有卸载函数成功返回时,Linux驱动才会被卸载,如果卸载函数被阻塞,rmmod命令也会被阻塞,也就是说永远不会执行到卸载Linux驱动模块的代码,这种情况的表现是一执行rmmod命令就会停在那不动了,永远也不会返回到系统的操作提示符。解决办法就是卸载函数,只要将原来的卸载函数替换成一个空的卸载函数即可

 

《android深度探索》卷1第九章笔记1314王宁

第九章本章主要学习了HAL。Android的硬件抽象层,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。把对硬件的支持分成了两层,一层放在用户空间,一层放在内核空间,其中,硬件抽象层运行在用户空间,... 查看详情

android深度探索读书笔记第八章

   代码的重用分为静态重用跟动态重用。静态重用:采用标准的c程序的方式,将要重用的代码放在其他的文件中,如果要使用相应的某些功能,include相应头文件即可。动态重用:也就是一个linux驱动可以使用另外一个lin... 查看详情

android深度探索——第八章读书笔记及心得

蜂鸣器驱动——第8章读书笔记及心得      通过本章的学习,学会了pwm的驱动实验,知道了蜂鸣器实现的原理。蜂鸣器是开发板上的一个硬件设备,可以通过向寄存器写入特定的值来控制蜂鸣器发出尖... 查看详情

andriod深度探索(卷1)hal与驱动开发第八章读书心得

第八章介绍了第二个实验:蜂鸣器驱动,使开发板发出声音将介绍蜂鸣器的实现原理,并实现一个完整的蜂呜器驱动,通过该驱动可以控制蜂鸣器的打开与关闭。蜂鸣器也称为PWM脉冲宽度调制,基本原理就是通过脉冲来控制蜂鸣... 查看详情

android深度探索--hal与驱动开发----第八章读书笔记

通过蜂鸣器的实现原理,实现一个完整的蜂呜器驱动,可以打开和关闭蜂鸣器.PWM驱动的实现方式不同于LED驱动,PWM驱动将由多个文件组成。这也是大多数Linux驱动的标准实现方式.刚开始是LED驱动的代码重用,Linux驱动的代码重... 查看详情

android深度探索(卷一)hal与驱动开发第八章

通过学习Android深度探索(卷一)HAL与驱动开发的第八章让我知道了如何让开发板发出声音,如何编写蜂鸣器的驱动程序。了解了Linux驱动的代码重用,代码重用分为静态和动态两种。Linux驱动的代码重用有很多方法,可以采用标... 查看详情

android深度探索第八章

  C或C++语言中编译多个源代码文件时,如果a.c使用了b.c文件中的函数,需要在a.c文件中使用extern预先定义b.c中的函数,extern的作用就是告诉编译器该函数的函数名、参数个数、参数类型和返回值类型。这些信息对于将a.c编译... 查看详情

android深度探索第八章

蜂鸣器是s3c6410开发板上带的一个硬件设备,可以通过向寄存器写入特定的值来控制蜂鸣器发出尖叫声。在前面的章节编写了两个完整的linux驱动:word_count驱动和led驱动,两个有一共同点就是都有一个源代码文件组成。代码重用... 查看详情

android深度探索--第八章读后感

在这一章中,我们得知了Linux内核提供了多个与I/O内存交互的函数,比如ioread16、ioread32、iowrite16、iowrite32等,Linux内核的内存管理模块负责同步I/O内存与硬件中的数据。每一个连接Linux的硬件在I/O内存中都会有映射地址。由于LED... 查看详情

android深度探索--hal与驱动开发第八章读后感

本章介绍蜂鸣器的实现原犁,并实现一个完整的蜂呜器驱动(可以打开和关闭蜂鸣器),蜂鸣器也称为PWM脉冲宽度调制,基本原理就是通过脉冲来控制蜂鸣器的打开和停止。蜂鸣器是开发板上带的一个硬件设备,可以通过向寄存... 查看详情

android深度探索读书笔记

 第八章让开发板发出声音:蜂鸣器驱动蜂鸣器是S3C6410开发板上带的个硬件设备。可以通过向寄存器写入特定的值来控制蜂鸣器发出尖叫声。介绍蜂鸣器的实现原犁,并实现完整的蜂呜器驱动,可以打开和关闭蜂鸣器时驱动... 查看详情

android深度探索hal读书笔记8

看了本书第八章,我学习到了:蜂鸣器是开发板自带的一个硬件设备,控制蜂鸣器发声是通过向寄存器写入特定的值实现的。PWM驱动不同于LED驱动,其由多个文件组成,在编译时将这些文件进行联合编译。蜂鸣器也称为PWM(脉冲... 查看详情

android深度探索(卷1)hal与驱动开发第十章 嵌入式linux的调试技术读书笔记

...码,输出调试信息等。本章主要讲述了如何利用开发板、Android模拟器以及一些函数、工具调试嵌入式Linux内核模块、可执行程序和共享库。1.打印内核调试信息:printk该函数的用法和printf函数类似,只不过printk函数运行在内核空... 查看详情

android深度探索(卷1)hal与驱动开发第九章 硬件抽象层:hal读书笔记

HAL是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。HAL的主要目的一个是用来保护"私人财产",另一个是尽量避免应用程序直接访问Linux驱动程序。传统的Linux系统中Linux驱动... 查看详情

android深度探索(卷1)hal与驱动开发第七章 led将为我闪烁:控制发光二极管读书笔记

本章的实验将会实现真正意义上的Linux驱动,会实现直接与硬件的交互。需要控制4个LED灯。7.1LED驱动的实现原理事实上并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。I/O内存是通过各种接口连接到主... 查看详情

android深度探索(卷1)hal与驱动开发第六章 第一个linux驱动程序:统计单词个数读书笔记

本章是一个具体的例子,来详细的介绍开发和测试Linux驱动程序的完整过程。尤其是测试Linux驱动。在这个统计单词个数的实例中,重点是该算法的实现技术:即Linux驱动,而不是如何统计的。6.1Linux驱到底是什么Linux驱动的工作... 查看详情

android深度探索

第八章   蜂鸣器开发板上带的一个硬件设备。可以通过向寄存器写入特定的值来控制蜂鸣器发出的声音。下来将介绍蜂鸣器的使用原理,并实现蜂鸣器的驱动。pwm驱动的使用不同于LED驱动的使用,其由多个文件组成,... 查看详情

android深度探索

第八章这章将介绍蜂鸣器的实现原犁,并实现一个完整的蜂呜器驱动(可以打开和关闭蜂鸣器).Linux驱动的代码重用,可以采用标准的C程序的方法将要重用的代码放在其他的文件中。如果要使用某些功能,include相应的头文件即... 查看详情