基址由CONFIG_SYS_INIT_SP_ADDR定义。 2)分配global data所需的空间 将堆栈16 bits对齐之后,调用board_init_f_alloc_reserve接口,从堆栈开始的地方,为u-boot的global data(struct global_data)分配空间。如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 /*
add x0, x0, #CONFIG_SYS_INIT_SP_BSS_OFFSET #else ldr x0, =(CONFIG_SYS_INIT_SP_ADDR) (1) #endif bic sp, x0, #0xf (2) mov x0, sp bl board_init_f_alloc_reserve (3) mov sp, x0 (4) mov x18, x0 (5) bl board_init_f_init_reserve (6) 以上部分根据不同的配置情况获...
(CONFIG_SYS_INIT_SP_ADDR) = 0x00800000 ///以RK3588为例栈地址是0x00800000,其他平台的设置的栈地址不一样 sp, x0, #0xf //设置栈地址是16字节对齐,armv7是8字节对齐 board_init_f_alloc_reserve //留出早期malloc和gd内存区域 board_init_f_init_reserve // board_init.c 里 获取gd指针,并清空gd...
normal_start_flow:/* set stack for C code */ldr x0,=(CONFIG_SYS_INIT_SP_ADDR)bic sp,x0,#0xf/* 16-byte alignment for ABI compliance */bl uart_early_init adr x0,Str_SystemSartup bl uart_early_puts ldr x0,=0x1202008cldr w0,[x0]bl uart_early_put_hex/* enable I-Cache */bl...
CONFIG_SYS_INIT_SP_ADDR:初始 SP 地址 CONFIG_SYS_MMC_ENV_DEV:默认的 MMC 设备,这里默认为USDHC2,也就是 EMMC CONFIG_SYS_MMC_ENV_PART:模式分区,默认为第 0 个分区 CONFIG_MMCROOT:设置进入 linux 系统的根文件系统所在的分区,这里设置为 “/dev/mmcblk1p2”,也就是 EMMC 设备的第 2 个分区。第 ...
[code]CONFIG_SPL_BUILD := y export CONFIG_SPL_BUILD 1. 2. 这是定义了一个这样的变量,然后真正定义的地方在这理;在uboot源码树的根目录下中: [code]ifeq ($(CONFIG_SPL_BUILD),y) CPPFLAGS += -DCONFIG_SPL_BUILD ## define the macro ...
具体可参考apply_core_errata函数,由CONFIG_ARM_ERRATA_XXX控制,在项目的初期,可以不打开,后续根据实际情况打开)。 2. normal_start_flow流程 这里是正常启动流程 normal_start_flow:/* set stack for C code */ ldr x0,=(CONFIG_SYS_INIT_SP_ADDR) ...
基址由CONFIG_SYS_INIT_SP_ADDR定义。 2)分配global data所需的空间 将堆栈16 bits对齐之后,调用board_init_f_alloc_reserve接口,从堆栈开始的地方,为u-boot的global data(struct global_data)分配空间。如下: /* common/init/board_init.c */ulongboard_init_f_alloc_reserve(ulongtop){/* Reserve early ma...
the SPL board_init_f() functionwhich is called * immediately after this. */ bl s_init pop {ip, pc} ENDPROC(lowlevel_init) 忽略不符合条件编译的代码。 第8行,设置栈指针指向CONFIG_SYS_INIT_SP_ADDR,而CONFIG_SYS_INIT_SP_ADDR具体是什么?它在include/configs/mx6ull.h...
上面的CONFIG_SYS_INIT_SP_ADDR =0x30000f80,是通过arm-linux-objdump -D u-boot>u-boot.dis生成反汇编,然后从u-boot.dis得到的。 3.然后进入第一个C数:board_init_f() 该函数主要工作是: 清空gd指向的结构体、通过init_sequence函数数组,来初始化各个函数以及逐步填充gd结构体,最后划分内存区域,将数据保存...