目录
一. UFS启动概述
随着Android系统的发展,对存储的性能要求越来越高,UFS在慢慢替代EMMC,扮演着越来越重要的角色。截至目前EMMC只更新到EMMC5.1,就停止更新了,由于EMMC并行化传输的原因,提高频率会对数据稳定性有影响,所以限制了EMMC的发展。后面出现了UFS,解决了这个问题,UFS是使用串行传输,且是差分信号,提高频率后也能保证数据稳定性,目前UFS更新到UFS3.1.
当然说到Android,就必须要看Android启动,因为UFS是存储Android系统镜像的,所以Android启动也可以称为UFS启动,UFS启动主要分为下面几个阶段:
开机 --> RomCode --> Pre UEFI --> UEFI --> Kernel -->Android
流程图如下:
二. UFS启动分析
1. 开机阶段
Android开机一般是按键,如果是手机开机就是按下手机边上的开机键(Power 键盘),如果是开发板平台一般是按下Power 键盘开机。
2 .Romcode阶段
开机后,会进入RomCode阶段,Romcode阶段代码是固化在芯片内部ROM的一段程序,一般是芯片设计厂商提供, 手机厂商不能修改此程序。
按下开机键后,会判断如果是按下开机键后,芯片就加载Romcode到内部RAM执行,主要是初始化UFS,将Boot Lun的启动代码加载到内部RAM运行,并跳转到Pre UEFI阶段运行。
3 .Pre UEFI阶段
Pre UEFI阶段是Boot Lun启动代码运行的阶段,此阶段主要是初始化DDR,将UEFI加载DDR上运行。此阶段的代码一般也是芯片设计公司(比如QCOM/MTK等手机芯片厂商)提供的,方案厂商(小米等手机整机厂商)直接使用即可。
4 .UEFI阶段
UEFI阶段是一个小型系统,此阶段主要是初始化UFS, 将UFS切换到高速,初始化UEFI Driver(比如USB/Display/GPIO等),将Kernel加载到内存后,跳转到Kernel阶段运行。
接下来我们就看看UEFI阶段关于UFS启动做的事情:
(1)UFS初始化, 进行ATF(Arm Trust Firmware)启动,也成为安全启动
UFS相关操作: Link up - - > nop out - - > set fdeviceInit Flag - - >
read fDeviceInit Flag - - >test unit ready - - > read capacity10
(2)ATF启动完成后,加载UEFI真正程序,进行UFS初始化, 初始化Fastboot, 加载Kernel
UFS相关操作: Link up - - > nop out - - > set fdeviceInit Flag - - >
read fDeviceInit Flag - - >read device descriptor - - > read config descriptor
scsi inquiry device - - > test unit ready - - > read capacity10
5. Kernel阶段
Kernel阶段是内核阶段,此阶段是初始化Driver,FS,.进程调度,内存管理等,将Android加载到内存,就跳转到Android阶段运行。
6. Android阶段
Android阶段是启动的最后一个阶段,此阶段是加载Framewark,启动上层应用,进入UI界面。
参考文章: