三、U-Boot及其SPL 3.1 启动汇编 3.1.1 设置中断 3.1.2 设置gd变量 3.2 设备树与驱动模型 3.2.1 binding 3.2.2 driver(硬件层驱动) 3.2.3 uclass(通用层驱动) 3.2.4 udevice(设备) 3.2.5 调用者的api 3.2.6 spl_early_init() 3.3 时钟驱动 3.3.1 binding 3.3.2 注册为系统时钟 3.4 串口驱动 3.4....
最后调用spl的board_init_r函数,加载BL31验证atf固件,从emmc/sd中加载BL32(uboot),最后移交控制权给uboot。 board_init_r common/spl/spl.c void board_init_r(gd_t *dummy1, ulong dummy2) { u32 spl_boot_list[] = { BOOT_DEVICE_NONE, BOOT_DEVICE_NONE, BOOT_DEVICE_NONE, BOOT_DEVICE_NONE,...
_start->reset->save_boot_params->cpu_init_crit->lowlevel_init->_main->board_init_f 在armv7架构的uboot-spl,主要需要做如下事情 关闭中断,svc模式 禁用MMU、TLB 芯片级、板级的一些初始化操作 IO初始化 时钟 内存 选项,串口初始化 选项,nand flash初始化 其他额外的操作 加载BL2,跳转到BL2 下面详细分...
board_init_f执行时已经是C语言环境了。在这里需要结束掉SPL的工作,跳转到BL2中。 2、_start 上述已经说明了_start是整个spl的入口,其代码如下: arch/arm/lib/vector.S _start: #ifdef CONFIG_SYS_DV_NOR_BOOT_CFG .wordCONFIG_SYS_DV_NOR_BOOT_CFG #endif breset 1. 2. 3. 4. 5. 会跳转到reset中。
KEEP(*(SORT(.u_boot_list*_i2c_*))); }>.sram .= ALIGN(4); __image_copy_end= .; 在这里,启动加载会跳转到文件arch/arm/cpu/armv7/start.S中,这个是怎么处理的呢?在这里,文件的主要工作有下面几种: A 重启保存启动参数: reset:/*Allow the board to save important registers*/b save_boot_...
spl需要初始化定时器、atf控制器、pmic、ddr。spl_dram_init会将ddr的timming信息写入ddr控制器。最后调用spl的board_init_r函数,加载BL31验证atf固件,从emmc/sd中加载BL32(uboot),最后移交控制权给uboot。 board_init_r common/spl/spl.c voidboard_init_r(gd_t*dummy1,ulongdummy2) ...
6 6.spl在启动过程的差异在哪里?回答:以tiny210而言,前期arch的初始化流程基本上是一致的,出现本质区别的是在board_init_f开始的。7 7.代码入口project-X/u-boot/arch/arm/cpu/u-boot.lds 总结 1 1.关闭中断,设置svc模式。2.堆栈环境的设置。3.进行代码重定向,进入命令行状态即可。注意事项 非常感谢...
我们接着跟着流程图往下看,重定向之后,Uboot运行于新的地址空间,接着我们执行board_init_r,主要作为Uboot运行的最后初始化步骤。 board_init_r这个函数,同样位于common/board_f.c,主要用于初始化各类外设信息 void board_init_r(gd_t *new_gd, ulong dest_addr){if (initcall_run_list(init_sequence_r))ha...
简介: U-BOOT小全(五):BootLoader源码(SPL-UBoot 2) 前面我们分析到了s_init函数,现在继续。 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...
SPL和u-boot的C入口函数分别是s_init 和 board_init 你好,谢谢你的回复 在你们官方的文档里面的确是这么说的。 但是,我看了源代码bord_init函数直接返回了,一定是有别的地方调用了board_init函数, 是不是这个样子,在编译的时候分别编译了一次SPL,然后又编译了一次u-boot?但是这么想的话在Makefile的哪里有体现...