U-Boot会从boot分区中读取opensbi镜像、Linux镜像、Linux设备树镜像、(如果需要的话)initramfs,分别加载到DDR的特定位置,然后从openSBI开始运行。(强调“Linux”设备树是因为该设备树只是给openSBI和Linux使用,U-Boot及其SPL则使用另一份在编译时分别被链接进它们各自的二进制文件中的设备树。)...
(3)由u-boot-spl生成u-boot-spl-nodtb.bin Created with Raphaël 2.1.0u-boot-splobjcopy动作去掉符号信息表u-boot-spl-nodtb.bin 对应二、2(3)的实现 (4)由u-boot-spl-nodtb.bin生成u-boot-spl.bin,也就是spl的bin文件 Created with Raphaël 2.1.0u-boot-spl-nodtb.bin在不需要dtb的情况下,...
1. SBL(Secondary Bootloader): SBL是一个小型的引导加载程序,位于芯片的内部ROM中。它负责初始化硬件和一些基本的系统设置,然后通过某种方式加载更大的SPL或U-Boot。2. SPL(Secondary Program Loader): SPL是一个更大的引导加载程序,一般被存储在闪存(如NAND或eMMC)或SD卡等外部存储设...
enum boot_device get_boot_device(void) { volatile gd_t *pgd = gd; int ret; u32 boot; u16 boot_type; u8 boot_instance; enum boot_device boot_dev = SD1_BOOT; //调用rom地址对应的指针函数查询启动设备信息 //struct rom_api *g_rom_api = (struct rom_api *)0x980 ret = g_rom_api-...
u-boot的SPL源码流程分析 上次梳理了一下SPL的基本概念和代码总体思路,这次就针对代码跑的流程做个梳理。SPL中,入口在u-boot-spl.lds中 ENTRY(_start) SECTIONS { .text : { __start=.;*(.vectors) //进入中断向量表,对应的跳转到U-boot/arch/arm/lib/vectors.S文件处理...
该函数将U-Boot从当前的位置重定位到由board_init_f()函数计算得出的重定位目的地址处。 5)为调用board_init_r()函数创建最终的环境。 该环境包括BSS(已经初始化为0)、已初始化的非常量数据(已初始化为预期的值)和系统RAM中的栈。GD保存着被board_init_f()函数设定的值。 某些CPU还有一些关于存储的工作要...
1、uboot-spl入口说明 通过uboot-spl编译脚本project-X/u-boot/arch/arm/cpu/u-boot-spl.lds AI检测代码解析 ENTRY(_start) 1. 所以uboot-spl的代码入口函数是_start 对应于路径project-X/u-boot/arch/arm/lib/vector.S的_start,后续就是从这个函数开始分析。
从前面分析的u-boot-spl.lds链接文件可知,启动代码就是arch/arm/cpu/armv7/start.S。start.S主要做的事情就是初始化系统的各个方面。 从大的方面分,可以分成这几个部分: 1)设置CPU模式。 2)关闭看门狗。 3)关闭中断。 4)设置堆栈sp指针。 5)清除bss段。 6)异常中断处理。 /* * armboot - Startup Cod...
u-boot,spl-boot-order = &sdhci, &sdmmc0, &nandc0, &spi_nand, &spi_nor; }; 1. 2. 3. 4. 重新编译 u-boot 及 u-boot spl,使用 u-boot 下的./ --spl可以更新新的u-boot spl,这样启动信息中发现,优先从 MMC1 启动,不再打印 MMC2 的报错信息。
SPL(Secondary programloader)是uboot第⼀阶段执⾏的代码。主要负责搬移uboot第⼆阶段的代码到 系统内存(System Ram,也叫⽚外内存)中运⾏。SPL是由固化在芯⽚内部的ROM引导的。我们知道很多芯 ⽚⼚商固化的ROM⽀持从nandflash、SDCARD等外部介质启动。所谓启动,就是从这些外部介质中搬移⼀段 ...