如何通过STM32MP1将Buildroot生成的Linux .img刷入eMMC?
STM32MP1 eMMC刷写Buildroot .img文件的可行方案
通过USB OTG接口刷入eMMC
方案1:STM32CubeProgrammer + 自定义.tvs文件
虽然STM32CubeProgrammer不直接支持.img文件,但可以通过自定义.tvs脚本实现刷写:
- 调整开发板BOOT引脚配置,进入USB启动模式(参考STM32MP1官方手册)
- 创建.tvs配置文件,指定eMMC设备、.img路径和起始地址,示例内容:
[Device] Type = eMMC Connection = USB [Flash] File = ./buildroot-output/images/rootfs.img StartAddress = 0x0
- 用CubeProgrammer命令行执行刷写:
STM32_Programmer_CLI -c port=usb1 -w your_flash_script.tvs
注意:若.img是完整磁盘镜像,StartAddress设为0x0即可;若仅为单个分区镜像,需匹配对应分区的起始扇区地址。
方案2:U-Boot USB Mass Storage(UMS)模式
如果能通过SD卡启动U-Boot到开发板,可直接把eMMC映射为USB存储设备:
- 进入U-Boot命令行,确认eMMC设备号:
mmc list
- 开启UMS模式,将eMMC映射为USB设备(假设eMMC是设备1):
ums 0 mmc 1
- 主机端识别到eMMC后,用
dd命令直接刷写:
dd if=./buildroot-output/images/rootfs.img of=/dev/sdX bs=4M status=progress
警告:务必确认
/dev/sdX是目标eMMC设备,避免误刷主机本地磁盘。
- 刷写完成后,在U-Boot执行
reset重启开发板。
其他可行刷写方式
SD卡中转刷写
- 将Buildroot .img写入SD卡,插入开发板启动进入U-Boot或Linux系统
- U-Boot下操作:
- 读取SD卡镜像到内存(假设SD卡是设备0,内存地址0x80000000):
mmc read 0x80000000 0 $(expr $(stat -c %s buildroot.img) / 512) - 写入到eMMC(假设eMMC是设备1):
mmc write 0x80000000 0 $(expr $(stat -c %s buildroot.img) / 512)
- 读取SD卡镜像到内存(假设SD卡是设备0,内存地址0x80000000):
- Linux系统下操作:
启动到SD卡的Linux后,直接用dd复制镜像到eMMC:dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=4M status=progress
网络TFTP刷写(U-Boot)
- 主机端搭建TFTP服务器,将Buildroot .img放到TFTP根目录
- 开发板进入U-Boot,配置网络参数(替换为你的实际地址):
setenv ipaddr 192.168.1.100 setenv serverip 192.168.1.10 - 下载镜像到内存:
tftpboot 0x80000000 buildroot.img - 写入eMMC(假设eMMC是设备1,扇区数通过
filesize环境变量计算):mmc write 0x80000000 0 $(expr ${filesize} / 512)
内容的提问来源于stack exchange,提问作者euraad
相关产品推荐
相关产品推荐

