android开发binder驱动初始化大致流程整理

流程总结:

  1. 首先就是Linux系统启动后,加载内核驱动,包括了编写好的Android系统Binder驱动程序,做过驱动开发的就很容易里面,驱动可以手动加载,也可以烧入到系统固件里跟着系统启动,binder驱动显然是事先烧入系统固件的。

  2. Binder驱动程序主要做的就是实现file_operations结构体几个方法,做驱动开发的主动工作其实就是这些,这里Binder驱动实现了binder_open打开驱动,binder_ioctl数据交互等待

  3. 上层应用调用open,然后通过系统调用,就调用到binder驱动的binder_open方法。调用ioctl方法,通过系统调用,就调用到binder驱动的binder_ioctl方法

  4. 我们使用的普通aidl服务端的时候,aidl服务端是要经过调用ActivityManager.getService.publishService(proxy)方法的,这个方法会进行跨进程操作,期间调用_data.writeStrongBinder(service)就会将服务端注册给binder驱动

  5. 那ActivityManager这个服务又是怎么注册给binder驱动的呢?那就是通过ServiceManager在系统启动的时候注册好的。

  6. 服务端注册一个服务给binder驱动的时候(ActivityManagerService进行一次ioctl跨进程操作,把Service注册给binder驱动,writeStrongBinder触发调用),驱动就是创建一个binder_node保持对应的信息,然后生成一个handle整数标记给上层服务(ActivityManagerService进行一次ioctl跨进程操作,读取handle等信息,data.readStrongBinder触发),上层服务创建一个BinderProxy持有这个handle,下次BinderProxy跨进程通信的时候带上这个handle(BinderProxy进行一次ioctl跨进程操作,writeTransactionData触发),驱动就是找到之前注册好的服务,

posted @ 2025-06-10 18:33  yongfengnice  阅读(51)  评论(0)    收藏  举报