1. binder基本概念

1.1 特点

1)binder 是一种基于C/S通信模式的IPC(Inter_Process Communication)。

2)在传输过程中近需要一次copy,为发送添加UID/PID身份,既支持实名binder也支持匿名binder,安全性高

3)binder驱动是标准的linux驱动,但是不是驱动专门的硬件,而是虚拟出一个binder管理设备,用于管理binder通信。

1.2

2. binder驱动源码分析

2.1 binder初始化函数binder_init

static int __init binder_init(void)

{

int ret;

char *device_name, *device_tmp;

struct binder_device *device;

struct hlist_node *tmp;

char *device_names = NULL;

ret = binder_alloc_shrinker_init();//初始化binder缓冲区
if (ret)
return ret; atomic_set(&binder_transaction_log.cur, ~0U);
atomic_set(&binder_transaction_log_failed.cur, ~0U); binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
if (binder_debugfs_dir_entry_root)
binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
binder_debugfs_dir_entry_root); if (binder_debugfs_dir_entry_root) {
debugfs_create_file("state",
0444,
binder_debugfs_dir_entry_root,
NULL,
&binder_state_fops);
debugfs_create_file("stats",
0444,
binder_debugfs_dir_entry_root,
NULL,
&binder_stats_fops);
debugfs_create_file("transactions",
0444,
binder_debugfs_dir_entry_root,
NULL,
&binder_transactions_fops);
debugfs_create_file("transaction_log",
0444,
binder_debugfs_dir_entry_root,
&binder_transaction_log,
&binder_transaction_log_fops);
debugfs_create_file("failed_transaction_log",
0444,
binder_debugfs_dir_entry_root,
&binder_transaction_log_failed,
&binder_transaction_log_fops);
} if (!IS_ENABLED(CONFIG_ANDROID_BINDERFS) &&
strcmp(binder_devices_param, "") != 0) {
/*
* Copy the module_parameter string, because we don't want to
* tokenize it in-place.
*/
device_names = kstrdup(binder_devices_param, GFP_KERNEL);//给device_names申请空间
if (!device_names) {
ret = -ENOMEM;
goto err_alloc_device_names_failed;
} device_tmp = device_names;
while ((device_name = strsep(&device_tmp, ","))) {
ret = init_binder_device(device_name); //注册misc设备
if (ret)
goto err_init_binder_device_failed;
}
} ret = init_binderfs();
if (ret)
goto err_init_binder_device_failed; return ret;

err_init_binder_device_failed:

hlist_for_each_entry_safe(device, tmp, &binder_devices, hlist) {

misc_deregister(&device->miscdev);

hlist_del(&device->hlist);

kfree(device);

}

kfree(device_names);

err_alloc_device_names_failed:

debugfs_remove_recursive(binder_debugfs_dir_entry_root);

return ret;

}

binder_init函数有三个作用:

1) 初始化binder misc设备

2) 给设备分配内存

3) 调用list_add,将misc device设备放入设备列表中misc_list

2.2 binder初始化函数binder_init

