运行流程:U-Boot SPL运行在片上SRAM中,负责初始化DDR,然后从第一个(裸)分区中加载U-Boot镜像到DDR。U-Boot会从boot分区中读取opensbi镜像、Linux镜像、Linux设备树镜像、(如果需要的话)initramfs,分别加载到DDR的特定位置,然后从openSBI开始运行。(强调“Linux”设备树是因为该设备树只是给openSBI和Linux使用,U-Boot及...
一、uboot-spl编译和生成文件 spl的编译是编译uboot的一部分,和uboot.bin走的是两条编译流程,这个要重点注意。 正常来说,会先编译主体uboot,也就是uboot.bin.再编译uboot-spl,也就是uboot-spl.bin,虽然编译命令是一起的,但是编译流程是分开的。 1、编译方法 在project X项目中,所有镜像,包括uboot、kernel...
所以这个第一阶段的引导加载程序是U-Boot SPL ; 和第二阶段的引导加载程序是常规的U-Boot(或适当的U-Boot)。需要说明的是:SPL代表二级程序加载器。这意味着ROM代码是加载(和执行)其他程序的第一件事,而SPL是加载(和执行)其他程序的第二件事。所以通常启动顺序是下一个:ROM code - > SPL - > u-boot - ...
1、board_boot_order--读取支持的启动设备 2、boot_from_devices--读取uboot镜像 3、ATF跳转 4、optee跳转入口 5、最终跳转到uboot启动 6、总结 本账号总目录:求密勒:NXP i.MX8M系列文章总目录 求密勒:NXP i.MX8M secure boot流程 求密勒:Uboot启动分析--SPL跳转过程! 求密勒:Uboot链接脚本分析 求密勒:...
SPL是uboot第一阶段执行的代码。 主要负责搬移uboot第二阶段的代码到内存中运行。 SPL是由固化在芯片内部的ROM引导的。 我们知道很多芯片厂商固化的ROM支持从nandflash, SDCARD等外部介质启动。
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,后续就是从这个函数开始分析。
最开始编译uboot时,使用如下命令: make O=am3517_evm CROSS_COMPILE=arm-arago-linux-gnueabi- am3517_evm 此时生成的文件被称为uboot第二阶段的代码,本节讲解如何编译uboot第一阶段(SPL)。 先来理解SOC的启动流程,针对嵌入式设备,一般上电时刻启动分为三个阶段: ...
u/armv7/start.S>中的save_boot_params.其不做任何事情,直接返回。116~138: 看注释即可明白。141: 因为SPL主要是对SoC进行初始化,所以不会定义CONfig_SKIP_LOWLEVE_INIT, 即142,143行得以执行。142: cpu_init_cpu15, 主要作用invalidate L1 I/D cache, disable MMU. 检查是否需要workaround....
从前面分析的u-boot-spl.lds链接文件可知,启动代码就是arch/arm/cpu/armv7/start.S。start.S主要做的事情就是初始化系统的各个方面。 从大的方面分,可以分成这几个部分: 1)设置CPU模式。 2)关闭看门狗。 3)关闭中断。 4)设置堆栈sp指针。 5)清除bss段。 6)异常中断处理。 /* * armboot - Startup Cod...
下面的步骤只有在non-SPL下才可用。 (这里我觉得其实对于我们实验室使用了安全启动的系统是不具备SPL的。因为加载uboot的东西是其他的image) 3)创建一个中间的环境: 栈和GD都在系统RAM中由board_init_f()函数分配,但是BSS和已初始化的非常量数据仍然不可用。 4)调用relocate_code()。 该函数将U-Boot从当前的...