android深度探索读书笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android深度探索读书笔记相关的知识,希望对你有一定的参考价值。

 

第八章

让开发板发出声音:蜂鸣器驱动

蜂鸣器是S3C6410 开发板上带的个硬件设备。可以通过向寄存器写入特定的值来控制蜂鸣器发出尖叫声。介绍蜂鸣器的实现原犁,并实现完整的蜂呜器驱动,可以打开和关闭蜂鸣器时驱动的实现方式不同于LED PWM 驱动将由多个文件组成。这也是大多Linux 驱动的标准实现方式也就是说个复杂的驱动不太可能将所有的代码都放在个文件中。最好将关的代码放在相应文件中。在编译 Linux 驱动时将这些文件进行联合编译。本节将介绍把Linux 驱动分成多个文件的方式。这些文件中的数据结构、函数的代码也可以被多个不同的驱动使用以这也是代码重用重要方法。

Linux驱动的代码重用有很多种方法。分为静态重用和动态重用,静态重用是代码级的重用,就是将需要重用的代码和使用这些代码的使用放在一起编译,最终生成一个可执行的文件或程序库(.ko.so等)。代码共享就是在一个驱动模块里使用另一个驱动模块里被导出的符号(常量、变量、函数等)。

如果编写的Linux驱动程序是正确的,那么就可以正常装载和卸载,但是在某些情况下,可能某些程序会出现异常情况,这时Linux驱动可能会无法正常卸载。如果在模拟器或开发板上采用动态装载.ko文件的方式测试Linux驱动,就算无法正常卸载Linux驱动,只要重启模拟器或开发板,动态Linux模块就会从内存中卸载。

 

第九章

硬件抽象层:HAL

HAL硬件抽象层是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层上的应用层。在传统的Linux系统中Linux驱动一般有两种类型的代码。GoogleAndroid加入HAL主要有以下目的:统一硬件的调用接口。由于HAL有标准的调用接口,所以可以利用HAL屏蔽了Linux驱动复杂、不统一的接口;解决了GPL协议;针对一些特殊的要求。对于一些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于空间的HAL代码来辅助Linux完成一些工作。

Hal是建立在linux驱动之上的一套程序库。这套程序库并不属于linux内核而是属于linux内核层之上的应用层。

Googleandroid加入hal主要目的如下:1、统一硬件的调用接口。2、解决了gpl版权问题。3、针对一些特殊的要求。

编写一款支持hallinux驱动程序的步骤:1、编写linux驱动2、编写hal library3、编写service library

编写HAL模块的步骤和原理如下:定义结构体和宏;编写HAL模块的open函数;定义hw_module_methods_t结构体变量;定义HAL_MODULE_INFO_SYM变量;编写HAL模块的close函数;

编写控制LED的函数;

支持HALLinux驱动程序步骤如下:   1.编写Linux驱动;2.编写HAL Library3.编写Service Library

HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序再访问Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库。

第十章

嵌入式Linux的调试技术

对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试。例如,设置断点、逐步跟踪代码、输出调试信息等。

Printk函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间。也就是说,像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息。Printk函数在printk.c文件中实现。

虽然使用printk函数可以很方便的将消息写入日志文件或控制台。但大量使用printk函数频繁操作日志文件或控制台设备文件(/dev/console)会严重影响Linux驱动性能(因此写磁盘的速度远没有读写内存的速度快),因此,这就要求Linux驱动只在开发阶段使用printk函数输出信息,在正式发布Linux驱动时将可能影响性能的printk函数去掉。

Kgdb包含了两部分,kgdb内核和一套连接接口。虽然使用printk函数可以很方便的将消息写入日志文件或控制台。但大量使用printk函数频繁操作日志文件或控制台设备文件(/dev /console)会严重影响Linux驱动性能(因此写磁盘的速度远没有读写内存的速度快),因此,这就要求Linux驱动只在开发阶段使用 printk函数输出信息,在正式发布Linux驱动时将可能影响性能的printk函数去掉。

以上是关于android深度探索读书笔记的主要内容,如果未能解决你的问题,请参考以下文章

《Android深度探索》读书笔记10

Android深度探索读书笔记 第十章

Android深度探索——第六章读书笔记及心得

Android深度探索——第七章读书笔记及心得

Android深度探索——第五章读书笔记及心得

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