• Android深度探索--HAL与驱动开发第九章读后感


    硬件的抽象层HAL,HAL是建立在linux驱动上的一套程序库,不属于linux内核,属于linux内核层之上的应用层,对传统的linux系统中linux驱动一般有两类型的代码:访问硬件寄存器的代码和业务逻辑的代码。

    编写一个支持HAL的Linux驱动程序的主要步骤如下:

    (1)编写Linux 驱动。 “编写Linux 驱动”,为linux 驱动添加HAL,而且想尽量保护敏感数据,Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到HAL Library 中。

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

    (3)编写Service Library。这一步比较灵活,Service Library 可以是一般的Linux Library,也可以是JNI Library。

    编写HAL模块的步骤和原理如下。

    第一步:定义结构体和宏 编写HAL模块需要使用到3个非常重要的结构体,在第一步需要定义两个新的结构体。

    第二步:编写HAL模块的open函数 open函数是HAL模块的入口点。本例中使用的是led_device_open函数。该函数主要做如下三个工作。初始化hw_device_t的子结构体。 打开设备文件。 初始化寄存器。

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

    第四步:定义HAL_MODULE_INFO_SYM函数

    第五步:编写HAL模块的close 函数 当HAL模块被卸载后会调用close函数

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

    在Android系统中使用Linux驱动有两种方式,一种就是通过传统的方式直接与Linux驱动交互,如直接读写设备文件的数据。另外一种是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。

  • 相关阅读:
    Java并发编程系列并发基础
    Java的引用到底是什么?和C/C++的指针有什么区别?
    逆向进阶,利用 AST 技术还原 JavaScript 混淆代码
    Java并发编程系列之二线程基础
    以Linux包管理方式安装Nvidia显卡驱动
    软件测试相关抓包charlesThrottle Settings功能模拟弱网
    APIC虚拟化
    virtio简介(五)—— virtio_blk设备分析
    QEMU pipe设备分析
    5.5文章汇总
  • 原文地址:https://www.cnblogs.com/cui8171/p/5641037.html
Copyright © 2020-2023  润新知