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

如何在U-Boot中复制eMMC上的4分区镜像以得到8个分区?

问题分析与解决方案

首先得明确核心问题:你直接偏移写入整个wic镜像的方法之所以没生效,是因为wic镜像包含GPT分区表——而系统(包括U-boot)只会读取磁盘起始位置的主GPT分区表,你偏移写入的那份GPT表不会被识别,自然看不到新增的4个分区。

简单说,你相当于在磁盘后半段又放了一份完整的"小型磁盘"(带自己的GPT和分区),但系统只认开头的那份GPT,所以新增分区根本不会被列出来。

正确操作步骤

我们需要修改磁盘开头的主GPT,添加新分区条目,再把原有分区的数据复制到新的位置,具体如下:

1. 先计算原有分区的块数(方便后续复制)

从你提供的分区表,算出每个分区的总块数(End LBA - Start LBA + 1):

  • boot分区:0x681f - 0x800 + 1 = 0x6020 块
  • first分区:0x139e7 - 0x6820 + 1 = 0xd1c8 块
  • second分区:0xfefff - 0x14000 + 1 = 0xea000 块
  • third分区:0x1e9fff - 0xff000 + 1 = 0xea000 块

偏移量用你之前的0x200000(刚好是原有镜像的总块数,避免覆盖原有分区)。

2. 备份当前GPT分区表(防止操作出错)

=> mmc read 0x600000000 1 33  # GPT主表在LBA1到LBA33,共33块
=> saveenv gpt_backup 0x600000000  # 备份到U-boot环境变量,也可以上传到TFTP服务器

3. 修改GPT,添加4个新分区条目

如果你的U-boot支持gpt命令,直接执行以下命令(新分区的LBA是原分区LBA加上偏移量0x200000):

# 添加第5个boot分区
=> gpt add 1 0x200800 0x20681f "boot" 0fc63daf-8483-4772-8e79-3d69d8477de4
# 添加第6个first分区
=> gpt add 1 0x206820 0x2139e7 "first" 0fc63daf-8483-4772-8e79-3d69d8477de4
# 添加第7个second分区
=> gpt add 1 0x214000 0x2fefff "second" 0fc63daf-8483-4772-8e79-3d69d8477de4
# 添加第8个third分区
=> gpt add 1 0x2ff000 0x3e9fff "third" 0fc63daf-8483-4772-8e79-3d69d8477de4

4. 逐个复制原有分区数据到新位置

# 复制boot分区
=> mmc read 0x600000000 0x800 0x6020
=> mmc write 0x600000000 0x200800 0x6020

# 复制first分区
=> mmc read 0x600000000 0x6820 0xd1c8
=> mmc write 0x600000000 0x206820 0xd1c8

# 复制second分区
=> mmc read 0x600000000 0x14000 0xea000
=> mmc write 0x600000000 0x214000 0xea000

# 复制third分区
=> mmc read 0x600000000 0xff000 0xea000
=> mmc write 0x600000000 0x2ff000 0xea000

5. 保存修改后的GPT并验证

=> gpt write 1 1  # 将新GPT写入MMC设备1的主表位置
=> mmc rescan
=> mmc part

现在你应该能看到预期的8个分区了。

补充说明

如果你的U-boot不支持gpt命令,也可以在PC上先修改wic镜像的GPT分区表,添加4个新分区条目,再把修改后的GPT写入eMMC的起始位置,之后再复制分区数据——但U-boot的gpt命令是嵌入式开发里的标配,优先用上面的方法更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:39:04