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

author author     2022-07-30     479

关键词:

Google为Android加入HAL主要有如下的目的。

统一硬件的调用接口。由于HAL 有标准的调用接口,所以可以利用HAL屏蔽Linux 驱动复杂、不统一的接口。

解决了GPL版权问题。由于Linux 内核基于GPL协议,而Android 基于Apache Licence 2 . 0、协议。因此Google 玩了个“穿越“,将原本位于Linux驱动中的敏感代码向上移了一个层次。这样这些敏感代码就摆脱了GPL 协议的束缚, 那些不想开源的Linux驱动作者也就没必要开源了。

针对一些特殊的要求。对于有些硬件,可能需要访一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这些情况下,可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作。

编写一款支持HAL Linux 驱动程序的步骤

1 步 编写Linux 驱动

“编写Linux 驱动”,从表明上看是废话,但如果要为linux 驱动添加HAL,而且想尽量保护敏感数据。Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到HAL Library 中。

2 步:编写HAL

HAL Library 就是普通的Linux Library (*.so )文件。但这类库文件有一个接口。通过HAL MODULE_INFO SYM 变量实现。Service Library 就是通过在这个接口中定义的ID 定位HALLibrary的。

3 步:编写Service Library

尽管这步并不是必需的,但新的HAL 架构要求我们这样做。Service Library 也是Linux Library 。这一步比较灵活。Service Library 可以是一般的Linux Library,也可以是JNI Library

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

通过学习Android深度探索(卷一)HAL与驱动开发的第十章让我知道了嵌入式Linux的调试技术和调试工具有哪些。Printk可以打印内核调试信息,该函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空... 查看详情

android深度探索(卷1)hal与驱动开发阅读心得9

硬件抽象层:HALGoogle为Android加入HAL主要有如下的目的:1.统一硬件的调用接口。由于HAL有标准的调用接口,所以可以利用HAL屏蔽Linux驱动复杂、不统一的接口;2.解决了GPL版权问题。由于Linux内核基于GPL协议,而Android基于ApacheLicen... 查看详情

《android深度探索》(卷1)hal与驱动开发读后感

第9章:硬件抽象层HAL1.HAL(HardwareAbstractionLayer,硬件抽象层)是建立在Linux驱动之上的一套翻字库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。2.编写一款支持HAL的Linux驱动程序的步骤编写一款支持HAL的Linux驱... 查看详情

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

Google为Android加入HAL主要有如下的目的。统一硬件的调用接口。由于HAL有标准的调用接口,所以可以利用HAL屏蔽Linux驱动复杂、不统一的接口。解决了GPL版权问题。由于Linux内核基于GPL协议,而Android基于ApacheLicence2.0、协议。因此Go... 查看详情

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

...代码,输出调试信息等。本章主要介绍如何利用开发板、android模拟器以及一些函数、工具调试嵌入式linux内核模块、可执行文件和共享库。Printk函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户... 查看详情

android深度探索与hal驱动开发(卷1)--第九章随笔

第9章硬件抽象层:HALHal(HardwareAbstractLayer,硬件抽象层)是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。 编写支持HAL的Linux驱动程序的步骤:第一步:编写Linux驱动第... 查看详情

《android深度探索》(卷1)hal与驱动开发读后感

第10章:嵌入式Linux的调试技术对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行调试。例如,设置断点、逐步跟踪代码、输出调试信息等。一、打印内核调试信息:printkprintk函数在前面的章节己多次使用过。该函数... 查看详情

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

printk函数的用法于-printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间。也就是说,像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息虽然使用printk函数可以很方便地将消息写入日志文件或控... 查看详情

《android深度探索》(卷1)hal与驱动开发读后感

第8章:让开发板发出声音:蜂鸣器一、Linux驱动的代码重用Linux驱动的代码重用有很多种方法。可以采用标准C程序的方式。将要重用的代码放在其他的文件(在头文件中声明)中。如果要使用某些功能,include相应的头文件即可(... 查看详情

android深度探索(卷1)hal与驱动开发阅读心得10

嵌入式Linux的调试技术打印内核调试信息:printk该函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间。也就是说,像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息。Printk函数在... 查看详情

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

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

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

第10章嵌入式Linux的调试技术通过虚拟文件系统(/proc)进行数据交互在编写代码时应了解一下几点:1、creat_proc_read_entry函数在内部是通过调用creat_proc_entry函数实现的。所谓只读就是通过creat_proc_read_entry函数可以指定处理文件读... 查看详情

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

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

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

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

android深度探索(卷1)hal与驱动开发阅读心得8

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

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

...在Linux驱动之上的一套程序库。刚开始介绍了为什么要在Android中加入HAL,目的有三个,一,统一硬件的调用接口。二,解决了GPL版权问题。三,针对一些特殊的要求。可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作... 查看详情

android深度探索(卷1)hal与驱动开发第八章 让开发板发出声音:蜂鸣器驱动读书笔记

PWM驱动的实现方式不同于LED,PWM驱动由多个文件组成。大多数Linux驱动的标准实现方式都是这种。一个复杂的驱动不会把所有代码都放在一个文件中。相关的代码会放在相应的文件中,在编译Linux驱动时将这些文件进行联合编译... 查看详情

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

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