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

- 分配并创建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 映射

原文地址:https://www.cnblogs.com/hzl6255/p/12105245.html

时间: 2024-10-05 13:33:27

Android binder介绍的相关文章

Android binder介绍(下)

上一篇: <Android binder介绍(上)> 5. Java Binder ServiceManagerProxy  ServiceManagerNative http://gityuan.com/android/ https://www.jianshu.com/p/34ca9bf45d0b 原文地址:https://www.cnblogs.com/hzl6255/p/12117227.html

Android Binder机制介绍

做过Android开发的同学可能有些体会,入门初期,工作内容主要是实现各式各样的UI界面,以及实现应用的业务逻辑.在这个阶段,我们会逐渐熟悉View系统,逐渐学会实现各种各样的界面以及动画效果.再往后,当我们想更深入的学习android系统,比如学习android四大组件的启动过程.AMS.PMS等等时,都会遇到一个叫做Binder的东西.结合笔者的经验,Binder可以说是深入理解Android系统的重要基础.binder作为android系统进程间通信的机制,贯穿在方方面面.我们平时使用最多

[gitbook] Android框架分析系列之Android Binder详解

请支持作者原创: https://mr-cao.gitbooks.io/android/content/android-binder.html Android Binder详解 Table of Contents 1. binder简介 2. binder的实现 2.1. IBinder类简介 2.2. IInterface类简介 2.3. BpBinder和BBinder简介 2.4. ProcessState和IPCThreadState简介 2.5. ServiceManager简介 2.

转:轻松理解 Android Binder,只需要读这一篇

转自http://www.jianshu.com/p/bdef9e3178c9 在 Android 系统中,Binder 起着非常重要的作用,它是整个系统 IPC 的基石.网上已经有很多文章讲述 Binder 的原理,有的讲的比较浅显,没有触及到关键,有的讲的太过于深入底层,难以理解,本文会比较全面,以一个比较轻松的方式,从面到点,大处着眼,小处着手的形式去讲述 Binder 在 Android 中是如何使用的.理解 Binder 的基本原理,对学习 Android 也有很大的帮助,很多问题也能

android binder 机制二(client和普通server)

在讲它们之间的通信之前,我们先以MediaServer为例看看普通Server进程都在干些什么. int main() { -- // 获得ProcessState实例 sp<ProcessState> proc(ProcessState::self()); // 得到ServiceManager的Binder客户端实例 sp<IServiceManager> sm = defaultServiceManager(); -- // 通过ServiceManager的Binder客户

Android Binder分析二:Natvie Service的注冊

这一章我们通过MediaPlayerService的注冊来说明怎样在Native层通过binder向ServiceManager注冊一个service,以及client怎样通过binder向ServiceManager获得一个service,并调用这个Service的方法. Native Service的注冊 这里以MediaPlayerService举例来说明怎样在Native层注冊Service,首先来看main_mediaservice.cpp的main方法: int main(int a

Android Binder设计与实现篇

摘要 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势.深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化.本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Binder通信协议了解Binder的设计需求:然后分别阐述Binder在系统不同部分的表述方式和起的作用:

Android Binder机制浅析

Binder是Android上一种IPC机制,重要且较难理解.由于Linux上标准IPC在灵活和可靠性存在一定不足,Google基于OpenBinder的设计和构想实现了Binder. 本文只简单介绍其实现,并重点讨论Binder安全相关的内容.详细的Binder设计与实现分析,参考附录4篇文章. 一.Binder 实现 Android Binder由Client.Server.Service Manager和Binder驱动4个部件组成,下图引自网络. 在类UNIX系统中,进程是相互独立的,一

Android Binder进程间通信---注册Service组件---发送和处理BC_TRANSACTION

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra