|
|
这样有机会深入了解开机的具体过程。
- 首先,百度了一下先关资料(如下):
其实这些之前也是有所了解的,不过通过这次机会可以重新认识一下。
####详解
Android系统在启动时首先会启动Linux基础系统,然后引导加载Linux Kernel并启动初始化进程(Init),在第一个进程中会读取init.rc。在这个文件中会启动servicemanager,zygote……等基本的服务。 在init.c@system/core/init。会调用parse_config_file(init.rc)解析脚本文件init.rc
init.rc一般会在devices目录下
包括系统的初始化创建文件夹,设置文件权限,初始话启动服务等都在init.rc中配置
例如以下截取的部分片段:
|
|
|
|
我这里看的是mtk中的init.rc文件。如下不同的模块的初始化可以放在相应的rc文件中
(在frameworks\base\core\jni文件夹下存在com_android_internel_os_ZygoteInit.cpp文件。在此文件中通过register_com_android_internel_os_ZygoteInit函数调用AndroidRuntime::registerNativeMethods函数。)
最终会调用到frameworks/base/core/jni/AndroidRuntime.cpp的start()方法。事实上,Android API与本地方法的注册关联就是在AndroidRuntime.cpp模块里完成的。