binder机制分析的更多相关文章

  1. Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...

  2. 从Android源码的角度分析Binder机制

    欢迎访问我的个人博客,原文链接:http://wensibo.top/2017/07/03/Binder/ ,未经允许不得转载! 前言 大家好,好久不见,距离上篇文章已经有35天之久了,因为身体不舒服 ...

  3. 从驱动层分析android的Binder机制-android学习之旅(83)

    前言及知识准备 Binder驱动程序 Service组件的注册和启动 Clinet应用获取服务 本次主要介绍Android平台下Binder进程间机制.从机制的组成出发,将按照Binder驱动程序.B ...

  4. Android中的Binder机制的简要理解

    转载自:http://www.linuxidc.com/Linux/2012-07/66195.htm http://blog.csdn.net/sunxingzhesunjinbiao/articl ...

  5. 6.7 Binder机制

    Binder在Android系统中江湖地位非常之高.在Zygote孵化出system_server进程后,在system_server进程中出初始化支持整个Android framework的各种各样 ...

  6. Android深入浅出之Binder机制

    一说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的.所以搞明白Binder的话,在很大程度上就能理解程序运行 ...

  7. Android Binder机制简单了解

    Binder -- 一种进程间通信(IPC)机制, 基于OpenBinder来实现 毫无疑问, 老罗的文章是不得不看的 Android进程间通信(IPC)机制Binder简要介绍和学习计划 浅谈Ser ...

  8. Binder机制,从Java到C (大纲)

    转载请标注:张小燕:http://www.cnblogs.com/zhangxinyan/p/3487381.html 前段时间一直在看有关Binder机制的内容,觉得受益匪浅,整理记录于此,大家请随 ...

  9. Binder机制,从Java到C (2. IPC in System Service :AMS)

    1.建立Activity和Service的IPC之前 在上一篇 Binder机制,从Java到C (1. IPC in Application Remote Service)  里面有说到Activi ...

  10. Binder机制,从Java到C (3. ServiceManager in Java)

    上一篇 Binder机制,从Java到C (2. IPC in System Service :AMS)  中提到 Application是通过ServiceManager找到了AMS 的servic ...

随机推荐

  1. python打开Excel中指定的sheet表

    一个Excel中有多个sheet的时候,你在第几个sheet保存关闭的,那下次打开就在原来的那个表的位置,所以有时候你想--在打开一个Excel的时候指定到其中的一个sheet表,那么使用第三方库xl ...

  2. NIO 缓冲区 ByteBuffer 之黏包和半包

    一.低效率方式 /** * 黏包.半包 */ private static void buffExample2() { /* 网络上传输多条数据给服务器,数据之间使用 \n 分隔. 但由于某种原因(多 ...

  3. Oracle深入数据库体系结构_第三章文件

    构成数据库和实例的8种主要文件类型: 参数文件:(init file) 可以通过视图V$PARAMETER(show parameter)查看 跟踪文件 警告文件 数据文件 临时文件 控制文件 重做日 ...

  4. C# IOC 个人理解

    学习QFramework 过程中发现对IOC不太了解,就大概百度了一下思路 将原先类与类之间的相互依赖关系,转移到第三方容器中, 同过读取配置文件来生成对应的依赖关系,将原本类之间的耦合转移到配置文件 ...

  5. Flink监控信息写入到PushGateway出现 java.io.IOException: Response code from http xx was 200问题

    最近在将Flink的Metrics存储由InfluxDB迁移到Prometheus的时候,由于使用的版本问题,导致一直出现下面的WARN日志 2020-05-16 12:36:57.794 [Flin ...

  6. Codeforces Round #728 (Div. 2) C. Great Graphs

    Great Graphs 题意 给你一个数组\(d\),\(d[i]\)表示从节点\(1\)到其他各个节点的最短路的长度,然后你可以对这个图进行加边(可以是负边),但不允许存在一个权值和为负数的回路. ...

  7. 【七侠传】冲刺阶段--Day2

    [七侠传]冲刺阶段--Day2 团队成员 20181221曾宇涛 20181202李祎铭 20181209沙桐 20181215薛胜瀚 20181216杨越麒 20181223何家豪 20181232 ...

  8. Linux 使用Samba或NFS实现文件共享

    SAMBA文件共享服务 Samba是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作. 例1:配置Samba服务前,先删掉Samba服务主配置文件中的 ...

  9. 简易orm 主要是为了旧平台查询方便

    直接新建个文件即可 ExLogic.cs public class ExLogic { public static int Execute(string sqlCommand, string dbCo ...

  10. Docker基本命令之 仓库管理(docker hub)

    仓库管理 仓库介绍:仓库(Repository)就是集中存放镜像的地方 登录docker hub注册一个自己的账号 然后创建一个仓库:xxx 登录:docker login -- 输入用户名/密码(退 ...