Android 启动过程详解

 
      
1
 
      
今天系统遇到一个问题,问题描述是这样的:开机或者是重启平板的时候经常会卡在OS动画进不去系统,需要强制关机或者是按复位孔在重新开机才能进系统。

这样有机会深入了解开机的具体过程。

其实这些之前也是有所了解的,不过通过这次机会可以重新认识一下。

####详解
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中配置
例如以下截取的部分片段:

 
      
1
2
3
 
      
#GPS
mkdir /data/gps_mnl 0771 gps system
mkdir /data/misc/gps 0770 gps system
 
      
1
2
3
 
      
#bootanation 启动
on property:init.svc.bootanim=running
write /proc/bootprof "BOOT_Animation:START"
 
      
1
2
3
4
5
6
7
 
      
#wlan0初始话
service dhcpcd_wlan0 /system/bin/dhcpcd -BK -dd
class main
user root
group net_admin net_raw
disabled
oneshot

我这里看的是mtk中的init.rc文件。如下不同的模块的初始化可以放在相应的rc文件中

 
      
1
2
3
4
5
6
7
8
9
10
11
 
      
import init.project.rc
import /FWUpgradeInit.rc
import init.xlog.rc
import init.aee.rc
import init.fon.rc
import init.volte.rc
import init.mal.rc
import init.epdg.rc
import init.trustonic.rc
import init.common_svc.rc
import init.mt8173.usb.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模块里完成的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值