uboot 启动分析
简介
接下来的几篇文章会简要介绍下uboot的启动流程,本文使用uboot 2021.01作为参考,cpu使用的risc-v架构,未来risc-v将变成一个不逊于arm的cpu框架。学习嵌入式linux,uboot也是一个绕不过去的知识点,这里抛砖引玉,做一下简要介绍,也算是自己的学习笔记。
U-boot和SPL
U-Boot 分为 uboot-spl 和 uboot 两个组成部分。SPL 是 Secondary Program Loader 的简称,第二阶段程序加载器。 对于嵌入式SOC(System On Chip)芯片来说,芯片内本身含有SRAM用于将闪存中的bootloader(uboot)加载到RAM来运行, 但由于片内RAM大小限制,加载不了完整的U-boot程序,所以需要在加载uboot之前加载一个精简版的SPL,SPL可用来初始化DDR等一些必须的外设,然后在把完整的Uboot加载到DDR里面运行。
概述启动流程
riscv目前uboot的启动代码位于arch/riscv/cpu/start.S内,链接脚本位于arch/riscv/cpu/u-boot.lds,可以查看源码发现程序从_start开始执行, 针对smp系统boot核心执行早期的初始化流程,大致流程为 board_init_f –> relocate_code –> board_init_r。 board_init_f定义在common/board_f.c,执行init_sequence_f数组中的函数,主要是初始化一些环境变量,对gd里面的变量赋值, board_init_r定义在common/board_r.c,执行init_sequence_f数组中的函数,主要是初始化一些驱动框架,初始化具体的硬件,到这里硬件都可以工作了,最后进入到run_main_loop –> main_loop,main_loop位于common/main.c。主要进行autoboot_command,cli_loop。 autoboot_command:倒计时结束后

本文介绍了U-boot的启动流程,特别是对于risc-v架构的系统。首先,U-boot由uboot-spl和uboot两部分组成,SPL用于初始化必要的外设并加载完整U-boot到内存。启动流程涉及_start、board_init_f、board_init_r等关键步骤,最终进入main_loop进行自动引导或命令行交互。后续文章将对此进行详细分析。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



