第九章心得体会

第九章主要学习到了硬件抽象层HAL。

首先我们要知道什么是HAL,HAL(硬件抽象层)是建立在Linux驱动之上的一套动态库。这套动态库并不属于Linux内核,而是属于Linux内核层之上的系统运行库层。

其次为什么要加入HAL这个概念呢?

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

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

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

然后就要编写一个支持HAL的Linux驱动程序,其步骤为:

第一步:编写Linux驱动

第二步:编写HAL Library

第三步:编写Service Library

最后基于HAL的LED驱动去掉了所有与读写寄存器规则相关的代码,只保留了创建设备文件已经与寄存器交互的代码(不涉及到任何规则,只是将数据简单地写入指定的寄存器,或从指定的寄存器读取数据)。LED驱动利用了设备文件的read和write函数来读写指定的寄存器。基本原理是只从指定寄存器读取或写入5个字节。第1个字节用于指定读写的动作以及寄存器。后4个字节是读写的实际的数据(因为LED驱动只涉及到操作一个int类型数据的寄存器,因此使用4个字节个来表示一个int类型的数据)。在与LED驱动交互是,只要向设备文件(/dev/s3c6410_leds_hal)读取或发送5个字节的数据,就可以读写指定的寄存器。

原文地址:https://www.cnblogs.com/renxinye/p/5620393.html