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

如何通过STM32MP1将Buildroot生成的Linux .img刷入eMMC?

STM32MP1 eMMC刷写Buildroot .img文件的可行方案

通过USB OTG接口刷入eMMC

方案1:STM32CubeProgrammer + 自定义.tvs文件

虽然STM32CubeProgrammer不直接支持.img文件,但可以通过自定义.tvs脚本实现刷写:

  1. 调整开发板BOOT引脚配置,进入USB启动模式(参考STM32MP1官方手册)
  2. 创建.tvs配置文件,指定eMMC设备、.img路径和起始地址,示例内容:
[Device]
Type = eMMC
Connection = USB

[Flash]
File = ./buildroot-output/images/rootfs.img
StartAddress = 0x0
  1. 用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存储设备:

  1. 进入U-Boot命令行,确认eMMC设备号:
mmc list
  1. 开启UMS模式,将eMMC映射为USB设备(假设eMMC是设备1):
ums 0 mmc 1
  1. 主机端识别到eMMC后,用dd命令直接刷写:
dd if=./buildroot-output/images/rootfs.img of=/dev/sdX bs=4M status=progress

警告:务必确认/dev/sdX是目标eMMC设备,避免误刷主机本地磁盘。

  1. 刷写完成后,在U-Boot执行reset重启开发板。

其他可行刷写方式

SD卡中转刷写

  1. 将Buildroot .img写入SD卡,插入开发板启动进入U-Boot或Linux系统
  2. 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)
      
  3. Linux系统下操作:
    启动到SD卡的Linux后,直接用dd复制镜像到eMMC:
    dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=4M status=progress
    

网络TFTP刷写(U-Boot)

  1. 主机端搭建TFTP服务器,将Buildroot .img放到TFTP根目录
  2. 开发板进入U-Boot,配置网络参数(替换为你的实际地址):
    setenv ipaddr 192.168.1.100
    setenv serverip 192.168.1.10
    
  3. 下载镜像到内存:
    tftpboot 0x80000000 buildroot.img
    
  4. 写入eMMC(假设eMMC是设备1,扇区数通过filesize环境变量计算):
    mmc write 0x80000000 0 $(expr ${filesize} / 512)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:13:24