发布时间:2026/8/26 20:30:57
Android Binder通信原理(一):简介 源码基于Android R0. 前言在Linux 系统中现有的进程间通信IPC方式管道(PIPE)在创建时分配一个page大小的内存缓存区大小比较有限命名管道(FIFO)考虑 PIPE_BUF 和原子操作消息队列信息复制两次额外的CPU消耗不合适频繁或信息量大的通信共享内存无须复制共享缓冲区直接付附加到进程虚拟地址空间速度快但进程间的同步问题操作系统无法实现必须各进程利用同步工具解决套接字作为更通用的接口传输效率低主要用于不同机器或跨网络的通信信号量常作为一种锁机制防止某进程正在访问共享资源时其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段信号不适用于信息交换更适用于进程中断控制比如非法内存访问杀死某个进程等0.1 使用Binder 原因0.1.1 性能Socket 作为一款通用接口其传输效率低开销大主要用在跨网络的进程间通信和本机上进程间的低速通信。消息队列和管道采用存储-转发方式即数据先从发送方缓存区拷贝到内核开辟的缓存区中然后再从内核缓存区拷贝到接收方缓存区至少有两次拷贝过程。共享内存虽然无需拷贝但控制复杂难以使用。Binder 只需要一次数据拷贝性能上仅次于共享内存。0.1.2 稳定性Binder 基于 C/S 架构客户端Client有什么需求就丢给服务端Server去完成架构清晰、职责明确又相互独立自然稳定性更好。共享内存虽然无需拷贝但是控制负责难以使用。从稳定性的角度讲Binder 机制是优于内存共享的。0.1.3 安全性Android 为每个安装好的 APP 分配了自己的 UID故而进程的 UID 是鉴别进程身份的重要标志。传统的 IPC 只能由用户在数据包中填入 UID/PID但这样不可靠容易被恶意程序利用。可靠的身份标识只有由 IPC 机制在内核中添加。其次传统的 IPC 访问接入点是开放的只要知道这些接入点的程序都可以和对端建立连接不管怎样都无法阻止恶意程序通过猜测接收方地址获得连接。同时 Binder 既支持实名 Binder又支持匿名 Binder安全性高。2. Binder 划分在Android 8.0 之前Binder机制比较简单只有一个驱动设备/dev/binder,一个守护进行/system/bin/servicemanager一个binder库/system/lib64/libbinder.so.在Android 8.0开始Android引入了Treble的机制为了方便Android系统的快速移植、升级提升系统稳定性Binder机制被拓展成了/dev/binder,/dev/hwbinder/dev/vndbinder。我们原先使用的/dev/binder成为框架进程的专有节点这意味着供应商进程无法再访问此节点。供应商进程可以访问 /dev/hwbinder但必须将其 AIDL 接口转为使用 HIDL。对于想要继续在供应商进程之间使用 AIDL 接口的供应商需要使用 /dev/vndbinder而非 /dev/binder。Android8.0 及之后的Binder域如下图所示3. 三种 binder 介绍3.1 vndbinder 和 bindervnbinder 和binder 使用的是一个ServiceManager 和libbinder只不过在选择的时候会区分open /dev/binder 还是/dev/vnbinderframeworks/native/cmds/servicemanager/main.cpp int main(int argc, char** argv) { if (argc 2) { LOG(FATAL) usage: argv[0] [binder driver]; } const char* driver argc 2 ? argv[1] : /dev/binder; spProcessState ps ProcessState::initWithDriver(driver); ps-setThreadPoolMaxThreadCount(0); ps-setCallRestriction(ProcessState::CallRestriction::FATAL_IF_NOT_ONEWAY); spServiceManager manager new ServiceManager(std::make_uniqueAccess()); if (!manager-addService(manager, manager, false /*allowIsolated*/, IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT).isOk()) { LOG(ERROR) Could not self register servicemanager; } .. }代码中根据参数选择性的将driver 传入进行open详细看ProcessState::initWithDriver() 函数。通常供应商进程不直接打开 Binder 驱动程序而是链接到打开 Binder 驱动程序的 libbinder 用户空间库。为 ::android::ProcessState() 添加方法可为 libbinder 选择 Binder 驱动程序。供应商进程应该在调用 ProcessState、IPCThreadState 或发出任何普通 Binder 调用之前调用此方法。要使用该方法请在供应商进程客户端和服务器的 main() 后放置以下调用ProcessState::initWithDriver(/dev/vndbinder);dev/binder和dev/vndbinder无法在一个进程中同时使用binder和vndbiner 的机制共用一套libbinder因此两者使用时每次只能指定一个设备节点不能同时使用。3.2 hwbinderhwbinder 独立于binder和vndbinder拥有独立的驱动设备/dev/hwbinder独立的hwservicemanager (system/hwservicemanager/ 目录) 和独立的binder 库libhwbinder (system/libhwbinder/ 目录)。android 8.0 以后采用了treble 的架构framework 和HAL 是独立的在不同的 fw 和 HAL 进程中进程间通信使用的是 HIDL 语言而不在使用 AIDL 语言因此使用了不同的 binder 驱动设备3.3 binder 库的变化bindervndbinderhwbinderlib binder 位置frameworks/native/libs/binderframeworks/native/libs/bindersystem/libhwbinderservice manager 位置frameworks/native/cmds/servicemanagerframeworks/native/cmds/servicemanagersystem/hwservicemanager

