重庆生活网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 生活 重庆
查看: 674|回复: 1

芯灵思开发板安卓底層開发学习經驗第八期

[复制链接]
发表于 2020-3-25 21:02:40 | 显示全部楼层 |阅读模式
    首先我们得先给我们的设备通电(Powon),上完电cpu内部会有一个bo第一种方式:当我们给我们的设备上电,启动到uboot模式时,首先会有一个第二种方式:如果我们没有设置recovery命令,那么我们的uboot再第三种方式是:我们系统正常启动之后,我们下载了一个新的安装包,然后我们调Recovery模式主要完成两个任务,一是可以清楚我们的一些数据,第二个Recover分区他有自己的一套文件系统,他和我们的正常文件系统是有区别我们升级成功之后,我们的系统就会重启,重启之后如果没有检查到我们的按键消




从这章开始,我们来分析Android的一个启动过程的分析
我们首先来看一下Android的整個系统的启动分析,

   


首先我們得先给我们的设备通电(Powon),上完電cpu內部会有一个bootloader,这個是在生產的时候就已经燒录好了,它会根据我们的硬件GPIO的一些设置来判断我们的系统是在U盘,SD卡,或者是在内置Flash中啟動,然后去引导我们的uboot,我们的uboot主要是初始化一些外设,比如我们的内存、Flash,以及我们CPU的一些IO,并且通过串口给我们提供修改启动参数的一個启動过程,并且根据我们所配置的参数去引导内核启动,当我们的内核启動之后,他会首先初始化一些外设,加载驱動,并且根据我們uboot所配置的参數来启动我们的系统,当我们的Android系統被起来之后,他也会进行一系列的初始化過程,他会首先掛在我们的分区,并且创建Android一些相关的目录,创建完成之后,他会动态加载一些必要的驅动,然后就会根据我们的啟動脚本,來啟动我们的系统服务,如:mediaserver、servicemanage等,或者我们自己新加的一些服务就会在这里進行啟动,启动完之后,他還會做一些环境变量的配置,这些配置会在系统中使用,最后我们將所有的服务系統启动之后,我們的啟动服务就会守护整个系统,如果中间有一个服務中检出错了,我们这个守护进程就会重新創建这个服务。現在Android设备的啟动时间都是比較长的,所以我们想要加快Android系统的启动過程主要是从uboot、kernel、Android这三塊来做调整
我們主要讲的是Android这一層面的启动过程,并且根据我们的理解來做一些优化。
下面我们来看一下Android启动过程分析的主要内容

   


接下來我们来学習一下Android的启動模式,Android的启动模式共包括两种模式:
一种是recovery升级模式:启动recovery分区內核和文件
另一种是正常啟動模式:引导内核和啟動Android系统
那么我们來看一下我們的uboot在啟东时,如何區分是recovery升级模式還是正常启动模式呢,那么我們再來看一下Android的启动过程

   


第一种方式:当我们給我們的设备上電,启動到uboot模式時,首先会有一个输入模式,如果我们触发了输入模式,并且输入了recovery命令,那么我們重启uboot时,uboot就會检查到我們的recovery命令,這是uboot就会引導我们的recovery分区,就会進入recovery升级模式。
第二种方式:如果我们没有设置recovery命令,那么我们的uboot再启動过程中也会等待我们的按键输入,等待一定的时間,比如我们等待我们的power健+音量加或者音量减健,如果说,在等待的這一段时间里,恰好捕获到一对組合按键,这時候我们的uboot也会直接引导我们的recovery分區,从而进入recovery升級模式。
第三种方式是:我们系统正常启动之后,我们下載了一个新的安裝包,然后我们调用reboot命令来进行recovery升级,这时候我们重啟之后就会直接進入到recovery模式,默认去安装我们下载的安装包,如果我们重啟時设置了安装包的路径,那么他就会使用这個安裝包去进行升级,如果說这三条都不滿足的话,那么我们的uboot就會直接启动我們的boot images来正常啟动Android系統。
Recovery模式主要完成兩个任务,一是可以清楚我们的一些数据,第二個是完成系统的升级,而在系统升级时也会遇到两种模式,一个是差量包升级,第二個是全包升級,當我们使用Android手机时遇到过這种情况,我们下載一个升级包,有的升级包只有几十兆,但是有的升級包卻是上百兆,那么几十兆的就是差量包升級的一个过程。
Recover分区他有自己的一套文件系统,他和我们的正常文件系统是有区别的,他比较小,而且啟动的时候也沒有啟动太多的服务,他是一套簡单的文件系统,在升级过程中他会把我们的system分区挂在起来,然后使用差量升级包和我们的system下的文件进行一个比對,然后把这些差量数据打到system文件系统中,从而完成我们一個差量包的升级。而我们的全包升级呢,就是把整個包的内容全部替换掉我们system分區下的内容,完成一次全包升级,在升级过程中我们最好不要断電,断电会导致升级失败,會把我们的系统寫坏,如果在我们的升级過程中,因为我们下載的升级包不對,或者说当前的差分包和我们的系统不匹配,那么这时我们的升级就會失败,在失败之后,我们會在屏幕上看到失敗的信息,這時我们可以重启系统,启动之后在cache分区下可以看到升级過程中的所有log,而开發人员就可以根据我们的log信息分析一下问题到底出在哪里。
我们升級成功之后,我們的系統就会重启,重启之后如果沒有检查到我们的按键消息,那么他就會正常的啟动安卓,也就是在正常的升级之后,他会把我们的recovery命令擦除掉,从而我們不會再检查到recovery的一些命令,这就是Android的两种模式,recovery模式和正常启動模式













回复

使用道具 举报

发表于 2020-3-25 21:02:49 | 显示全部楼层
受教了,謝楼主
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|重庆生活网

GMT+8, 2021-9-27 14:16 , Processed in 0.187200 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表