initf_console_record arch_cpu_init // SoC 的 lowlevel 初始化 timer_init // 定时器初始化 env_init init_baud_rate //根据环境变量baudrate设置gd->baudrate=115200 serial_init // 串口初始化 dram_init // 初始化ddr,获取 ddr 容量信息,设置gd->ram_size=512MB reserve_mmu // 预留空间 reserve_...
global data的空间分配后,调用board_init_f_init_reserve,初始化global data。所谓的初始化,无非就是一些清零操作,不过有几个地方需要注意: 1)如果不是ARM平台(!CONFIG_ARM),则可以调用arch_setup_gd接口,进行arch级别的设置。当然,前提是,对应的arch应该实现这个接口。 2)如果定义了CONFIG_SYS_MALLOC_F,则会初...
global data的空间分配后,调用board_init_f_init_reserve,初始化global data。所谓的初始化,无非就是一些清零操作,不过有几个地方需要注意: 1)如果不是ARM平台(!CONFIG_ARM),则可以调用arch_setup_gd接口,进行arch级别的设置。当然,前提是,对应的arch应该实现这个接口。 2)如果定义了CONFIG_SYS_MALLOC_F,则会初...
4)board代码在需要的时候,会调用machine(arch/arm/mach-xxx)提供的接口,实现特定的功能。因此machine的定位是提供一些基础的代码支持,不会直接参与到u-boot的功能逻辑中。 3. 平台相关部分的启动流程分析 本文先不涉及u-boot和平台相关的Kconfig/Makefile部分,以ARM64为例,假定u-boot首先从“arch/arm/cpu/armv8...
arch/arm/lib/crt0_64.S 上一节start.S主要做了以下工作: reset初始化,save_boot_params(nxp定义)保存参数到大小256byte的sram中 设置cpu状态:小端模式,MMU 、 i/d cache 都关闭,段定义; 判断当前的异常等级并将中断向量的地址写到各个EL3/2/1对应的VBAR寄存器中; ...
arch_cpu_init, /* basic arch cpu dependent setup */ env_init, /* initialize environment */ ... reloc_fdt, reloc_bootstage, reloc_bloblist, setup_reloc, ... } board_init_f(),其最核心的内容就是调用了init_sequence_f初始化序列,进行了一系列初始化的工作。
init_fnc_t *init_sequence[] = { #if defined(CONFIG_ARCH_CPU_INIT) arch_cpu_init, /* 与处理器架构相关的初始化 */ #endif board_init, /* 板级特殊设备初始化 */ #if defined(CONFIG_USE_IRQ) interrupt_init, /* 初始化中断 */
1)如果不是ARM平台(!CONFIG_ARM),则可以调用arch_setup_gd接口,进行arch级别的设置。当然,前提是,对应的arch应该实现这个接口。 2)如果定义了CONFIG_SYS_MALLOC_F,则会初始化gd->malloc_base。 4)执行前置的(front)初始化操作 调用board_init_f接口,执行前置的初始化操作,会再后面的章节详细说明。
3.5.1 init_sequence_r 3.5.2 main_loop 参照 0 自然环境 ARMV8,uboot 2020.10,rpi3服务平台 1 移殖架构 board,别说了,板级,uboot应用dts后,这方面编码应尽可能简单化 machine, SOC级,主要是一些外接设备 ARCH, 如arm(包括armv7和armv8) CPU, 如armv8 ...
首先,我们先来分析init_fnc_t **init_fnc_ptr;这行代码。 要分析这行代码,首先看指针数组init_fnc_t *init_sequence[] typedef int (init_fnc_t) (void); init_fnc_t *init_sequence[] = { cpu_init, /* 与CPU相关的初始化 */ board_init, /* 与板子初始化相关的初始化 */ ...