相关新闻

2026/8/26 20:30:57

网络安全(DVWA命令执行漏洞)—代码审计思路

<?php if( isset( $_POST[ Submit ] ) ) { //查看前端传入的post值submit是否为空// Get input $target trim($_REQUEST[ ip ]); //获取get、post、cookie的ip值传参赋值给$target// Set blacklist $substitutions array( //定义数组&#xff…

2026/8/26 20:30:57

超级详细的 FinalShell 安装 及使用教程

一、引言FinalShell 是一款免费的国产的集 SSH 工具、服务器管理、远程桌面加速的良心软件&#xff0c;同时支持 Windows,macOS,Linux&#xff0c;它不单单是一个 SSH 工具&#xff0c;完整的说法应该叫一体化的的服务器&#xff0c;网络管理软件&#xff0c;在很大程度上可以免…

2026/8/26 20:30:57

ENVI5.6 安装教程,新手入门(超详细)附安装包和常见问题

ENVI是一个完整的遥感图像处理平台&#xff0c;广泛应用于科研、环境保护、气象、农业、林业、地球科学、遥感工程、水利、海洋等领域。目前ENVI已成为遥感影像处理的必备软件&#xff0c;包含辐射定标、大气校正、镶嵌裁剪、分类识别、阈值分割等多种功能。ENVI针对绝大部分的…

2026/8/26 21:26:01

基于STM32 HAL库驱动AD9220实现10MSPS高速数据采集方案详解

1. 项目概述&#xff1a;当HAL库遇上高速AD9220最近在做一个需要高速数据采集的项目&#xff0c;核心需求是能稳定抓取10MHz带宽左右的模拟信号。市面上常见的STM32片内ADC&#xff0c;虽然用起来方便&#xff0c;但采样率和精度在面对这种需求时往往捉襟见肘。于是&#xff0c…

2026/8/26 21:26:01

Logback日志脱敏实战:非侵入式实现敏感信息自动隐藏

1. 项目概述&#xff1a;为什么日志脱敏是开发者的必修课&#xff1f;干了这么多年开发&#xff0c;最怕的就是线上出问题查日志&#xff0c;结果发现日志里全是明文密码、身份证号、手机号。这场景&#xff0c;估计不少兄弟都遇到过&#xff0c;轻则被安全团队通报&#xff0c…

2026/8/26 21:26:01

嵌入式SPI Flash存储:从W25Q16驱动到文件系统集成与可靠性设计

1. 项目概述&#xff1a;为什么W25Q16是嵌入式开发的“老朋友”&#xff1f;如果你在玩单片机、做物联网设备&#xff0c;或者捣鼓任何需要“记住”点东西的小玩意儿&#xff0c;那你大概率绕不开一个叫W25Q16的芯片。这玩意儿不是什么新潮的AI处理器&#xff0c;而是一颗看起来…

2026/8/26 21:26:01

蓝桥杯答疑题本质:单服务台排队优化与SPT调度

1. 这道题不是考编程&#xff0c;是考“排队经济学” 蓝桥杯2020国赛ABC组的P8732题——《答疑》&#xff0c;表面看是一道模拟题&#xff0c;实则藏着一套被绝大多数参赛者忽略的底层逻辑&#xff1a; 时间成本最优分配模型 。我带过七届蓝桥杯单片机与嵌入式方向的集训队&a…

2026/8/26 21:26:01

AI辅助编程边界:从异步并发到业务建模,编程远未解决

编程这件事&#xff0c;这几年被讨论得越来越像“科幻议题”。随着 AI 编程助手、大模型写代码、低代码平台的出现&#xff0c;经常能看到两种极端的声音&#xff1a;一种说“程序员要失业了”&#xff0c;另一种说“AI 根本写不了复杂业务”。但现实往往比这两种判断都更微妙。…

2026/8/26 21:21:01

中国企业HR数字化转型:AI招聘与人才管理实践

1. 2026年中国人力资源管理的数字化转型趋势过去三年间&#xff0c;我深度参与了超过20家企业的人力资源数字化转型项目&#xff0c;亲眼见证了AI技术如何重塑人才管理全流程。这份白皮书汇集了170家头部企业的实践案例&#xff0c;其中最令人印象深刻的是百胜中国的AI端到端人…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要&#xff1a; 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数&#xff08;random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯&#xff08;包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE&#xff08;Server-Sent Events&#xff09;&#xff0c;本质是一个没有马上结束的 HTTP 请求。 过程是&#xff1a; 拷贝机发送一次请求&#xff1a; GET /api/code-sync/events服务器返回&#xff1a; Content-Type: text/event-stream但不关闭响应&…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…