目录:
bootanimation: frameworks/base/cmds/bootanimation/
surfaceflinger : frameworks/native/services/surfaceflinger/
init : system/core/init/
文件:
main_surfaceflinger.cpp : frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp
内核起来后会启动第一个进程,即init进程。
init进程会根据配置bootanim.rc还有surfaceflinger.rc(以前都包含在init.rc中)启动surfaceflinger进程。由于bootanim.rc文件中包含 disabled,所以现在并不会启动。
bootanim.rc文件:
surfaceflinger.rc文件:
后面会调用
接下来打开同目录下的SurfaceFlinger.cpp,看他的init()执行了什么。
可以看到,执行了一个方法StartPropertyService(&property_fd); 。对应的文件是property_service.cpp(与init.cpp同目录)。还有一段while (true) {},里面会在条件为true的情况下不断执行 HandleControlMessages();接下来我们看看property_service.cpp里面执行了什么。
在里面搜索方法 StartPropertyService。发现里面执行了
接下来在里面搜索方法 StartSendingMessages。发现里面只是进行了数据赋值。
我们接下来在里面搜索PropertyServiceThread。发现它是一个方法。
我们接下来在里面搜索SendControlMessage方法,发现里面和msg相关的只有QueueControlMessage方法。
我们接下来在里面搜索QueueControlMessage方法,发现没有搜到,于是在init.cpp里面搜索,QueueControlMessage方法。
可以发现调用了pending_control_messages的push方法。在里面搜索pending_control_messages得知它是一个队列。
上面我们说到在条件为true的情况下会不断执行 HandleControlMessages()。
所以最后会执行 DoControlStart方法, function(service) 这里的function就是 DoControlStart方法然后启动服务。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/12811.html