![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android HIDL
小鬼识途
一直在学习
展开
-
Android HIDL官方文档(一)—— Overview
HIDL HAL接口定义语言(简称HIDL,发音为“hide-l”)是用于指定HAL和其用户之间的接口的一种接口描述语言 (IDL)。HIDL 允许指定类型和方法调用(会汇集到接口和软件包中)。从更广泛的意义上来说,HIDL是用于在可以独立编译的代码库之间进行通信的系统。 HIDL旨在用于进程间通信 (IPC)。进程之间的通信经过 Binder 化。对于必须与进程相...转载 2019-03-08 20:20:52 · 735 阅读 · 0 评论 -
Android HIDL官方文档(十二)—— Versioning
版本编号HIDL 要求每个使用 HIDL 编写的接口均必须带有版本编号。HAL 接口一经发布便会被冻结,如果要做任何进一步的更改,都只能在接口的新版本中进行。虽然无法对指定的已发布接口进行修改,但可通过其他接口对其进行扩展。HIDL 代码结构HIDL 代码按用户定义的类型、接口和软件包进行整理:用户定义的类型 (UDT)。HIDL 能够提供对一组基本数据类型的访问权限,这些数据类型...转载 2019-03-11 14:52:57 · 613 阅读 · 0 评论 -
Android HIDL官方文档(十一)—— Data Types
数据类型本部分介绍了 HIDL 数据类型。要了解实现详情,请参阅HIDL C++(如果是 C++ 实现)或HIDL Java(如果是 Java 实现)。与 C++ 的相似之处包括:structs使用 C++ 语法;unions默认支持 C++ 语法。结构体和联合都必须具有名称;不支持匿名结构体和联合。 HIDL 中允许使用 typedef(和在 C++ 中一样)。 允许使用...转载 2019-03-11 14:38:03 · 1196 阅读 · 0 评论 -
Android HIDL官方文档(十)—— Converting Modules
转换 HAL 模块您可以通过转换hardware/libhardware/include/hardware中的标头将预装的 HAL 模块更新为 HIDL HAL 模块。使用 c2halc2hal工具可处理大部分转换工作,从而减少所需进行的手动更改次数。例如,要为 NFC HAL 生成 HIDL.hal文件,请使用以下命令:$ make c2halc2hal -r an...转载 2019-03-11 14:01:48 · 198 阅读 · 0 评论 -
Android HIDL官方文档(九)—— Threading models
线程模型标记为oneway的方法不会阻塞。对于未标记为oneway的方法,在服务器完成执行任务或调用同步回调(以先发生者为准)之前,客户端的方法调用将一直处于阻塞状态。服务器方法实现最多可以调用一个同步回调;多出的回调调用会被舍弃并记录为错误。如果方法应通过回调返回值,但未调用其回调,系统会将这种情况记录为错误,并作为传输错误报告给客户端。直通模式下的线程在直通模式下,大多数调...转载 2019-03-11 12:01:40 · 675 阅读 · 0 评论 -
Android HIDL官方文档(八)—— Network Stack Configuration Tools
网络堆栈配置工具Android 操作系统中包含标准的 Linux 网络实用程序,例如ifconfig、ip和ip6tables。这些实用程序位于系统映像中,并支持对整个 Linux 网络堆栈进行配置。在运行 Android 7.x 及更低版本的设备上,供应商代码可以直接调用此类二进制文件,这会导致以下问题:由于网络实用程序在系统映像中更新,因此无法提供稳定的实现。 网络实用程序的范...转载 2019-03-11 11:57:14 · 3260 阅读 · 0 评论 -
Android HIDL官方文档(七)—— Using MemoryBlock
HIDL 内存块HIDL MemoryBlock 是构建在hidl_memory、HIDL @1.0::IAllocator和HIDL @1.0::IMapper之上的抽象层,专为有多个内存块共用单个内存堆的 HIDL 服务而设计。性能提升在应用中使用 MemoryBlock 可显著减少mmap/munmap数量和用户空间细分错误,从而提升性能。例如:对每个缓冲区分配使...转载 2019-03-11 11:46:10 · 1238 阅读 · 0 评论 -
Android HIDL官方文档(六)—— Using Binder IPC
使用 Binder IPC本页介绍了 Android O 中对 Binder 驱动程序进行的更改、提供了有关使用 Binder IPC 的详细信息,并列出了必需的 SELinux 政策。对 Binder 驱动程序进行的更改从 Android O 开始,Android 框架和 HAL 现在使用 Binder 互相通信。由于这种通信方式极大地增加了 Binder 流量,因此 Android...转载 2019-03-11 11:32:57 · 368 阅读 · 0 评论 -
Android HIDL官方文档(五)—— Fast Message Queue
快速消息队列 (FMQ)HIDL 的远程过程调用 (RPC) 基础架构使用 Binder 机制,这意味着调用涉及开销、需要内核操作,并且可以触发调度程序操作。不过,对于必须在开销较小且无内核参与的进程之间传输数据的情况,则使用快速消息队列 (FMQ) 系统。FMQ 会创建具有所需属性的消息队列。MQDescriptorSync或MQDescriptorUnsync对象可通过 HIDL...转载 2019-03-08 21:04:15 · 533 阅读 · 0 评论 -
Android HIDL官方文档(四)—— Services & Data Transfer
服务和数据转移本部分介绍了如何注册和发现服务,以及如何通过调用.hal文件内的接口中定义的方法将数据发送到服务。注册服务HIDL 接口服务器(实现接口的对象)可注册为已命名的服务。注册的名称不需要与接口或软件包名称相关。如果没有指定名称,则使用名称“默认”;这应该用于不需要注册同一接口的两个实现的 HAL。例如,在每个接口中定义的服务注册的 C++ 调用是:status_t ...转载 2019-03-08 20:57:28 · 379 阅读 · 0 评论 -
Android HIDL官方文档(三)—— Interface Hashing
接口哈希 本文档介绍了 HIDL 接口哈希,该哈希是一种旨在防止意外更改接口并确保接口更改经过全面审查的机制。这种机制是必需的,因为 HIDL 接口带有版本编号,也就是说,接口一经发布便不得再更改,但不会影响应用二进制接口 (ABI) 的情况(例如更正备注)除外。布局 每个软件包根目录(即映射到hardware/interfaces的android.har...转载 2019-03-08 20:49:50 · 810 阅读 · 0 评论 -
Android HIDL官方文档(二)—— Interfaces & Packages
接口和软件包 HIDL 是围绕接口进行编译的,接口是面向对象的语言使用的一种用来定义行为的抽象类型。每个接口都是软件包的一部分。软件包 软件包名称可以具有子级,例如package.subpackage。已发布的 HIDL 软件包的根目录是hardware/interfaces或vendor/vendorName(例如 Pixel 设备为vendor/g...转载 2019-03-08 20:40:33 · 789 阅读 · 0 评论 -
Android HIDL官方文档(十三)—— Code Style Guide
代码样式指南HIDL 代码样式类似于 Android 框架中的 C++ 代码,缩进 4 个空格,并且采用混用大小写的文件名。软件包声明、导入和文档字符串与 Java 中的类似,只有些微差别。下面针对IFoo.hal和types.hal的示例展示了 HIDL 代码样式,并提供了指向每种样式(IFooClientCallback.hal、IBar.hal和IBaz.hal已省略)...转载 2019-03-11 15:39:02 · 279 阅读 · 0 评论