MSM LK启动流程初探

LK是什么
LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)little kernel 是小内核小操作系统。
Lk代码目录如下:
MSM LK启动流程初探

lk\arch\arm\crt0.S
在bootable/bootloader/lk/arch/arm/crt0.S文件中有下面代码,汇编代码跳转到kmain函数

MSM LK启动流程初探

\lk\kernel\main.c

MSM LK启动流程初探

MSM LK启动流程初探

thread_init_early:Initialize threading system
arch_early_init:arch初始化,关闭cache,mmu初始化等。
platform_early_init:平台早期初始化,clock、timer以及board初始化。
上面的thread_resume函数,新建线程入口函数 bootstrap2 用于后面boot 的工作,后续内核引导和启动都是在这个线程完成的。
接下来重点看这个线程的代码:

MSM LK启动流程初探

MSM LK启动流程初探

arch_init:
platform_init:
target_init:
apps_init:
在这个函数的最后调用apps_init函数最终启动aboot,主要是应用功能初始化,主要调用boot_init,启动kernel,加载boot/recovery镜像等。

MSM LK启动流程初探

MSM LK启动流程初探
下面重点看aboot_init函数,在这里引导内核启动。

MSM LK启动流程初探
MSM LK启动流程初探
MSM LK启动流程初探
MSM LK启动流程初探

boot_linux_from_mmc和boot_linux_from_flash启动内核,如果启动失败再进入fastboot模式
MSM LK启动流程初探
MSM LK启动流程初探