Binder学习笔记02

这篇文章记录下 ServiceManager的注册

1.注册,ServiceManager.c中的main方法


首先看binder_open方法


这里首先binder_open会调用驱动层的binder_open方法,打开binder驱动,保存当前进程一些信息.然后会调用mmap也是会调用驱动层的binder_mmap方法,映射一块共享内存,大小为128k


这里会调用驱动层的binder_ioctl方法,命令为BINDER_SET_CONTEXT_MGR


然后binder_new_node


这里就设置SM为大管家完成,再回到main方法,看看binder_loop方法


然后binder_write方法,readbuf携带命令BC_ENTER_LOOPER


这里又会调用驱动层binder_ioctl方法,有写数据不为空,命令为BINDER_WRITE_READ
因为写数据不为空,则会调用write方法,且前面携带了命令头为BC_ENTER_LOOPER,则
到这里就完了,然后在回到前面loop方法中


写完数据后,然后进入for循环,此时读有数据,继续调用驱动层读写方法


进入读方法


这里因为还没有任务,所以为true
因为现在todo队列为空,则会调用wait_event_freezable_exclusive方法进行等待,到这里就完了

ServiceManager的注册,大致干了3件事

1,打开binder驱动,内存映射

2,设置ServiceManager为大管家(守护进程)

3,写入数据,设置状态,然后开启循环,没有任务时等待.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。