如何让U-Boot通用检测U盘任意分区中的boot.scr脚本
实现U-Boot检测U盘任意分区的boot.scr脚本
当前U-Boot通过CONFIG_EXTRA_ENV_SETTINGS宏配置的环境变量仅检测U盘第一个分区(usb 0:1)中的boot.scr脚本。以下是修改后的配置,实现遍历U盘所有分区查找并执行该脚本:
"usb_scan_bootscript=setenv part 1; while test ${part} -le 10; do " \ "if load usb 0:${part} ${scriptaddr} ${bsp_script}; then " \ "source ${scriptaddr}; setenv part 11; " \ "else " \ "setexpr part ${part} + 1; " \ "fi; " \ "done\0" \ "usb_bootcmd=usb start ; run usb_scan_bootscript; usb stop;\0" \ "bsp_bootcmd=echo Running BSP bootcmd ...; " \ "run usb_bootcmd " \ "mmc dev ${mmcdev}; if mmc rescan; then " \ "if run loadbootscript; then " \ "run bootscript; " \ "else " \ "if run loadimage; then " \ "run mmcboot; " \ "else run netboot; " \ "fi; " \ "fi; " \ "fi;"
关键改动说明
- 新增
usb_scan_bootscript命令:- 初始化分区计数器
part为1 - 通过
while循环遍历最多10个分区(可根据实际需求调整分区上限值) - 对每个分区尝试执行
load命令加载boot.scr,成功则立即执行脚本并设置part为11终止循环 - 加载失败则自动递增分区号,继续尝试下一个分区
- 初始化分区计数器
- 修改
usb_bootcmd:启动USB控制器后调用遍历脚本,无论是否找到脚本,最后统一停止USB设备
内容的提问来源于stack exchange,提问作者void_brain
相关产品推荐
相关产品推荐

