Android 8 - 隔离 HAL - Treble 项目 - binder - vndbinder - hwbinder
http://developers.googleblog.cn/2017/07/hal.html
抛弃 HAL
2017年7月31日星期一
隔离 HAL
硬件抽象层 (HAL) 在与设备无关的代码和特定于设备的硬件实现之间提供了一个接口。HAL 通常打包成共享库,直接加载到需要与硬件交互的进程中。安全边界在进程级实施。因此,将 HAL 加载到进程中意味着 HAL 与加载它的进程运行在相同的安全环境中。传统的在进程中运行 HAL 的方法意味着进程需要每个进程中 HAL 所需的权限,包括对内核驱动程序的直接访问权限。同样,进程中的所有 HAL 都有与进程中其他 HAL 相同的一组权限,包括其他进程中 HAL 所需的权限。这就导致进程和 HAL 拥有过多的权限,能够访问它们本不应该访问的权限和硬件。图 1.传统的一个进程中加载多个 HAL 的方法。
将 HAL 移到自己的进程中更好地遵循了最低权限原则。这带来了两个特别的好处:
- 每个 HAL 都在其自己的沙盒中运行,并且仅被允许访问它所控制的硬件驱动程序,而授予进程的权限仅限于完成其作业所必须的权限。
- 类似地,进程丧失了对 HAL 所需的硬件驱动程序、其他权限和功能的访问权。
图 2.每个 HAL 都运行在自己的进程中。
将 HAL 移到自己的进程中对于确保安全性非常有效,但其代价是客户端与 HAL 之间的 IPC 开销增大。对 Binder 驱动程序的改进使得 HAL 和客户端之间的 IPC 开销不再高不可攀。通过将 scatter-gather 引入 Binder,不再需要执行序列化/反序列化步骤,将对数据执行的复制操作次数从三次减少到一次,因而提高了每个事务的性能。Android
O 还引入了 Binder 域,为供应商和平台组件提供独立的通信流。应用和 Android 框架继续使用 /dev/binder,但供应商提供的组件现在使用 /dev/vndbinder。平台和供应商组件之间的通信必须使用 /dev/hwbinder。在平台与供应商组件之间禁止其他形式的 IPC。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通