主题中讨论的其他器件:AM3359、 TPS65217、TPS65910
工具与软件:
尊敬的各位同事:
我们的产品基于 AM335x (大多数情况下为 AM3352/AM3359) CPU。
与操作系统类似、我们使用我们自己的基于 Yocto 的 Linux 构建系统。 在我们定制电路板的当前解决方案中、我们使用 u-boot 2018.01、没有任何问题。
出于某些技术原因、我们决定升级我们的操作系统。 现在我们将使用现代 u-boot 2024.04和 Linux 内核6.6.x 与 Yocto 5.0.X 和 gcc 13
遗憾的是、在迁移过程中、我们遇到了启动 U-Boot 2024.04的问题。
引导日志:
U-Boot SPL 2024.04-ti-g29d0c23d67ee (Feb 23 2025 - 19:32:46 +0000) Trying to boot from MMC1 VI_DEBUG: spl: mmc boot mode: fs VI_DEBUG: spl_mmc_do_fs_boot executing spl_start_uboot VI_DEBUG: spl_start_uboot ENTER VI_DEBUG: spl_start_uboot VI_DEBUG: spl_start_uboot sdram_init_done = 0 VI_DEBUG: spl_start_uboot board_init_f_state = 2 VI_DEBUG: spl_start_uboot gd->ram_size 0x20000000 VI_DEBUG: bd_info size = 92 VI_DEBUG: bd_info stack = 96 VI_DEBUG: env_load CFG_SYS_SDRAM_BASE 0x80000000 0x80000000 VI_DEBUG: spl_start_uboot env_get_yesno NO VI_DEBUG: spl_mmc_do_fs_boot executing spl_load_image_fat spl_load_image_fat: fat_size, file u-boot.img size - 0 VI_DEBUG: _spl_load ENTER VI_DEBUG: _spl_load info->priv u-boot.img VI_DEBUG: _spl_load loading hdr from 0x0 to 807fffc0 VI_DEBUG: fat_read_file reading u-boot.img at pos 0x0 VI_DEBUG: _spl_load FDT_MAGIC branch VI_DEBUG: _spl_load activated SPL_LOAD_FIT VI_DEBUG: spl_load_simple_fit ENTER VI_DEBUG: fat_read_file reading u-boot.img at pos 0x0 VI_DEBUG: load_simple_fit ENTER VI_DEBUG: fat_read_file reading u-boot.img at pos 0x0 VI_DEBUG load_simple_fit External data: dst=80800000, offset=fc8, size=3cec4 VI_DEBUG: load_simple_fit NO_COMPRESS length = 249540 VI_DEBUG: spl_load_simple_fit load_simple_fit ret 0 VI_DEBUG: load_simple_fit ENTER VI_DEBUG: fat_read_file reading u-boot.img at pos 0x0 VI_DEBUG load_simple_fit External data: dst=8083cf00, offset=3de8c, size=15f10 VI_DEBUG: load_simple_fit NO_COMPRESS length = 89872 VI_DEBUG: _spl_load spl_image load_addr 0x80800000 entry_point 0x80800000 VI_DEBUG: _spl_load spl_image offset 0x0 VI_DEBUG: _spl_load spl_image size 249540 VI_DEBUG: _spl_load spl_image flags 2 VI_DEBUG: spl_load_image_fat spl_load done sdram_init_done = 0 VI_DEBUG spl_load_image_fat: return 0 VI_DEBUG: spl_mmc_do_fs_boot executing spl_load_image_fat ret = 0 VI_DEBUG: spl_mmc_load spl_mmc_do_fs_boot err=0 VI_DEBUG: image entry point: 0x80800000 b8 0 0 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5
这种情况看起来 MLO 正常启动、但 u-boot.img 无法启动。 VI_debug -为日志添加了前缀(即我们的附加前缀)
MLO 已实现成像入口点:
VI_DEBUG: image entry point: 0x80800000 b8 0 0 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5
从地址080800000开始的前32个字节为:
b8 0 0 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5
我的 JUMP_TO_IMAGE_NO_ARGS 如下所示:
void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
{
typedef void __noreturn (*image_entry_noargs_t)(u32 *);
int i;
image_entry_noargs_t image_entry =
(image_entry_noargs_t) spl_image->entry_point;
u32 boot_params = *((u32 *)OMAP_SRAM_SCRATCH_BOOT_PARAMS);
debug("image entry point: 0x%lX\n", spl_image->entry_point);
printf("VI_DEBUG: image entry point: 0x%x\n", spl_image->entry_point);
uint8_t * entry_data = (uint8_t *) spl_image->entry_point;
for(i = 0; i < 32; i++)
{
printf(" %x", (int)entry_data[i]);
}
printf("\n");
/* Pass the saved boot_params from rom code */
image_entry((u32 *)boot_params);
}
来自控制台的字节与 u-boot.img 内容匹配:

