Android binder介绍

归志宁无五亩园,读书本意在元元。这篇文章主要讲述Android binder介绍相关的知识,希望能为你提供帮助。
1. 介绍 Binder是android下基于C/S架构的进程间通信机制,基于开源OpenBinder
从实现上来说可分为Binder驱动、ServiceManager、Server、Client四个组成部分
2. Binder驱动 Binder驱动代码主要位于drivers/android目录
2.1 数据结构

binder_alloc binder_alloc
数据结构 说明
binder_device binder设备,系统初始化时会定义binder、hwbinder、vndbinder三个设备
binder_context binder上下文,每个binder设备包含一个上下文结构
binder_proc binder进程记录,每个打开binder设备的进程均包含该结构,用来记录该进程的各种信息和状态。例如:线程表、binder节点表、节点引用表
binder_thread binder线程,记录了线程相关的信息,例如需要完成的任务等
binder_node binder节点
binder_transaction binder事务
binder_buffer binder缓冲区,由mmap创建,用于binder事务
binder_alloc binder proc的地址空间
2.2 初始化
binder_init() /* * 创建如下目录和文件 *目录 */sys/kernel/debug/binder */sys/kernel/debug/binde/proc *文件 *$(BINDER_PROC)/state-- 记录状态信息 *$(BINDER_PROC)/stats-- 记录统计信息 *$(BINDER_PROC)/transactions-- 记录transaction相关信息 *$(BINDER_PROC)/transaction_log-- 记录transaction日志相关信息 *$(BINDER_PROC)/failed_transaction_log -- 记录失败的transaction日志相关信息 *文件读取函数依次为 *binder_state_show() *binder_stats_show() *binder_transactions_show() *binder_transactions_log_show() *- *$(BINDER_PROC) = /sys/kernel/debug/binde/proc */ debugfs_create_dir("binder") debugfs_create_dir("proc") debugfs_create_dir("state") debugfs_create_dir("stats") debugfs_create_dir("transactions") debugfs_create_dir("transaction_log") debugfs_create_dir("failed_transaction_log")/* * 注册/dev/binder, /dev/hwbinder, /dev/vndbinder设备 */ init_binder_device() misc_register(binder_fops)/* binder设备操作集 */ static const struct file_operations binder_fops = { .owner= THIS_MODULE, .poll= binder_poll, .unlocked_ioctl = binder_ioctl, .compat_ioctl= binder_ioctl, .mmap= binder_mmap, .open= binder_open, .flush= binder_flush, .release= binder_release, };

2.3 打开
当应用打开一个binder设备时,在内核中中会执行binder_open
【Android binder介绍】- 分配并创建binder_proc结构
- 初始化binder_proc的context、tsk、todo、default_priority、context、alloc等成员变量
- 将binder_proc保存到file::private_data结构中,
以之后的mmap、ioctl中获取
- 将binder_proc::proc_node插入全局变量binder_procs中
- 创建/sys/kernel/debug/binde/proc/`pid`目录

2.4 映射

    推荐阅读