zoukankan      html  css  js  c++  java
  • HIDL学习笔记

    一、HIDL概述

    1. Google对于HIDL的详细说明,以及语法解析链接如下:https://source.android.com/devices/architecture/hidl/ (需要翻墙才可以打开)

    2. HIDL的定义
    HIDL 全称是 Hardware Interface Definition Language。在 Android 8.0 中被全面使用。其诞生目的是:框架可以在无需重新构建 HAL 的情况下进行替换。
    HAL将由供应商或SOC 制造商构建,放置在设备的 /vendor 分区中,这样一来,框架就可以在其自己的分区中通过 OTA 进行替换,而无需重新编译 HAL。

    3. HAL的类型
    为了更好地实现模块化,Android 8.0 对 Android 操作系统底层进行了重新架构。运行 Android 8.0 的设备必须支持绑定式或直通式 HAL:
    (1)绑定式 HAL: 以 HAL 接口定义语言 (HIDL) 表示的 HAL。在绑定式 HAL 中,Android 框架和 HAL 之间通过 Binder 进程间通信 (IPC) 调用进行通信。
    所有在推出时即搭载了 Android 8.0 或后续版本的设备都必须只支持绑定式 HAL。(这个是趋势)
    (3)直通式 HAL。以 HIDL 封装的传统 HAL 或旧版 HAL。这些 HAL 封装了现有的 HAL,可在绑定模式和 Same-Process(直通)模式下使用。升级
    到 Android 8.0 的设备可以使用直通式 HAL。

    4. HIDL的实现
    1.Android O 对 Android 操作系统的架构重新进行了设计,以在独立于设备的 Android 平台与特定于设备和供应商的代码之间定义清晰的接口。
    Android 已经以 HAL 接口的形式(在 hardware/libhardware 中定义为 C 标头)定义了许多此类接口。HIDL 将这些 HAL 接口替换为稳定的带
    版本接口,它们可以是采用 C++(如下所述)或 Java 的客户端和服务器端 HIDL 接口。

    5. HIDL 接口具有客户端和服务器实现
    HIDL接口的客户端:指通过在该接口上调用方法来使用该接口的代码
    HIDL接口的服务器端:指 HIDL 接口的实现,它可接收来自客户端的调用并返回结果。
    在 libhardware HAL 转换为 HIDL HAL 的过程中,HAL 实现成为服务器,而调用 HAL 的进程则成为客户端。

    6. HIDL版本维护
    HIDL 要求每个使用 HIDL 编写的接口均必须带有版本编号。HAL 接口一经发布便会被冻结,如果要做任何进一步的更改,都只能在接口的新版本中进行。
    虽然无法对指定的已发布接口进行修改,但可通过其他接口对其进行扩展。
    然而虽然google规定,已经发的hal版本是不能再更改的,除非再update成新的版本,而在porting的平台上,几乎都没有遵守这个规定,只是在原先的基础版本上
    去update而已,把要修改的文件进行重新继承整理,没更新版本。但这样却也可以过google的测试。。。


    二、参考

    Android O HIDL的实现对接:https://blog.csdn.net/gh201030460222/article/details/80551897
    1.偏向于应用和实践

    AndroidO Treble架构下hwservicemanager启动过程: https://blog.csdn.net/marshal_zsx/article/details/80293163
    1.偏向于代码走读,更详细更好,有举例Composer.hal。

    2.对于Composer.hal最后查找的动态库是android.hardware.graphics.composer@2.1-impl.so,调用函数集是HIDL_FETCH_IComposer

    3.各个.hal文件,首先会注册到HwServiceManager里面,然后由HwServiceManager再统一注册进ServiceManager中!

  • 相关阅读:
    webapi 获取json数据
    js的匿名函数与自定义函数
    深入理解计算机系统 第八章 异常控制流(2)
    深入理解计算机系统 第八章 异常控制流(1)
    深入理解计算机系统 第三章 程序的机器级表示(2)
    深入理解计算机系统 第三章 程序的机器级表示(1)
    深入理解计算机系统 第二章 信息的表示和处理(2)
    深入理解计算机系统 第二章 信息的表示和处理(1)
    深入理解计算机系统第一章,计算机系统漫游
    Leetcode练习(Python):第292题:Nim 游戏:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/12258131.html
Copyright © 2011-2022 走看看