Android VNDK:vendor native development kit 引入原因

背景:
各个厂商开发基于Android系统的设备,底层硬件相关的驱动或一些底层的功能由厂商(vendor)开发。

在Android 8.0之前,厂商开发的模块以动态库的方式提供,直接被framework调用(被native直接调用或者Java模块通过jni调用,总之是直接依赖)。

带来的问题,给Android系统升级带来麻烦,如果厂商不提供新版Android的支持,已有设备就无法使用新版Android系统。

为了解耦Android系统和供应商开发模块之间的依赖:
1)引入HAL层,让framework不直接依赖于vendor开发的二进制接口,二者根据需要依赖LL-NDK、VNDK、VNDK-SP,并借助aidl和binder机制实现解耦。
2)通过划分Android系统分区和vendor分区实现隔离,便利系统升级。升级系统的时候可以分别升级,比如升级Android系统,不影响供应商开发的模块。

在这里插入图片描述

VNDK是专门选择的一些接口稳定的库,framework和HAL都可以放心的依赖这些库,系统升级保证这些库提供的接口不变(头文件和二进制调用接口)。

稍微展开一些,实现方式:
1)引入隔离层HAL(hardware abstract layer),让vendor模块和底层框架没有之间依赖,vendor模块通过HAL使用底层的功能,vendor模块只能依赖于同层级的native库。
2)HAL开发:VNDK是开发HAL工具。
3)HAL接口定义:使用AIDL(旧版是HIDL)描述HAL提供的函数接口。
4)HAL实现框架:hwbinder,结合AIDL,借助底层binder机制,实现vendor模块和底层模块的通信,同时满足效率目标。
5)用设备树叠加解决硬件驱动匹配:device tree overlay。简单的说,Android提供一个标准系统和驱动(dt),厂商提供dto,覆盖部分驱动dt,适配特定设备硬件。其中Android系统dt是主版本,通过SOC id来匹配设备;厂商提供的dt通过board id来匹配设备。
并且dt和dto在不同的分区,Android系统升级不影响厂商的dto。
6)sepolicy overlay,根据需要覆盖系统原有的sepolicy,定制HAL所需的sepolicy。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抓饼先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值