news 2026/4/17 19:53:18

从SD卡到EMMC:手把手教你用U-Boot的tftp和update_mmc命令完成系统引导迁移

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从SD卡到EMMC:手把手教你用U-Boot的tftp和update_mmc命令完成系统引导迁移

从SD卡到EMMC:U-Boot引导迁移全流程实战指南

当开发板通过SD卡成功启动U-Boot后,如何将引导程序永久写入板载EMMC?这不仅关乎设备能否独立启动,更直接影响产品化部署的可靠性。本文将手把手带你完成从临时启动到永久固件部署的关键跃迁,深入解析每个命令背后的硬件交互逻辑。

1. 环境准备:构建高效传输桥梁

在开始操作前,确保你的开发环境已就绪。不同于简单的文件拷贝,嵌入式系统的引导迁移需要搭建稳定的文件传输通道。以下是两种主流平台的TFTP服务器配置方法:

Ubuntu系统配置tftpd-hpa服务

# 安装服务 sudo apt install tftpd-hpa # 配置目录(建议使用/home/<用户名>/tftp) sudo nano /etc/default/tftpd-hpa

关键配置参数修改为:

TFTP_DIRECTORY="/home/your_username/tftp" TFTP_OPTIONS="--secure --create"

重启服务后,将U-Boot镜像放入指定目录:

sudo systemctl restart tftpd-hpa chmod 777 ~/tftp cp u-boot.bin ~/tftp/

Windows平台使用Tftpd64

  1. 下载绿色版Tftpd64工具
  2. 设置服务器接口为开发板连接的网卡IP
  3. 指定镜像存放目录
  4. 关闭Windows防火墙或添加例外规则

注意:无论哪种平台,都要确保开发主机与开发板处于同一局域网段,且无IP地址冲突。

2. 存储设备探秘:理解硬件布局

执行迁移前,必须清楚目标存储器的物理特性。在U-Boot中运行以下诊断命令:

# 查看可用存储设备 mmc list

典型输出示例:

MMC Devices: MMC0: 0000 (eMMC) MMC1: 0001 (SD) # 查看内存映射 bdinfo

关键内存参数示例:

memstart = 0x40000000 memsize = 0x80000000 flashstart = 0x48000000 flashsize = 0x04000000

EMMC物理结构解析表

区域名称起始地址大小作用
MBR区0x00000x200主引导记录
保留区0x02000x200硬件保留
2ndboot0x04000x4000次级引导区
用户区0x4400可变用户数据

3. 精密传输:TFTP加载与内存管理

通过SD卡启动进入U-Boot后,开始核心操作流程:

# 设置开发板IP(必须与TFTP服务器同网段) setenv ipaddr 192.168.1.155 # 设置服务器IP setenv serverip 192.168.1.100 # 启动传输 tftp 0x40000000 u-boot.bin

成功传输会显示:

Loading: ################### done Bytes transferred = 342748 (0x53adc hex)

内存操作黄金法则

  1. 地址对齐:始终使用0x40000000这类边界对齐地址
  2. 缓冲区预留:传输大小应预留10%余量(本例使用0x60000
  3. 验证机制:传输后执行md 0x40000000 10查看前16字节内容

4. 终极写入:update_mmc参数精解

最关键的写入操作需要精确控制每个参数:

update_mmc 2 2ndboot 0x40000000 0x200 0x60000

参数拆解对照表

参数位置示例值含义获取方法
dev no2EMMC设备号mmc list查询
type2ndboot写入类型根据芯片手册确定
mem0x40000000源内存地址bdinfo查看
addr0x200目标偏移必须≥0x200
length0x60000写入长度略大于传输字节数

典型错误排查指南

  1. MBR保护区错误

    # 错误现象 Fail: start 0 block(0x0) is in MBR zone (0x200) # 解决方案 确保addr参数≥0x200
  2. 设备号错误

    # 错误现象 MMC: no card present # 解决方案 重新执行mmc list确认设备号
  3. 传输校验失败

    # 预防措施 cmp.b 0x40000000 0x48000000 0x60000

5. 验证与优化:打造工业级可靠性

写入完成后,执行以下验证步骤:

# 切换启动设备 mmc dev 0 # 重置并测试 reset

高级技巧:双备份策略

  1. 在EMMC的不同区域写入两份引导程序
  2. 通过环境变量设置备用启动路径
  3. 添加启动失败自动回滚机制
# 示例环境变量设置 setenv bootcmd "mmc dev 0; if load mmc 0:1 0x40000000 /boot/zImage; then bootm 0x40000000; else mmc dev 1; load mmc 1:1 0x40000000 /boot/zImage; bootm 0x40000000; fi" saveenv

6. 生产环境部署建议

当需要批量处理时,考虑以下优化方案:

  1. 自动化脚本:将完整流程写入U-Boot脚本

    # 示例脚本内容 setenv autoload no dhcp tftp 0x40000000 u-boot.bin update_mmc 2 2ndboot 0x40000000 0x200 0x60000 reset
  2. 校验机制:添加SHA256校验环节

  3. 日志记录:通过串口输出完整操作日志

在实际产线测试中,建议先对样品进行至少50次循环烧写测试,验证EMMC耐久性。某客户案例显示,采用0x300起始地址配合交替写入策略,可使存储寿命提升3倍。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 19:43:16

【卷卷漫谈】DeepSeek V4 背后那条没退路的山路

结论&#xff1a;DeepSeek V4 还有不到两周发布&#xff0c;但它背后那条路——从 CUDA 转向华为昇腾 CANN 框架——才是这篇文章真正想说的。这是一个关于"代价"的故事。今天是 2026 年 4 月 17 日。DeepSeek V4 还没发布。从去年年底开始&#xff0c;"V4 下周…

作者头像 李华
网站建设 2026/4/17 19:41:13

Degrees of Lewdity 中文整合包:5分钟快速上手终极指南

Degrees of Lewdity 中文整合包&#xff1a;5分钟快速上手终极指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想要体验完整汉化美化的Degrees of Lewdity游戏世界吗&#xff1f;DOL-CHS-MODS整…

作者头像 李华
网站建设 2026/4/17 19:38:36

ROFL-Player:高效解决英雄联盟回放文件兼容问题的智能工具

ROFL-Player&#xff1a;高效解决英雄联盟回放文件兼容问题的智能工具 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player ROFL-Player是一款…

作者头像 李华