bootloader阶段 - Qcom
bootloader阶段 - Qcom
bootable/bootloader/edk2/QcomModulePkg/
bootable/bootloader/edk2/BaseTools/BuildEnv
bootable/bootloader/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c
1、高通 (Qualcomm) 平台 UEFI 启动日志
bootable/bootloader/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c
进入Linux加载器应用程序入口点LinuxLoaderEntry,进入了OS Loader(操作系统加载器) 阶段,准备加载 Android 内核
UEFI Start [ 1030]
- 0x05FC01000 [ 1035] Sec.efi
//......
UEFI Total : 1454 ms
POST Time [ 2484] OS Loader
//......
Shutting Down UEFI Boot Services: 3980 ms
//......
Exit EBS [ 4292] UEFI End
1.1 LinuxLoaderEntry方法加载
BootStatsSetInitTimeStamp ()初始化启动时间统计的共享内存区域InitThreadUnsafeStack ()StackGuardChkSetup ()BootStatsSetTimeStamp (BS_BL_START)DeviceInfoInit ()读取持久化的设备状态,如果数据无效(Magic 不匹配),则根据当前的安全策略重置并写入默认值。这里主要有引导加载程序处于锁定状态DevInfo.is_unlocked,是否解锁关键分区DevInfo.is_unlock_critical;QcomModulePkg/Library/BootLib/DeviceInfo.cEnumeratePartitions ()UpdatePartitionEntries ()GetKeyPress (&KeyPressed)SetDefaultAudioFw ()PrintCpuFrequency ()GetHOMEKeyValue()GetRebootReason (&BootReason)读取重启原因,会被 BootLoader 用来决定下一步是正常启动 Android,还是进入 Fastboot/Recovery 模式RecoveryInit (&BootIntoRecovery)BoardInit ()是高通平台 UEFI 代码中负责板级硬件初始化的关键函数。它的核心职责是配置当前开发板特有的硬件参数LoadImageAndAuth (&Info, FALSE, SetRotAndBootState)BootLinux (&Info)将控制权从 UEFI 固件移交给 Linux 内核
1.2 UpdateCmdLine构建和整理传递给 Linux 内核的命令行参数
bootable/bootloader/edk2/QcomModulePkg/Library/BootLib/UpdateCmdLine.c 构建和整理传递给 Linux 内核的命令行参数
/proc/cmdline其中androidboot前缀参数转化为ro.boot*系统属性
2、fastboot命令
fastboot界面:bootable/bootloader/edk2/QcomModulePkg/Library/BootLib/FastbootMenu.c
fastboot命令:bootable/bootloader/edk2/QcomModulePkg/Library/FastbootLib/FastbootCmds.c
例如高通添加:fastboot oem device-info
例如AOSP:
fastboot flashing unlock
fastboot flashing lock
fastboot flashing unlock_critical
fastboot flashing lock_critical
struct FastbootCmdDesc cmd_list[]
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)