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