第九章心得体会

时间:2020-12-06 16:43:59

通过第九章的学习,我学到了如下知识点:

第九章:硬件抽象层:HAL

9.1为什么要在Android中加入HAL

1.HAL并不是Linux内核的一部分,而是位于Android的系统运行库层

2.为Android加入HAL主要目的:统一硬件的调用借口,解决了GPL的版权问题,针对一些特殊的要求。

9.2Android HAL架构

9.3为LED驱动增加HAL

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

第一步:编写Linux驱动

Linux驱动代码要尽量的简洁,尽可能将业务逻辑放到HAL Library

第二步:编写 HAL Library

HAL library就是普通的Linux library文件,但这类库文件有一个接口,通过HAL_MODULE_INFO_SYM变量实现,service library就是通过在这个接口中定义的ID定位HAL library的。

第三步:Service Library

这一步不是必须用到的。

2.颠覆Linux驱动的设计理念:精简LED驱动

编写LED驱动时需要注意:不和之前的LED冲突,需要修改部分代码避免冲突

3.测试读写寄存器操作

命令行语法格式:rwdev:命令行程序

                <r|w>:读或写命令,r代表读取寄存器中的数据,w表示向寄存器写入数据。

                <dev_file>:设备文件名

                <byte_count>:写入或读取的字节数

                [byte1],[byte2]:写入的字节

4.编写调用LED驱动的HAL模块

在这个HAL模块中包含了LED驱动的所有业务逻辑

编写HAL模块的步骤和原理:

第一步:定义结构体和宏

编写HAL模块需要使用3个非常重要的结构体(hw_module_t,hw_device_t,hw_module_methods_t)

第二步:编写HAL模块的open函数

Open函数是HAL模块的入口点

第三步:定义hw_module_methods_t结构体变量

HAL模块需要hw_module_methods_t结构体的open函数指针变量指定open入口函数。

第四步:定义HAL_MODULE_INFO_SYM变量

所有的HAL模块都必须有它

第五步:编写HAL模块的close函数

当HAL模块被卸载后会调用close函数

第六步:编写控制LED的函数

设备类型和功能的不同,这一步编写的函数也有所不同

5.编写调用HAL模块的service

6.HAL模块的存放路径和命名规则

HAL模块通常存放在/system/lib/hw目录下,文件名一般都有一个default

7.编写调用service的iava库

8.测试LED驱动

测试程序通过直接向LED驱动设备文件发送字符串来控制LED