board_boot_order被定义为一个弱函数,可以被厂商覆盖,因此我们这里会使用arch/arm/mach-imx/imx8/cpu.c中定义的board_boot_order函数。 voidboard_boot_order(u32*spl_boot_list) { spl_boot_list[0]=spl_boot_device(); if(spl_boot_list[0]==BOOT_DEVICE_SPI) { /* Check whether we own the fle...
uboot分为uboot-spl和uboot两个组成部分。SPL是Secondary Program Loader的简称,第二阶段程序加载器,这里所谓的第二阶段是相对于SOC中的BROM来说的,之前的文章已经有所介绍,SOC启动最先执行的是BROM中的固化程序。 BROM会通过检测启动方式来加载第二阶段bootloader。uboot已经是一个bootloader了,那么为什么还多一个u...
其中-T u-boot-spl.lds表示从u-boot-spl.lds中读取链接脚本;-Ttext 0xfc000000表示从.text段起始地址为0xfc000000,并且start.o是spl的起始;--start-group和--end-group表示一个group的起始和结束标志,中间是group的内容;-Map u-boot-spl.map表示输出map文件到u-boot-spl.map;-o u-boot-spl表示输出可执...
BootRom --> SPL --> u-boot --> kernel --> fs --> APP 简单来讲SPL所做工作是:一些硬件的初始化,然后读取u-boot,最后调转至u-boot。 在SPL截断还可以做一些芯片的校验,u-boot的校验,加密解密,认证等工作。 大体框架: ..
该函数对BSS进行清零操作,然后调用common/spl/spl.c中的board_init_r函数,该函数首先判断从哪种存储设备启动,这里给出RAM、MMC和NAND的代码。 5、board_init_r 155 boot_device = spl_boot_device(); 156 debug("boot device - %d\n", boot_device); 157 switch (boot_device) { 158 #ifdef CONFIG_SP...
在基于Linux的AM335x软件开发流程中,第一步就是U-Boot/SPL(SecondProgram Loader)的移植。在移植中遇到问题比较常见,而U-Boot/SPL的调试手段比较简陋,不便于迅速找到问题。利用仿真器可以单步调试的特点,就可以迅速定位到出问题的代码所在位置,加速移植的调试过程。本文主要介绍如何用CCS+emulator调试基于AM335x的U-...
运行流程:U-Boot SPL运行在片上SRAM中,负责初始化DDR,然后从第一个(裸)分区中加载U-Boot镜像到DDR。U-Boot会从boot分区中读取opensbi镜像、Linux镜像、Linux设备树镜像、(如果需要的话)initramfs,分别加载到DDR的特定位置,然后从openSBI开始运行。(强调“Linux”设备树是因为该设备树只是给openSBI和Linux使用,U-Boot及...
1. SBL(Secondary Bootloader): SBL是一个小型的引导加载程序,位于芯片的内部ROM中。它负责初始化硬件和一些基本的系统设置,然后通过某种方式加载更大的SPL或U-Boot。2. SPL(Secondary Program Loader): SPL是一个更大的引导加载程序,一般被存储在闪存(如NAND或eMMC)或SD卡等外部存储...
以前老版本的u-boot不支持大容量的SD卡,但后来的u-boot应该都支持2G以上的SD卡了,我一直使用的就是8G的SD卡,不过不是Sitara平台
如果使用第一种方案的话,u-boot 的前面 8K 被加载进入 SRAM 执行,u-boot 被截断,我们就需要保证在 u-boot 的前 8KB 代码,把板载的 DDR 初始化好,把整个 u-boot 拷贝到 DDR,然后跳转到 DDR 执行; 第二种方案的话,我们做一个小的 u-boot ,这个 u-boot 就叫做 spl,它很小很小(小于SRAM大小),它先...