fwk
文章平均质量分 64
GalaxyHon
不停思考,追求卓越
展开
-
Binder(四)以AMS为例学习binder的请求过程
ServiceManager服务启动后,通过BINDER_SET_CONTEXT_MGR命令将自己设置为ContextManager,这样后面启动的服务就可以通过ServiceManager来管理,每当Client需要使用Server的功能时,首先通过ServiceManager获取这个Server服务,然后再调用Server的相关功能。系统启动时,SystemServer.java中的run()方法会启动系统的一些服务,会依次调用下面三个方法。原创 2024-07-18 17:48:23 · 164 阅读 · 0 评论 -
Binder框架(二) ServiceManager初始化
开机由init进程解析init.rc文件启动servicemanager.rc。版本:BINDER_VERSION, 设置最大线程 BINDER_SET_MAX_THREADS 等等。ioctl()通过BINDER_SET_CONTEXT_MGR命令,将SM设置到binder驱动中。1.2 通过mmap映射设备的内存空间到ServiceManager进程中。1.3 设置ServiceManager为context manager。创建manager,并且把自己设置到SM中。原创 2024-07-15 15:46:57 · 323 阅读 · 0 评论 -
Binder框架(二) binder初始化
//linux标准设备之一,也就是说binder实际上是一种miscdevice。//设备操作方法集合 --->下面的binder_fops。const struct file_operations binder_fops = { //与用户控件操作binder有关的三个成员。//当前设备的devices结构。//次设备号,主设备号已经敲定是10了,后面我们跟进代码看一下。(代码位置:kernel/drivers/android/binder.c)原创 2024-07-15 14:35:28 · 252 阅读 · 0 评论 -
Binder框架(一)基础概念
这样,Android系统可以通过添加一个内核模块运行在内核空间,用户进程之间的通过这个模块作为桥梁,就可以完成通信了。所以,在 Android 系统中,这个运行在内核空间的,负责各个用户进程通过 Binder 通信的内核模块叫做 Binder 驱动。进程隔离机制的主要实现方式是使用虚拟地址空间,两个进程各自的虚拟地址不同,就实现了内核空间和用户空间的隔离。进程是一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间。为了系统的安全性考虑,内核空间可以执行CPU的任何指令,普通空间会受限。原创 2024-07-12 18:28:39 · 267 阅读 · 0 评论