android hidl
文章平均质量分 83
liujun3512159
这个作者很懒,什么都没留下…
展开
-
Android HIDL 之 hal 进程启动及服务注册过程
Android HIDL 之 hal 进程启动及服务注册过程转载 2022-06-21 08:17:56 · 4114 阅读 · 0 评论 -
Android HIDL 在Java 中使用
HIDL 接口主要通过本机代码使用,因此 HIDL 专注于自动生成高效的 C++ 代码。不过,HIDL 接口也必须能够直接通过 Java 使用,因为有些 Android 子系统(如 Telephony)很可能具有 Java HIDL 接口。本文介绍了 HIDL 接口的 Java 前端,详细说明了如何创建、注册和使用服务,以及使用 Java 编写的 HAL 和 HAL 客户端如何与 HIDL RPC 系统进行交互。...转载 2022-06-09 23:04:04 · 1011 阅读 · 0 评论 -
dlopen, dlsym等动态链接库函数解析
1. 打开动态链接库: #include <dlfcn.h> void *dlopen(const char *filename, int flag); 该函数返回操作句柄,如: void *pHandle = dlopen(strSoFilePath, RTLD_LAZY);2. 取动态对象地址: #include <dlfcn.h> void *dlsym(void *pHandle, char *symbol); ...转载 2022-02-22 08:48:13 · 880 阅读 · 0 评论 -
Android P HIDL服务绑定模式与直通模式的分析
从Android 8.0之后,Android 引入Treble机制,主要是为了解决目前Android 版本之间升级麻烦的问题,将OEM适配的部分vendor与google 对android 大框架升级的部分system部分做了分离,一旦适配了一个版本的vendor信息之后,之后的版本再进行升级时,直接升级system即可,这个就不会给OEM厂商升级带来太大的工作量,直接升级最新功能,可以解决目前市面上Android版本过来凌乱的问题。 首先Treble机制在Vendor分区中有两种模式,一个编译成s转载 2022-05-21 22:46:16 · 2285 阅读 · 0 评论 -
Android.bp入门指南之浅析Android.bp语法
前言 在前面的章节初始Android.bp里面咱们对Android.bp有了一个基本的认识,知道了它是干啥的。算了吗,仍是再介绍一遍它吗!Android.bp是用来替换Android.mk的配置文件,它使用Blueprint框架来解析。Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong则是专为Android编译而设计的工具,Blueprint只是解析文件的形式,而Soong则解释内容的含义,最终转换成Ninja文件。Android.bp文件用相似JSON的简洁声转载 2022-05-06 08:17:06 · 5807 阅读 · 0 评论 -
嵌入式实践教程--Android HAL自定义HAL代码教程
HIDL接口定义创建hidl目录在aosp中的hardware/interfaces目录下创建自己的hal目录mkdir -p hardware/interfaces/qmiller/1.0/default创建hal文件在我们刚才创建的hardware/interfaces/qmiller/1.0/目录下新建IQmiller.hal文件,传入string name,返回string类型的result。package android.hardware.qmiller@1.0; ...转载 2022-05-04 23:51:08 · 1195 阅读 · 1 评论 -
Android.bp文件简介
Android.bpAndroid.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。语法根据设计,Android.bp 文件很简单。它们不包含任何条件语句,也不包含控制流语句;所有复杂问题都由用 Go 编写的编译逻辑处理。Android.bp文件记录着模块信息,每一个模块以模块类型开始,后面跟着一组模块的属性,以名值对(name: value)表示,每个模块都必须有一个转载 2022-05-04 18:09:23 · 7077 阅读 · 0 评论 -
Android-HAL与HIDL分析使用总结
Android-HAL与HIDL分析使用总结HAL接口定义语言(简称HIDL)适用于指定HAL和其用户之间的接口的一种接口描述语言(IDL),HIDL允许指定类型和方法调用。HIDL旨在用于进程间通信(IPC)。进程之间的通信经过Binder化。对于必须与进程相关联的代码库,还可以使用直通模式。HIDL可指定数据结构和方法签名,这些内容会整理归类到接口中,而接口会汇集到软件包中。尽管HIDL具有一系列不同的关键字,C++和JAVA程序员对HIDL的语法并不陌生。此外,HIDL还是用JAVA样式和注转载 2022-05-03 21:59:44 · 3330 阅读 · 0 评论 -
HIDL最全编译流程
想了解HIDL介绍的可以参考《HIDL概述》,本篇文章主要介绍HIDL的详细编译流程及简单的客户端应用(C++跟Android客户端的应用)。一、准备工作整一套源码,Android O或者Android P的保证全套代码已经全编译,原生代码全编译命令source build/envset.shlunchmake 3、hidl-gen工具已经安装,安装命令make hidl-gen二、hidl-gen工具介绍系统定义的所有的.hal接口,都是通过hidl-gen工具转换成对应...转载 2022-05-01 18:10:42 · 2839 阅读 · 1 评论 -
Android HAL接口自定义
HIDL接口定义创建hidl目录在aosp中的hardware/interfaces目录下创建自己的hal目录mkdir -p hardware/interfaces/qmiller/1.0/default创建hal文件在我们刚才创建的hardware/interfaces/qmiller/1.0/目录下新建IQmiller.hal文件,传入string name,返回string类型的result。package android.hardware.qmiller@1.0;转载 2022-05-01 17:33:45 · 1227 阅读 · 0 评论 -
Android Q 之MTK代码分析(六)--Camera Hal3 process_capture_result
码字不易,多谢支持MTK Camera process_capture_result 流程《Android Q 之MTK代码分析(一)--Camera Hal3 Service》《Android Q 之MTK代码分析(二)--Camera Hal3 Search Sensor》《Android Q 之MTK代码分析(三)--Camera Hal3 Open/Close》《Android Q 之MTK代码分析(四)--Camera Hal3 configure_Streams》《Android转载 2022-03-06 15:23:52 · 715 阅读 · 0 评论 -
Android Framework中的线程Thread及它的threadLoop方法
当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许很多多的Thread。它们普遍的特点就是有一个threadLoop方法。依照字面的意思应该是这个线程能够循环处理数据。相应我想到到了java上层中的HandlerThread,这个预计也差点儿相同,但当时心里总有一个疙瘩。想弄清楚它为什么能够循环。还有它究竟是怎么循环起来的?Android中java世界的Thread我们先来看看java是怎么创建一个线程的。这个是最舒服的,也是我最熟悉的。new Th转载 2022-02-24 22:48:00 · 934 阅读 · 0 评论 -
Android HIDL介绍
1. HAL1.1 HAL介绍HAL(Hardware Abstraction Layer)是连接Android Framework与Linux设备驱动的桥梁,有两个方面的目的1) 屏蔽掉不同硬件设备的差异,为Android提供了统一的设备访问接口;不同的硬件厂商遵循HAL标准来实现自己的硬件控制逻辑,开发者不必关心硬件设备的差异,只需按照HAL提供的标准接口对硬件进行访问即可。2) 帮助硬件厂商隐藏了设备的核心细节,HAL层位于用户空间,遵循Apache协议,允许硬件厂商不公开源码,将设备相关转载 2022-02-24 08:52:00 · 1107 阅读 · 0 评论 -
HIDL实战笔记
目录第一篇:HIDL学习笔记之HIDL C++(第一天)第二篇:HIDL学习笔记之HIDL C++(第二天)第三篇:HIDL实战笔记HIDL制作步骤定义接口文件 使用工具,根据接口文件生成代码 完善接口函数 编译HIDL 接口文件定义进入hardware/interfaces/目录下建立新的接口文件.首先建立对应的文件夹:mkdir -p hardware/interfaces/xiaoqing/1.0/defaul接着创建接口描述文件IXiaoqing.ha转载 2022-02-24 08:45:47 · 1222 阅读 · 3 评论 -
Android HIDL学习(3) --- 注册回调
三、回调函数我们把HAL 独立为一个单独的进程,Client 也是一个单独的进程,那么对于一般的模块而言,都是需要从底层(HAL 及 以下)获取数据,比如sensor需要获取sensor 数据,Camera需要获取 Camera的raw/yuv 等数据流。那么对于软件设计而言,如果是同步的话,我们通过getXXX()函数来获取即可。但如果是异步的话,比如底层实现的中断机制,你不知道他什么时候会来数据,那么这个时候,我们就会通过callback 来实现异步的回调。看下图就比较清楚了3.1 ..转载 2022-02-24 08:29:52 · 1471 阅读 · 0 评论 -
android treble项目&&HIDL学习总结
概念介绍Treble项目—HIDL产生背景,独立升级framework需求Android O(8.0) 重新设计了 Android 操作系统框架,在一个名为Treble的项目中,以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。在这种新架构中,HAL 接口定义语言HIDL指定了 HAL 和其用户之间的接口,让用户能够替换 android framework,而无需重新编译 HAL。HIDL概念—HAL 接口定义语言,目标framework和HAL解耦HIDL:转载 2022-02-23 08:45:55 · 1661 阅读 · 1 评论 -
HAL so库加载机制---之一
1,概述Android HAL(Hardware Abstract Layer)硬件抽象层,从字面意思可以看出是对硬件设备的抽象和封装,为Android在不同硬件设备提供统一的访问接口。HAL处于Android framework和Linux kernel driver之间,HAL存在的意义有以下2个方面:1,HAL屏蔽了不同硬件设备的差异,为Android提供了统一的访问硬件设备的接口。 不同的硬件厂商遵循HAL标准来实现自己的硬件控制逻辑,但开发者不必关心不同硬件设备的差异,...转载 2022-02-22 23:58:40 · 975 阅读 · 0 评论 -
Android HAL 层框架分析(三)
前面分析了android HAL层是如何搜索硬件模块的动态共享库的,其实就是在"system/lib/hw/"或者"/vendor/lib/hw/"这两个路径下找到共享库modueid.variant.so后,通过调用load函数加载库。下面我们进入load函数,看看具体是如何实现加载共享库的。以下为load函数定义,同样在/hardware/libhardware/hardware.c中实现的,/*** Load the file defined by the variant and i.转载 2022-02-19 21:51:50 · 533 阅读 · 0 评论 -
Android HAL 层框架分析(二)
上一篇我们分析了android HAL层的主要的两个结构体hw_module_t(硬件模块)和hw_device_t(硬件设备)的成员,下面我们来具体看看上层app到底是怎么实现操作硬件的?我们知道,一些硬件厂商不愿意将自己的一些核心代码开放出去,所以将这些代码放到HAL层,但是怎么保证它不开放呢?HAL层代码不是也让大家知道下载吗?其实硬件厂商的HAL核心代码是以共享库的形式出现的,每次在需要的时候,hal会自动加载调用相关共享库。那么是怎么加载找到某一硬件设备对应的共享库的呢?这也是我们这篇都要说的转载 2022-02-19 21:38:39 · 654 阅读 · 0 评论 -
Android HAL 层框架分析(一)
作为一个搞android驱动或者说搞底层的人,我觉得对于hal那是必须要掌握的,而且必须达到一定深度,于是我总结了一下,将整个自己的分析思路写下来。主要是看android源代码,根据源代码得到的思路。(看源代码比看什么著作书籍都管用)android HAL是什么?为什么有它?硬件抽象层是介于android内核kernel和上层之间的抽象出来的一层结构。他是对linux驱动的一个封装,对上层提供统一接口,上层应用不必知道下层硬件具体怎么实现工作的,它屏蔽了底层的实现细节。它在整个android转载 2022-02-19 20:52:57 · 2754 阅读 · 1 评论 -
Android HAL 与 HIDL 开发笔记
前言之前分析过 Android 系统中的进程间通信逆向,即基于 Binder 拓展的以及 AIDL 描述的 IPC。了解 Android 系统的话应该知道在 8.0 之后,/dev/binder 拓展多出了两个域,分别是 /dev/hwbinder 和 /dev/vndbinder 。其中 hwbinder 主要用于 HIDL 接口的通信,而 vndbinder 则是专注于 vendor 进程之间的 AIDL 通信。本文主要关注的是硬件部分。具体来说,就是作为一个 OEM/ODM 厂商,如何将自己的硬转载 2022-02-15 22:01:34 · 1615 阅读 · 0 评论 -
Android hidl开发简单教程
Android hidl开发简单教程开发前的准备开发前的准备关于hidl的前世今生就不多说了,网上百度就挺多的了,主要是我也不是很懂,哈哈哈,这个只是记录一下我在按照网上的教程开发hidl的时候遇到的一些问题,然后说一下我在跟着别人教程学习的时候遇到过的一些问题,改正后成功的例子,希望能对大家学习有一点点帮助.开发hidl我们首先需要:①Android的编译环境②编译过的Android源码(我的是Android 10)③Android 设备(我的是手机)第一步:创建文件夹路径和.ha转载 2022-02-15 08:50:27 · 2204 阅读 · 1 评论 -
Android Binder (可以直接写在项目中的写法)
此篇为大家展示一个写在项目中的写法,native层的service注册和获取服务,加上回调。首先展示一下项目目录binder通信是基于aidl接口实现的,使用aidl接口可以省略许多不必要的代码。工程的基础mkAndroid.mkinclude $(call all-subdir-makefiles)Android.bpsubdirs = ["cmd","lib","service"]cmd文件夹代表服务从这个文件夹启动,当然如果特别完整的需要把 .rc文件和SELINUX权限.转载 2022-01-16 17:16:03 · 874 阅读 · 0 评论 -
编写Makefile文件
当我们写好程序后,需要通过编译,链接后生成可执行文件,这个可执行文件也就是我们通常说的程序。那么什么是编译,什么是链接,又为啥要编译,链接呢?因为程序设计语言五花八门,说啥的都有,比如c,c++等,但是这些语言都是相对于程序员来说好懂,计算机看不懂。我计算机就只认识一种语言,就是二进制01,这样就需要把高级语言翻译成二进制。这个编译的过程就好比是翻译,这样计算机就可以看懂了,她就知道该做什么了。在写代码的过程中会写出很多个代码文件,比如cpp文件,把每个代码文件都编译完,会生成一个obj文件,这里面全转载 2022-01-10 22:26:48 · 2227 阅读 · 0 评论 -
Android.bp正确姿势添加宏控制编译指南
引言 随着Android版本的迭代,越来越多的移动终端都用上了香喷喷的Android 9和10系统。相对于原来的Android版本,Android 9和10越来越多的使用Android.bp替换以前的Android.mk编译脚本。我们知道 Android.mk采用Makefile的语言,所以为了控制条件编译和多版本适配,我们可以在不同产品直接在Android.mk中采用Makefile语言控制编译。虽然我们也可以通过Android的预置工具androidmk将Android.mk转换为Android.b转载 2022-01-10 22:06:52 · 4232 阅读 · 1 评论 -
Android.bp入门指南之浅析Android.bp语法
引言 在前面的章节初始Android.bp里面我们对Android.bp有了一个基本的认识,知道了它是干啥的。算了吗,还是再介绍一遍它吗!Android.bp是用来替换Android.mk的配置文件,它使用Blueprint框架来解析。Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong则是专为Android编译而设计的工具,Blueprint只是解析文件的形式,而Soong则解释内容的含义,最终转换成Ninja文件。Android.bp文件用类似JSON的简洁声明转载 2022-01-10 21:58:22 · 1371 阅读 · 0 评论 -
Android.bp入门指南之Android.mk转换成Android.bp
引言 在前面的篇章初识Android.bp和Android.bp入门指南之语法初识我们对Android.bp是啥和基本语法都有了一个初步层次的认识。Android的妈咪谷歌当然也考虑到了,从Android.mk切换到Android,mk需要一定的时间,从而为我们精心开发了一个工具androidmk,但是这个工具不是很完善,对于一些Android.mk中的宏开关就无从处理了。本篇今天就带领大伙认识一下androidmk工具的使用。注意:本篇是以Android 9的工程来进行讲解的。一 初探andr转载 2022-01-10 21:53:53 · 2111 阅读 · 0 评论 -
Android.bp你真的了解吗
引言 最近在捣鼓Android 9 和10的build系统,看到一篇比较好的博客,大名鼎鼎的gityuan的,奉上链接理解Android.bp,为了方便学习和更多的人看到,特意重新编辑以发扬光大使更多人看到。一.简介早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp。很明显Android.bp的出现就是为了替换掉Android.mk。再来说一说Android build系统随着Android版本相应的发展演变过程:.转载 2022-01-10 21:38:36 · 895 阅读 · 0 评论 -
HwBinder原理总结-Android10.0 HwBinder通信原理(十一)
1 概述 HwBinder的通信原理基本上都已经说完,这一节我们做一个简单的概要总结。2 HwBinder通信模型 下图中涉及到HwBinder模型的4类角色:HwBinder驱动,HwServiceManager,Server和Client。Binder机制的目的是实现IPC(Inter-Process Communication),即Client和Server之间的通信。 其中Server,Client,HwServiceManager运行于用户空间,...转载 2022-01-09 12:35:07 · 631 阅读 · 0 评论 -
HwBinder驱动篇-Android10.0 HwBinder通信原理(十)
1.概述 在Android中,用户空间的应用程序都可以看做是一个独立的进程,进程间存在隔离,进程不能互相访问数据,如果需要访问就需要借助内核。 每个应用程序都有它自己独立的内存空间,若不同的应用程序之间涉及到通信,需要通过内核进行中转,因为需要用到内核的copy_from_user()和copy_to_user()等函数。因此在HwBinder的通信中,也引入了HwBinder内核驱动,用来提供数据中转。 HwBinder驱动就是一个多个进程之间的中枢神经,支撑起了Android中进程间通信...转载 2022-01-09 12:17:39 · 1821 阅读 · 0 评论 -
JAVA层HIDL服务的获取原理-Android10.0 HwBinder通信原理(九)
获取服务 JAVA层HIDL服务获取如下图所示:5.1 获取服务调用栈5.2 onClick()[/vendor/ingres/hidl_demo/app/src/main/java/com/android/hidldemo/MainActivity.java]private IDemo mHidlService; public void onClick(View v) { switch (v.getId()) { case ...转载 2022-01-07 08:15:12 · 1437 阅读 · 0 评论 -
JAVA层HIDL服务的注册原理-Android10.0 HwBinder通信原理(八)
1.概述 上一节中,我们了解了Native层的HIDL服务注册和获取流程,HAL服务的注册和获取,其实就是从HwServiceManager的mServiceMap中,插入和获取对应的hidl服务。通常情况下,HAL的服务都是在Native层,Client可以在Native也可以在framework、应用层。但是Android新引入的HIDL是支持JAVA侧的服务创建和Client验证的,这一节,我们深度分析JAVA层的HAL服务的注册和获取。 JAVA层的HIDL服务注册和获取流程和Nat...转载 2022-01-07 08:06:16 · 986 阅读 · 0 评论 -
Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
5.IDemo的服务获取 IDemo的HIDL服务获取流程如下图所示:5.1调用栈如下5.2 main[\vendor\ingres\hal_demo\cpp\hal_demo_test.cpp]int main() { //1.获取IDemo这个HIDL服务的代理对象 android::sp<IDemo> service = IDemo::getService(); if(service == nullptr) { pri...转载 2022-01-07 07:47:23 · 986 阅读 · 0 评论 -
Native层HIDL服务的注册原理-Android10.0 HwBinder通信原理(六)
1.概述 在上一节中,我们知道了HwServiceManager的启动过程,注册、获取服务的细节处理。服务的信息都存在于一个mServiceMap的map容器中。mServiceMap对应的key为package interface 名称,例如"android.hidl.manager@1.0::IServiceManager", 对应的value为一个PackageInterfaceMap结构体,其中包含了lookup()、insertService()等方法,service的对象最终被...转载 2022-01-07 07:37:33 · 2055 阅读 · 0 评论 -
HwServiceManager篇-Android10.0 HwBinder通信原理(五)
1.概述 HwServiceManager是HAL服务管理中心,负责管理系统中的所有HAL服务,由init进程启动。 HwServiceManager 的主要工作就是收集各个硬件服务,当有进程需要服务时由HwServiceManager 提供特定的硬件服务。2.HwBinder架构HwBinder通信原理:3.hwservicemanager的启动 在init.rc中,当init进程启动后,会去启动servicemanager、hwservicemanager、vn...转载 2022-01-06 23:22:21 · 3212 阅读 · 1 评论 -
HIDL示例-C++服务创建Client验证-Android10.0 HwBinder通信原理(三)
1. 概述 为了和Android原生代码进行解耦,我在vendor的仓库中创建了一个ingres/interfaces的文件夹,hidl的相关实例都会放到这个目录下实现 我们接下来准备写一个Native的hal的服务程序,client端为一个Native进程。1.1 C++层HwBinder架构1.2 HwBinder 通信原理2. hal文件创建及环境准备2.1 在vendor/ingres/interfaces中创建demo文件夹 命令:mkdir...转载 2022-01-06 22:53:04 · 2123 阅读 · 1 评论 -
HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)
1. 概述 上一节,我们写了Native层的HIDL服务和客户端进程验证,这一节我们准备写一个JAVA层的HIDL服务和客户端进行验证。 本节会直接写一个APP用来与HIDL服务进行通信。1.1 JAVA层的HwBinder架构1.2 HwBinder通信原理2. 示例说明Server进程目录结构:Server:hal_demo│java├─src│ └─com│ └─android│ └...转载 2022-01-06 22:35:34 · 955 阅读 · 0 评论 -
HIDL详解-Android10.0 HwBinder通信原理(二)
1.概述 在Android 8.0开始,Android引入了Treble的机制,为了方便Android系统的快速移植、升级,提升系统稳定性,Android引入了HAL Binder的机制,把framework和HAL进行隔离,减少了framework和HAL的耦合性,使得framework部分可以直接被覆盖、更新,而不需要重新对HAL进行编译。 在HAL Binder中,采用的接口定义语言为HIDL。 下图展示了Android 有Treble和没有Treble的升级方式:...转载 2022-01-06 08:36:49 · 2402 阅读 · 0 评论 -
HwBinder入门篇-Android10.0 HwBinder通信原理(一)
HAL binder是Android O(8.0)专门用于HAL(Hardware Abstract Layer)层(native)进程与其clients之间的通信机制(clients可以是native进程,也可以是Java Framework进程)。HAL binder替代了早先使用的socket通信,其kernel层实际是基于原有的binder驱动,但为了配合Client与Server之间的数据传输,需要使用特定的中间层HIDL来进行接口与数据的转换。那么,相对之前的HAL通信方式(socket)...转载 2022-01-06 08:20:07 · 2668 阅读 · 2 评论 -
Android P HIDL demo代码编写
之前的文章已经分析了HIDL服务的注册和调用,这篇文章来总结下一个HIDL的服务如何编写。缩写HAL文件首先要确认放置文件夹和接口的包名,因为这跟后面使用脚本生成一部分代码有关,一般默认的放在hardware/interfaces目录下,我们写一个简单的IDemo.hal (hardware/interface/demo/1.0/IDemo.hal)package android.hardware.demo@1.0;interface IDemo { init(int32_t.转载 2022-01-05 23:08:44 · 418 阅读 · 0 评论