完成初始化后,启动核继续执行board_init_f(),其他核进入刚刚分析过的secondary_hart_loop等待ipi。 3.2 设备树与驱动模型 board_init_f()在源码中有多处定义。因为平头哥版本专门为ice-c910板写了一个board_init_f(),在board/thead/ice-c910/spl.c中,所以我们基于这个函数来讲解。它主要做了两件事:调用spl_...
执行boar_init_f,这个board_init_f是在SPL阶段所有,我们知道spl阶段能用的空间很小,所以board_inif_f不会用board_f.c里面的函数。而是spl.c下面的弱引用函数。在K3上有自己的定义:arch/arm/mach-k3/am6_init.c里面的函数: 为bootindex分配地址,bootindex在.data节。内容在地址0x41c7fbfc。这个地址在 MCU...
四、下面直接看cpu_init_crit。 cpu_init_crit:/** Invalidate L1 I/D*/...//省略详细的内容/** disable MMU stuff and caches*/...//省略详细的内容/** Jump to board specific initialization... * The Mask ROM will have already initialized * basic memory. Go here to bump up clock rate an...
………———->_main———–>board_init_f_alloc_reserve & board_init_f_init_reserve & board_init_f———->加载BL2,跳转到BL2 board_init_f执行时已经是C语言环境了。在这里需要结束掉SPL的工作,跳转到BL2中。 2、_start 上述已经说明了_start是整个spl的入口,其代码如下: arch/arm/lib/vector.S...
board_init_r spl_invoke_opensbi--如果镜像类型是IH_OS_OPENSBI则启动OpenSBI。 spl_opensbi_find_uboot_node--在设备树中查找U-Boot节点,包含了U-Boot镜像的配置信息。这些信息从FIT镜像中解析,append到fdt_addr中。 fit_image_get_entry--获取U-Boot的entry地址,如果没有找到则使用load地址。
在部分.\arch\arm\mach-xxx目录下面也有u-boot-spl.lds,这个一般就是针对那些比较特殊的架构单独实现的连接脚本。在编译过程中,会通过CONFIG_SYS_LDSCRIPT=xxxx来执行这个特殊的脚本文件,如果不指定默认采用.\arch\arm\cpu\u-boot-spl.lds文件。 u-boot.lds文件也同上的说明可能有多个。
void board_init_r(gd_t *dummy1, ulong dummy2) { u32 boot_device; int ret; debug(">>spl:board_init_r()\n"); #if defined(CONFIG_SYS_SPL_MALLOC_START) mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START, CONFIG_SYS_SPL_MALLOC_SIZE); ...
SPL 启动 board_init_r ATF 启动 jump_to_image_no_args 启动log 上电后,片上的 BootROM code 会将启动的 bin 文件拷贝到 ocram 中运行, ocram 通常只有4kb,甚至更小。所以将 uboot 中放到 ocram 中运行是不现实的。故 SPL 应运而生,SPL(Secondary Program Loader) 是一个非常小的 bin 文件,足以加载到...
ENTRY(_main) /* * Set up initial C runtime environment and call board_init_f(0). */ #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK) ldr sp, =(CONFIG_SPL_STACK) #else ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) #endif bic sp, sp, #7 /* 8-byte alignment for ABI ...
1、s_init函数 然后调用s_init来进行更多模块的初始化。函数s_init在arch/arm/cpu/armv7/sunxi/board.c中定义,代码如下。 87 void s_init(void) 88 { 89 #if !defined CONFIG_SPL_BUILD && defined CONFIG_SUN7I 90 /* Enable SMP mode for CPU0, by setting bit 6 of Auxiliary Ctl reg */ 91...