Android系统正常启动流程以及异常问题处理流程

Android 系统从开机到正常启动的流程可以分为以下几个阶段:

加电自检(Power-On Self-Test,POST):当用户按下设备的电源键时,设备会进行加电自检,检查硬件设备是否正常。如果硬件设备正常,设备将加载启动程序并开始启动 Android 系统。

引导加载程序(Bootloader):启动程序是一个小型的程序,其主要任务是加载引导加载程序(bootloader)。引导加载程序是设备上的第一个软件程序,它负责初始化设备硬件,并加载 Android 系统内核。在加载内核之前,引导加载程序会对内存进行测试,并初始化必要的硬件设备,如存储器、显示屏、触摸屏等。

内核启动:当引导加载程序完成初始化后,它会加载 Android 系统内核。内核是操作系统的核心部分,它管理设备的硬件和软件资源,并提供与硬件交互的接口。在内核启动时,它会检查硬件设备是否支持 Android 系统,并加载相应的驱动程序。同时,内核会启动 init 进程,init 进程是 Android 系统中的第一个用户级进程,它负责初始化系统服务和启动其他进程。

设备初始化:在内核启动后,Android 系统会进行一系列的初始化操作,包括加载驱动程序、初始化文件系统、创建系统目录和文件等。此外,Android 系统还会启动 Zygote 进程,Zygote 进程是一个特殊的进程,它用于预加载常用的 Java 类和库,以加速应用程序的启动。

系统启动:当设备完成初始化后,Android 系统会启动系统服务和用户界面。系统服务包括各种管理和控制设备硬件和软件资源的服务,如电源管理、WIFI 管理、通信管理等。用户界面则包括 Launcher、系统设置、应用程序、通知等。

应用程序启动:最后,Android 系统会启动应用程序。当用户启动应用程序时,系统会加载应用程序代码和资源,并创建应用程序的进程。应用程序进程运行在沙箱环境中,与其他进程相互隔离,保证应用程序的安全性和稳定性。

总之,Android 系统从开机到正常启动的流程可以分为加电自检、引导加载程序、内核启动、设备初始化、系统启动和应用程序启动等阶段,每个阶段都有其特定的任务和功能,共同构成了 Android 系统的启动过程。

Android系统异常问题处理
1. addr2line工具

作用:把native的出错堆栈信息对应到代码的行数
通过find . -name * addr2line来搜索这个工具
查看出错的堆栈信息,xx.so库出问题,然后分析这个库的堆栈信息
根据出错的二进制地址和出错的库名就可以使用addr2line找出错误的行数
命令:addr2line  /xx.so  0015b6d5然后回车
然后继续看错误堆栈

2. Android死机
观察死机之前的log信息,一般都会有堆栈信息打印,根据这些堆栈信息找到哪个函数或者方法引起
一般先检查是不是内核异常死机,包括CPU和内存是否用完
再看看getevent是否上报,如果不上报,找出不上报原因(获取 input 输入事件,比如获取按键上报信息、获取触摸屏上报信息等)
或者看看inputDispatch是否出现异常导致无法分发事件
如果event没有问题,去分析surfacefinger和LCD驱动,看看是不是界面没有刷新导致的死机问题

3. android系统重启

分为三类,分别是内核重启,modem重启,framework重启
怎么判断是哪类?
3.1 通过重启时间来判断,如果是内核重启和modem重启,那么重启的时间肯定比上层重启的时间长
3.2 看看重启是否有震动,如果有,就是内核重启或者modem重启,反之是framework重启
3.3 通过ps进程号来判断,如果是framework重启,zygote、servicemanager等的进程号比较大,正常来说zygote的进程号是500左右,如果出现问题的时候,进程号是1000多,framework就得重启
内核重启的标志:sysreboot reason:software EXCE AP,导致它的原因主要是kernel代码出现异常和硬件狗复位
对应kernel代码出现异常,主要是指kernel主动panic或者被动panic,这种情况一般是出现了踩内存、非法指针等错误
medem重启的log:sysreboot reason:software EXCE AP和kernel差不多

framework的重启原因:
1. native crash引起的重启
一般会在tombstone目录下面找到相关的log
2. watchdog杀死systemserver系统进程引起的重启
需要分析anr里面的trace.txt文件,这类问题一般是死锁,首先是搜索system_server,如果没有搜索到,表示这个anr已经被覆盖,这时候去dropbox找到对应时间的文件,到搜索到system_server相关信息后,log会显示阻塞在什么地方,然后跟着它的阻塞的路径,一直追,知道找到真正触发阻塞的原因,这种异常重点关注时间点,一般在这个时间点之前一定有异常出现
3. systemserver进程出现了其他exception引起的重启
比较容易比如空指针等

4. 系统启动异常

与framework相关的有三种
1 按电源键,系统无法启动,没有任何反应
一般是硬件故障,需要硬件帮忙
2 按电源键,有反应,但是一直停在开机第一个静态界面,即kernel开机界面
一般是内核问题,需要kernel分析
3 按电源键,有反应,一直停在开机动画界面。即一直停在bootanimation
一般是开机时各种异常所致
可以通过如下步骤定位

1 确定是否进入了zygote进程
log: START com.android.internal.os.ZygoteInit uid
2 如果进入了zygote进程,确定是否进入了systemserver进程
log: Entered the android system server!
3 如果也进入了systemserver进程,再确定进程里的ams服务、wms服务等是否出现问题
adb shell dumpsys activity
adb shell dumpsys window


android系统开机,一直停在开机第一个静态界面,如何进行kernel问题分析

当 Android 系统无法正常启动并且停留在开机第一个静态界面时,可能是由于内核(Kernel)出现了问题导致的。下面是一些可能的解决方案和 Kernel 问题分析方法:

检查内核启动日志:当 Android 系统启动时,内核会生成一份启动日志(Kernel Log),其中包含了内核启动过程中的各种信息和错误消息。可以通过以下命令查看内核启动日志:

adb shell dmesg

通过查看内核启动日志,可以了解系统启动过程中是否出现了错误或异常,以及导致错误或异常的原因。

检查硬件问题:Kernel 问题可能是由于硬件问题导致的,例如存储器故障、电源供应问题等。可以通过以下方法检查硬件问题:

使用 Android 系统自带的硬件诊断工具;
检查设备是否有未修复的硬件问题,例如裂纹、水患等;
将设备连接到另一台计算机并尝试启动,以查看问题是否是由于设备硬件或软件的兼容性问题导致的。
恢复出厂设置:如果无法找到内核问题的原因,可以尝试恢复出厂设置以解决问题。这将抹掉设备上的所有数据,并将系统恢复到出厂设置。恢复出厂设置可能会解决由于软件问题导致的内核问题。

刷入新的系统固件:如果上述方法无法解决问题,可以尝试刷入新的系统固件以解决内核问题。在刷入新的系统固件之前,请确保备份了设备上的所有数据,并确保刷入的固件与设备型号和硬件兼容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值