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,写入数据,设置状态,然后开启循环,没有任务时等待.

你可能感兴趣的:(Binder学习笔记02)