在我这边、我可以得出结论:u-boot.img 已正确加载并且 DDR 可以正常运行(DDR 的设置与2018.01中的设置相同)
我的 u-boot 配置部分:
CONFIG_ARM=y CONFIG_ARCH_CPU_INIT=y CONFIG_ARCH_OMAP2PLUS=y CONFIG_TARGET_AM335X_WECAT3D=y CONFIG_MEL_COMMON_CMD_OPTIONS=y CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x4030ff00 CONFIG_SF_DEFAULT_SPEED=24000000 CONFIG_DEFAULT_DEVICE_TREE="am335x-mlsl-v11" CONFIG_AM33XX=y CONFIG_CLOCK_SYNTHESIZER=y CONFIG_TIMESTAMP=y CONFIG_SPL_LOAD_FIT=y CONFIG_SYS_BOOTM_LEN=0x1000000 CONFIG_DISTRO_DEFAULTS=y CONFIG_OF_BOARD_SETUP=y CONFIG_LOGLEVEL=7 CONFIG_SYS_EXTRA_OPTIONS="EMMC_BOOT" CONFIG_BOOTCOMMAND="run findfdt; run init_console; run finduuid; run distro_bootcmd" CONFIG_SYS_CONSOLE_INFO_QUIET=y CONFIG_ARCH_MISC_INIT=y CONFIG_SPL_SYS_MALLOC=y CONFIG_SPL_SYS_MALLOC_SIZE=0x800000 CONFIG_SPL_FIT_IMAGE_TINY=y CONFIG_SPL_ETH=y CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="u-boot.img" CONFIG_VERSION_VARIABLE=y CONFIG_SPL=y CONFIG_SPL_OS_BOOT=y CONFIG_AUTOBOOT_KEYED=y CONFIG_AUTOBOOT_PROMPT="Press SPACE to abort autoboot in %d seconds\n" CONFIG_AUTOBOOT_DELAY_STR="d" CONFIG_AUTOBOOT_STOP_STR=" " #CONFIG_FASTBOOT=y CONFIG_CMD_SPL=y CONFIG_ISO_PARTITION=y CONFIG_MMC_OMAP_HS=y CONFIG_SPI_FLASH=y CONFIG_SPI_FLASH_SST=y CONFIG_SPI_FLASH_STMICRO=y CONFIG_PHYLIB=y CONFIG_SYS_NS16550=y CONFIG_DRIVER_TI_CPSW=y CONFIG_DM_PMIC=y CONFIG_PMIC_TPS65217=y CONFIG_SPL_POWER_TPS65910=y CONFIG_SPI=y CONFIG_DM_SPI=y CONFIG_OMAP3_SPI=y CONFIG_LZO=y CONFIG_SHOW_ERRORS=y CONFIG_SYS_I2C_SPEED=100000 CONFIG_SYS_I2C_SLAVE=0x1 CONFIG_DM_I2C=y CONFIG_OF_LIBFDT=y CONFIG_OF_LIBFDT_OVERLAY=y CONFIG_ENV_IS_IN_FAT=y CONFIG_OF_CONTROL=y CONFIG_OF_LIST="am335x-evm am335x-bone am335x-sancloud-bbe am335x-sancloud-bbe-lite am335x-sancloud-bbe-extended-wifi am335x-boneblack am335x-evmsk am335x-bonegreen am335x-icev2 am335x-pocketbeagle am335x-mlsl-v11" CONFIG_ENV_OVERWRITE=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_SPL_ENV_IS_NOWHERE=y CONFIG_OF_EMBED=y CONFIG_ENV_FAT_FILE="uEnv.txt" CONFIG_LOG=y CONFIG_SPL_LOG=y CONFIG_SPL_PAYLOAD="u-boot.img" CONFIG_CC_OPTIMIZE_FOR_DEBUG=y
附加中的完整 u-boot 配置。
请您提供任何想法和建议、以了解 u-boot_2024这种行为的原因。
提前感谢!