跳到主要内容
版本:2.9.0

分区表介绍

分区表简介

eMMC 包含 BOOT1、BOOT2、UDA (User Data Area)等物理分区。GPT 分区表是建立在 UDA 物理分区之上的逻辑结构,可通过该结构进一步划分出多个逻辑分区。用户通过了解分区表,可掌握系统基本组成和资源情况。

确认分区表配置

分区表配置保存在 buildroot/board/zhihe/common/images/ 路径中。用户可通过以下方法查看分区表配置。

  1. 打开镜像预处理脚本 buildroot/board/zhihe/common/post-build.sh,查看开发板和分区表的对应关系。 分区表现有 8G 和 32G 两种配置,分别对应 gptgpt32g 目录。

    if [ "$UBOOT_BOARD" = "a200-evb" ]; then
    GPT_DIR="gpt"
    elif [ "$UBOOT_BOARD" = "a210-evb" ]; then
    GPT_DIR="gpt32g"
    else
    #The partition table supported by the board must be confirmed.
    false
    fi
  2. 构建完成后,用户可在打印信息中确认当前的分区表配置。

    >>> Create GPT image
    Create disk(30064803840)
    Write gpt to disk
    Dump gpt.img
    Update output.yml
    Disk dev_mmc0blkp: 28 GiB, 30064803840 bytes, 58720320 sectors

分区表详细说明

文件说明

下面以 32G 配置为例,介绍配置文件各字段的功能,对应分区表文件buildroot/board/zhihe/common/images/gpt32/gpt_emmc.txt

label: gpt
device: dev_mmc0blkp
unit: sectors
first-lba: 512KiB
last-lba: 28GiB

name=factory, start=512KiB, size= 32KiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
name=uboot_env, start= 1MiB, size= 32KiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
name=boot_a, start= 2MiB, size= 256MiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=04fb8c79-34ec-403e-ad5d-db205c76eff1
name=boot_b, size= 256MiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=999c1c6d-eb10-4656-a4ea-0bd5a88fa4e2
name=system_a, size= 3GiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=ff2a7ab6-5290-4d1c-bcb4-2b60f62ea961
name=system_b, size= 3GiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=3ee62a15-2457-4b7a-9e8e-785e1a9867f2
name=app_a, size= 19GiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=c2d963d5-5601-4f0b-9959-c6b543b40a41
name=app_b, size= 1GiB, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=d52e57e6-8bb7-4974-9282-fdecd05c7c92
name=home, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=b8753fb5-3a4c-4de7-b6c0-4fd4a705f750

描述文件格式说明

  • label: gpt 分区表为 GPT 模式。

  • device: 设备名。

  • unit: sectors 默认容量单位。

  • first-lba: 512KiB 第一个分区可用的起点。

  • last-lba:7GiB 可用最大容量。

  • name 分区名称。

  • uuid 分区标识符。

  • start 分区开始字节。

  • size 分区大小。

分区功能说明

  • factory 工厂参数,主要保存产品化需要固定的参数,如产品序列号、MAC 地址等。保存数据格式与U-Boot相同,但提供更多的配置命令。

  • uboot_env U-Boot 环境变量。

  • boot_a 启动分区。支持 AB 方式升级功能,实现零中断无缝升级,快速回滚,减少等待时间。

  • boot_b 启动分区。支持 AB 方式升级功能,实现零中断无缝升级,快速回滚,减少等待时间。

  • system_a 根文件系统。采用只读的 erofs 格式。通过 OverlayFS 技术与 app 分区合并为支持任意读写的根文件系统。清除 app 分区即可恢复 system 分区原始状态,保证系统可靠性。

  • system_b 根文件系统。采用只读的 erofs 格式。通过 OverlayFS 技术与 app 分区合并为支持任意读写的根文件系统。清除 app 分区即可恢复 system 分区原始状态,保证系统可靠性。

  • app_a Overlay 分区。

  • app_b Overlay 分区。

  • home 用户分区。

自定义分区表

用户可根据实际需求自定义分区表,适配不同的容量或调整分区大小,优化资源利用,提升灵活性。

分区表修改规则

分区表的大多配置和系统相关,分区表修改需要遵守一定的规则,避免出现描述文件配置错误导致的系统异常。分区表的修改规则如下:

  • label: gpt 分区表为 gpt 模式,固定值,请勿修改。

  • unit: sectors 固定值,请勿修改。

  • first-lba: 512KiB 由于 emmc 的erase group为512 KiB,所以0-512 KiB全部给分区表使用,避免破坏分区表。

  • last-lba: 请至少预留 32KB 作为备份分区表的写入位置。

  • name 启动和 OTA 功能会使用该名称,请勿修改。

  • type 分区类型,请勿修改。

  • uuid 系统其他功能会依赖该 ID 作为分区定义,请勿修改。

  • uboot_env 该分区偏移量 start 固定为 1 MiB,请勿修改。

  • start & size & first-lba & last-lba 单位支持 KiB、MiB、GiB,请选择合适单位且使用整数。

    注意:start、size、first-lba、last-lba 的默认单位为 512 Byte。修改分区表时为了直观,不建议使用默认单位。

  • start 若不配置,系统会自动根据上一分区的 start 和 size 计算。

  • size 仅在最后一个分区可不填写,系统会根据 last-lba 自动计算。

修改分区表

注意: 修改分区表需在 zdocker 环境中执行。关于如何进入 zdocker 环境,请查看快速上手

  1. 用户可按需修改分区表。请注意修改分区表需符合分区表修改规则。

  2. 修改完成后,进入 Buildroot 目录,执行 make 命令,就可重新生成分区表。返回结果示例如下所示。

    cd buildroot
    make
    >>> Create GPT image
    Create disk(30064803840)
    Write gpt to disk
    Dump gpt.img
    Update output.yml
    Disk dev_mmc0blkp: 28 GiB, 30064803840 bytes, 58720320 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 4380557C-2030-421B-9437-B4BE4F484361

    Device Start End Sectors Size Type
    dev_mmc0blkp1 1024 1087 64 32K Linux filesystem
    dev_mmc0blkp2 2048 2111 64 32K Linux filesystem
    dev_mmc0blkp3 4096 528383 524288 256M Linux filesystem
    dev_mmc0blkp4 528384 1052671 524288 256M Linux filesystem
    dev_mmc0blkp5 1052672 7344127 6291456 3G Linux filesystem
    dev_mmc0blkp6 7344128 13635583 6291456 3G Linux filesystem
    dev_mmc0blkp7 13635584 53481471 39845888 19G Linux filesystem
    dev_mmc0blkp8 53481472 55578623 2097152 1G Linux filesystem
    dev_mmc0blkp9 55578624 58720255 3141632 1.5G Linux home
  3. 执行以下命令,验证分区表 。

    若需要多次确认分区表,可使用下面命令提高验证效率。

    cd buildroot/board/zhihe/common/images/gpt/

    # -s 参数是eMMC的容量,配置值比实际容量大就可以
    # truncate 稀疏方式创建的文件并不会占用指定的空间
    truncate -s 8G dev_mmc0blkp

    # 创建分区表,显示分区信息
    sfdisk dev_mmc0blkp < gpt_emmc.txt

    # 清理分区临时文件
    rm dev_mmc0blkp