atf

mtk-系统启动流程

北慕城南 提交于 2021-02-17 02:41:45
1.启动流程一览,图片中不考虑ATF(arm trust firmware),加上ATF,则preloader和LK之间插上个ATF 2.启动流程分析 1 .上电后启动ROM中的代码 从reset vector开始启动 初始化stack空间 找到并初始化启动设备(sd/nand/emmc) 加载preloader到SRAM中,并跳转到preloader中执行代码 2 .preloader执行 创建c运行环境 必要的硬件初始化 加载ATF(安全相关) 加载并跳转到lk执行 3 .lk执行 获取preloader中传递的参数 使能mmu 初始化必要的硬件设备 设置启动模式 加载并跳转到kernel执行 4 .kernel执行 函数执行入口stext start kernel boot param kthread kernel_init init.rc   来源: oschina 链接: https://my.oschina.net/u/4264746/blog/3960763

mtk-preloader代码分析

末鹿安然 提交于 2021-02-17 02:15:43
这里简单介绍了preloader的启动流程,ATF的实现部分可参考https://blog.csdn.net/chenying126/article/details/78638944 1.链接器脚本link_descriptor.ld定义了preloader的入口函数 OUTPUT_ARCH(arm) ENTRY(_start) 2.init.S定义了_start,并跳转到main执行 .globl _start _start: b resethandler /* * 设置svc32模式 * 禁止中断fiq&irq * clear BSS * setup stack * 跳转main执行 */ ...... entry : LDR r0, = bldr_args_addr   B main 3.main函数,截取了部分代码 void main(u32 * arg) { /* get the bldr argument */ p_bldr_param = & bldr_param; //_start函数中将bldr_args_addr作为参数传给main,这里为0 memcpy(( void *) p_bldr_param,( void *) *arg, sizeof (bl_param_t)); //必要的硬件初始化 mtk_uart_init(UART_SRC_CLK_FRQ,