• 第九章心得体会


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

    第九章:硬件抽象层: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

  • 相关阅读:
    Java lamda Stream
    java动态绑定的一点注意
    javascript的一点学习
    阶段总结
    some notes about spring aop
    java 命令notes
    Guava cache
    位运算
    解析JDK 7的动态类型语言支持
    Maven里面多环境下的属性过滤(配置)
  • 原文地址:https://www.cnblogs.com/ly0419/p/5651643.html
Copyright © 2020-2023  润新知