自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Binder 的死亡通知机制的作用是什么,它是如何实现的?

先抛出一个问题:假设A 是 C 端,B 是 S 端,问:如何保证 A 知道 B 是否存活,B 如何知道 A 存活, 如果 A 死了,B 该怎么办?B 死了 A 该怎么办?在binder通信中,有一个机制叫死亡通知机制,这个机制是用来感知对方的存活状态。具体实现依赖于 Binder 驱动提供的和接口。

2026-03-12 17:05:12 347

原创 Binder 驱动加载过程中有哪些重要的步骤?

关键类负责管理进程的Binder资源binder驱动的加载过程,主要涉及到驱动的初始化,与进程建立联系以及映射虚拟内存空间;整个过程通过一下几个核心函数来完成;

2026-03-03 17:48:11 43

原创 使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题?

方法开始进行一系列的if判断语句,其中if (is_async &&alloc->free_async_space < size + sizeof(struct binder_buffer))这段代码的意思为,当传输为异步且当前传输数据的size不可大于alloc->free_async_space,其中alloc->free_async_space为binder_mmap过程中设置的,大小等于alloc->buffer_size的一半;下面大概了解一下buffers列表中的buffer是如何计算大小的。

2026-01-13 18:16:14 762

原创 mmap 的原理

binder_open方法主要是用来初始化binder驱动,其中mmapsize为128k,方法是调用open及mmap方法,对应binder渠道内的binder_open及binder_mmap。binder_mmap方法主要设置虚拟内存的参数,并且将虚拟内存与用户空间的缓冲区进行关联,具体关联方法为binder_alloc_mmap_handler;1. 初始化binder_proc,并且将binder_proc插入内核的全局binder_procs链表中,方便后续管理。

2025-12-30 18:00:19 209

原创 Binder 是如何找到目标服务并唤醒目标进程/线程的

从上述代码中可以看到target_node来源于context->binder_context_mgr_node,这个对象是在servicemanager注册为上下文管理的时候进行赋值的,全局唯一;在内核代码中,binder_ioctl->binder_ioctl_write_read->binder_thread_write->binder_transaction。1. 在目标进程结构体binder_proc的wait_threads列表中获取第一个binder_thread。

2025-12-22 16:41:47 442

原创 ServiceManager注册进程

进入内核态后依旧进入binder_ioctl方法,并且进入binder_ioctl_write_read方法,其中write_size=0并且read_size>0,所以直接进入binder_thread_read方法进入等待状态。代码进入内核态的binder_ioctl方法中,并且调用binder_ioctl_set_ctx_mgr方法设置上下文管理,调用binder_new_node获取或创建新的binder_node并将其设置为上下文管理。进入binder_ioctl方法。

2025-12-16 16:41:27 189

原创 addHwVsyncTimestamp

将时间戳添加进mTimestamps集合中,作为计算最佳周期的采样样本,若采样样本满6条则开始计算,样本容量最多20条。

2025-07-22 16:03:21 283

原创 ZygoteServer接收客户端发送通知

在ZygoteInit.zygoteInit中做了初始化binder操作,并且根据读取到的数据取出对应的类,根据反射执行其中的main方法,本流程中的类为android.app.ActivityThread。此段代码重点:调用ZygoteConnection.processCommand读取数据,并处理。接下来代码调用ZygoteInit.zygoteInit。3、调用handleChildProc方法处理子进程。1、读取客户端Socket发送的数据。2、fork出一个子进程。

2025-04-15 17:21:10 417

原创 android App启动流程

【代码】android App启动流程。

2025-04-14 11:45:54 283

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除