#ifdefCONFIG_OF_CONTROLfdtdec_setup,#endif 如果打开了CONFIG_OF_CONTROL,则调用fdtdec_setup,配置gd->fdt_blob指针(即device tree所在的存储位置)。对ARM平台来说,u-boot的Makefile会通过连接脚本,将dtb文件打包到u-boot image的“__dtb_dt_begin”位置处,因此不需要特别关心。 5.3 trace_early_init 代码语言...
操作系统引导环境 设备树解析:加载并验证设备树(DTB),传递硬件信息给内核(fdtdec_setup)。 启动命令准备:设置bootcmd和bootargs,定义内核加载地址、根文件系统路径等。 用户交互与调试 命令行接口:启动 U-Boot Shell(cli_loop),支持用户输入命令。 高级调试工具:启用md(内存查看)、mm(内存修改)等调试命令。 自启动流...
{ if (fdtdec_setup_mem_size_base() != 0) return -EINVAL; return 0; } int dram_init_banksize(void) { fdtdec_setup_memory_banksize(); return 0; } void *board_fdt_blob_setup(void) { /* QEMU loads a generated DTB for us at the start of RAM. */ return (void *)CONFIG_SYS_SD...
如果打开了CONFIG_OF_CONTROL,则调用fdtdec_setup,配置gd->fdt_blob指针(即device tree所在的存储位置)。对ARM平台来说,u-boot的Makefile会通过连接脚本,将dtb文件打包到u-boot image的“__dtb_dt_begin”位置处,因此不需要特别关心。 5.3 trace_early_init #ifdef CONFIG_TRACE trace_early_init, #endif 由CO...
int fdtdec_setup(void) { #if CONFIG_IS_ENABLED(OF_CONTROL) # ifdef CONFIG_OF_EMBED /* Get a pointer to the FDT */ gd->fdt_blob = __dtb_dt_begin; // 当使用CONFIG_OF_EMBED的方式时,也就是dtb集成到uboot的bin文件中时,通过__dtb_dt_begin符号来获取dtb地址。 # elif defined CONFIG_...
fdtdec_setup, #endif 1. 2. 3. 如果打开了CONFIG_OF_CONTROL,则调用fdtdec_setup,配置gd->fdt_blob指针(即device tree所在的存储位置)。对ARM平台来说,u-boot的Makefile会通过连接脚本,将dtb文件打包到u-boot image的“__dtb_dt_begin”位置处,因此不需要特别关心。
// 假设已经启用了设备树支持,并且设备树文件已经以某种方式集成到了U-Boot镜像中 // 在U-Boot初始化过程中,调用fdtdec_setup函数来解析设备树文件 int fdtdec_setup(void) { // 假设设备树文件已经通过某种方式被加载到了gd->fdt_blob中 // 这里只是示例,实际情况可能不同 gd->fdt_blob = ...; /...
init_fnc_t init_sequence_f[] = { setup_mon_len, /* 设置gd->_len为编译出来的u-boot.bin+bss段的大小 */ fdtdec_setup, /* 和设备树有关 */ init_malloc, /* 初始化并设置内存池 */ log_init, /* log初始化 */ initf_bootstage, /* 用于记录board_init_f()的引...
然后单步调试,就是board_init_f中一个个函数调用,看到reserve_board没正常退出,应该是分配内存的时候挂了。于是想到sdram是否设置正常,看了lib/fdtdec.c中的fdtdec_setup_mem_size_base函数。start地址0x90000000,长度是0x800000。那么应该是用了外部8M sdram。
(int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;if (IS_ENABLED(CONFIG_OF_CONTROL)) //是否使用设备树进行配置bootdelay = fdtdec_get_config_int(gd->fdt_blob, "bootdelay",bootdelay);debug("### main_loop entered: bootdelay=%d\n\n", bootdelay);if (IS_ENABLED(CONFIG_AUTOBOOT_MENU_...