温馨提示:这篇文章已超过473天没有更新,请注意相关的内容是否还可用!
摘要:Android系统采用分区存储设计,主要包括系统分区、用户数据分区、缓存分区和其他分区。系统分区存储操作系统、应用程序和核心组件,用户数据分区用于存储用户信息和应用程序数据,缓存分区用于临时存储应用程序缓存。其他分区可能包括恢复分区、固件分区等,用于系统恢复和固件更新等功能。这种分区设计有助于提高系统的稳定性和性能。
由于Android系统采用Linux架构,因此Android的系统分区可以类比同样采用Linux架构的操作系统(如Windows)。
Android系统分区分类
现在常见的Android分区方式共有三种,在不同的Android系统版本上会采用不同的分区方式。
1、传统分区(non-A/B分区),主要见于Android10及以下的手机。
2、A/B分区,是两种更常用机型的过渡阶段,部分机型会存在。
3、virtual A/B分区(VA/B)。
我们详细介绍一下各个分区:
modem分区主要是手机短信的通讯模块。
bootloader分区主要用于线刷。
recovery分区用于普通刷机。
boot分区用于启动,由kernel和ramdisk构成。
system分区包含操作系统除kernel和ramdisk之外的部分。
data分区用户分区,用于存储用户数据如联系人、短信等。
cache分区存储使用过程中的缓存数据。
vendor分区包含厂商私有的可执行程序、库、系统服务和app等。
双清是指对data分区和cache分区进行清理。
boot分区:由kernel和ramdisk构成,存放BootLoader程序,负责开机启动和引导,其下级的kernel分区负责管理设备硬件调度、系统进程、设备内存等,维持操作系统的稳定性,而ramdisk分区存放一些kernel分区运行必须的驱动,让内核率先运行虚拟文件系统,再通过ramdisk分区中的驱动,运行真正的文件系统,当boot分区损坏时,会导致BootLoader程序无法启动,手机卡在开机第一屏,当我们修改CPU调度或者给GPU超频时,也需要修改boot分区的文件。
system分区:包含整个操作系统除kernel和ramdisk之外的其他部分,包括Android UI和预装的APP,修改system分区中的文件可以实现系统UI的更换或系统的升级。
recovery分区:相当于一个备用的boot分区,利用它我们可以使设备启动到恢复模式窗口进行高级恢复和维护操作。
除了上述分区,还有misc分区,它包含了各种以开关量形式保存的系统配置,如CID(Carrier or Region ID)、USB配置和某些硬件配置等,这是一个重要的分区,破坏或丢失数据可能导致设备某些功能无法正常使用。
Android系统的启动
启动概述:Loader > Kernel > Native > Framework > Application,细分过程包括BootRom、Bootloader、Kernel、Init、Zygote、SystemServer、Launcher等,Loader层包括Boot Rom和Boot Loader;Kernel层主要是Android内核层;Native层包括init进程、用户空间的守护进程、HAL层、开机动画等;Framework层主要是AMS和PMS等Service的初始化;Application层主要指SystemUI、Launcher的启动。
bootloader分区分成两个部分:primary bootloader和secondary stage bootloader,Primary bootloader主要执行硬件检测,确保硬件正常工作后将secondary stage bootloader拷贝到内存(RAM)开始执行,Secondary stage bootloader进行硬件初始化工作,获取内存大小信息等,然后根据用户按键进入某种启动模式。
系统OTA升级流程
非A/B升级流程包括以下几个步骤:Android系统接收OTA推送并下载至cache分区;下载完成后向misc分区写入指令以表明下次启动进入recovery模式进行升级;重启手机后依次进入bootloader和recovery;在recovery中读取OTA包并升级系统各分区,如果recovery自身也需要升级,会写入recovery-from-boot.p文件,新版本Android系统启动后,会检查并升级recovery。
A/B升级是一种新的分区结构,将系统分区分成A和B两个槽(slot),这种结构能够实现无缝升级,即在升级过程中用户不会感受到明显的中断或重启,当用户正在运行A槽时,如果收到OTA推送,系统会在后台一边下载OTA数据,一边对B槽进行升级,升级完成后重启手机将自动切换到B槽的新版本系统,这种结构还能降低OTA失败的风险,因为即使升级失败也不会影响用户当前运行的系统,由于A/B分区结构可以直接写入待升级的槽而无需预留额外空间,因此不再需要在cache或userdata分区预留足够空间。
还没有评论,来说两句吧...