如何让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
相关产品推荐
相关产品推荐

