多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

bootloader阶段 - Qcom

bootloader阶段 - Qcom bootloader阶段 - Qcom1、高通 (Qualcomm) 平台 UEFI 启动日志1.1 LinuxLoaderEntry方法加载1.2 UpdateCmdLine构建和整理传递给 Linux 内核的命令行参数2、fastboot命令bootable/bootloader/edk2/QcomModulePkg/bootable/bootloader/edk2/BaseTools/BuildEnvbootable/bootloader/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c1、高通 (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 End1.1 LinuxLoaderEntry方法加载BootStatsSetInitTimeStamp ()初始化启动时间统计的共享内存区域InitThreadUnsafeStack ()StackGuardChkSetup ()BootStatsSetTimeStamp (BS_BL_START)DeviceInfoInit ()读取持久化的设备状态如果数据无效Magic 不匹配则根据当前的安全策略重置并写入默认值。这里主要有引导加载程序处于锁定状态DevInfo.is_unlocked是否解锁关键分区DevInfo.is_unlock_criticalQcomModulePkg/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.cfastboot命令bootable/bootloader/edk2/QcomModulePkg/Library/FastbootLib/FastbootCmds.c例如高通添加fastboot oem device-info例如AOSPfastboot flashing unlockfastboot flashing lockfastboot flashing unlock_criticalfastboot flashing lock_criticalstructFastbootCmdDesccmd_list[]
返回列表