You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让U-boot自动从FAT分区加载FreeRTOS程序

实现U-boot自动启动FreeRTOS的两种方法

当然可以通过U-boot启动脚本或者直接修改环境变量来实现自动加载FreeRTOS,我给你一步步讲清楚:

方法一:使用U-boot启动脚本(推荐,灵活易维护)

这种方式的好处是后续如果要调整启动命令,只需要替换脚本文件,不用修改U-boot环境变量,非常方便:

  • 第一步:编写启动脚本文本文件
    创建一个文本文件(比如命名为boot_freertos.txt),内容就是你手动执行的命令:
fatload mmc 0:1 0x7F8000 hello_world.bin
dcache flush
bootaux 0x7F8000
  • 第二步:转换为U-boot可识别的脚本格式
    U-boot只能识别专用格式的脚本文件,需要用U-boot自带的mkimage工具转换,命令如下:
mkimage -A arm -T script -C none -n "Auto Boot FreeRTOS" -d boot_freertos.txt boot_freertos.scr

简单解释下参数:

  • -A arm:适配NXP开发板的ARM架构

  • -T script:指定文件类型为启动脚本

  • -C none:不压缩脚本内容

  • -n:给脚本加个描述性名称

  • -d:指定输入的文本文件,后面是输出的脚本文件名

  • 第三步:把脚本放到SD卡的FAT分区
    将生成的boot_freertos.scr拷贝到SD卡的FAT分区(就是你存放hello_world.bin的那个分区)。

  • 第四步:修改U-boot环境变量,设置自动加载脚本
    进入U-boot命令行后,执行以下命令:

# 设置bootcmd为加载并执行脚本
setenv bootcmd 'fatload mmc 0:1 0x700000 boot_freertos.scr; source 0x700000'
# 保存环境变量到板载非易失存储
saveenv

这里0x700000是临时存放脚本的内存地址,只要和你加载FreeRTOS的0x7F8000不重叠就行,选个空闲地址即可。

方法二:直接修改bootcmd环境变量(更简单,适合固定命令)

如果你的启动命令不会经常变动,也可以直接把命令写到bootcmd里,省去脚本转换的步骤:

进入U-boot命令行后执行:

# 先备份原来的bootcmd,方便以后恢复Linux启动
setenv bootcmd_backup $bootcmd
# 设置新的bootcmd,直接执行启动FreeRTOS的命令
setenv bootcmd 'fatload mmc 0:1 0x7F8000 hello_world.bin; dcache flush; bootaux 0x7F8000'
# 保存环境变量
saveenv

重启后,U-boot就会自动执行这些命令,直接启动FreeRTOS了。

恢复Linux启动的方法

如果以后想改回默认启动Linux,只需要执行:

setenv bootcmd $bootcmd_backup
saveenv

然后重启板子即可。

注意事项

  • 确认SD卡的FAT分区编号正确:可以用U-boot命令mmc list查看SD卡设备,比如你的SD卡是mmc 0,那么FAT分区就是mmc 0:1
  • 内存地址不要冲突:0x7F8000要确保是FreeRTOS程序可以安全加载的地址,和U-boot、Linux的内存区域不重叠
  • saveenv命令会把环境变量写入板载非易失存储(比如EMMC或SD卡的环境分区),修改后会永久生效

内容的提问来源于stack exchange,提问作者ALec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:03