RK3588 debian11的SDK代码新增一个分区怎么修改

具体要解决的问题:

RK3588 debian11的SDK代码新增一个分区,涉及哪些文件的修改以及怎么修改,比如新增加一个share数据分区,文件系统格式为ext4, 具体怎么修改?

我这里以在RK3588 Debian 11 SDK中新增一个名为 share 的ext4数据分区为例,详细步骤如下。

整个过程的核心逻辑是:在 parameter.txt 中定义分区,在 package-file 中声明其镜像,然后生成一个空的ext4镜像供打包,最后(可选)在文件系统中设置自动挂载。

修改步骤详解

1. 修改分区表:parameter.txt

这是最关键的一步,直接定义了分区的起始地址和大小。文件路径通常在 device/rockchip/rk3588/parameter-xxx.txt

  • 核心语法 :分区在 CMDLINE 字段的 mtdparts= 参数中定义,格式为 size@offset(partition_name)

    • sizeoffset 的单位都是扇区(1扇区 = 512字节)。
    • 所有数值均为十六进制
  • 示例 :假设我们要在 rootfs 分区后、userdata 分区前,新增一个大小为 256MBshare 分区。

    1. 计算大小 :256MB = 256 * 1024 * 1024 = 268,435,456 字节。转换为扇区:268,435,456 / 512 = 524,288 个扇区,十六进制为 0x80000
    2. 计算起始地址 :假设 rootfs 分区的起始地址是 0x00078000,大小是 0x01c00000。那么 share 分区的起始地址 offset 就是 0x00078000 + 0x01c00000 = 0x01c78000
    3. 修改文件 :打开 parameter.txt,在 CMDLINE 中找到合适位置插入新分区。修改后,其后的 userdata 分区起始地址也需要相应更新。

    修改前

    复制代码
    CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),0x00040000@0x00028000(recovery),0x00010000@0x00068000(backup),0x01c00000@0x00078000(rootfs),0x00040000@0x01c78000(oem),-@0x01cb8000(userdata:grow)

    修改后

    复制代码
    CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),0x00040000@0x00028000(recovery),0x00010000@0x00068000(backup),0x01c00000@0x00078000(rootfs),0x00040000@0x01c78000(oem),0x00080000@0x01cb8000(share),-@0x01d38000(userdata:grow)

    注意 :这里将 userdata 的起始地址更新为了 0x01d380000x01cb8000 + 0x80000)。

2. 修改打包清单:package-file

这个文件告诉打包工具哪些镜像需要被打包进最终的固件。文件路径通常在 tools/linux/Linux_Pack_Firmware/rockdev/package-file

  • 示例 :在文件中添加一行,指定分区名和对应的镜像文件路径。

    复制代码
    share Image/share.img
3. 创建并打包分区镜像

你需要为这个新分区创建一个空的、已格式化的镜像文件,供打包脚本使用。

  • 创建空镜像 :在SDK的 Image/ 目录下(如果不存在则创建),执行以下命令生成一个空的ext4格式镜像。

    bash 复制代码
    # 进入SDK根目录
    cd your_rk3588_sdk_root
    # 创建Image目录(如果不存在)
    mkdir -p Image
    # 生成一个256MB的空ext4镜像
    dd if=/dev/zero of=Image/share.img bs=1M count=256
    mkfs.ext4 Image/share.img
4. (可选)配置开机自动挂载:修改根文件系统的 /etc/fstab

如果你希望系统启动后,这个 share 分区能自动挂载到某个目录(如 /mnt/share),则需要修改根文件系统内的 etc/fstab 文件。

  1. 解包根文件系统 :SDK中的根文件系统通常是一个镜像文件(如 rootfs.img)。你需要先将其挂载或解包到一个临时目录。

    bash 复制代码
    # 创建一个临时目录
    mkdir rootfs_mount
    # 挂载rootfs镜像(假设镜像文件为 ubuntu_rootfs/rootfs.img)
    sudo mount -o loop ubuntu_rootfs/rootfs.img rootfs_mount
  2. 修改 fstab :编辑 rootfs_mount/etc/fstab 文件,在末尾添加一行。

    复制代码
    /dev/block/by-name/share /mnt/share ext4 defaults,noatime 0 2

    这里使用 by-name/share 这种更稳定的方式引用分区。

  3. 创建挂载点:在根文件系统中创建对应的挂载目录。

    bash 复制代码
    sudo mkdir -p rootfs_mount/mnt/share
  4. 重新打包:修改完成后,卸载镜像。

    bash 复制代码
    sudo umount rootfs_mount

    如果SDK的打包流程需要特定的 rootfs.img,确保这个修改后的镜像会被使用。

关键注意事项

  • 地址计算 :新增或调整分区时,必须精确计算每个分区的起始地址,确保它们首尾相连、互不重叠。任何计算错误都可能导致系统无法启动。
  • 备份:在修改任何配置文件前,强烈建议先进行备份。
  • 编译与打包 :完成上述修改后,通常需要重新执行SDK的编译和打包脚本(如 ./build.sh./mkfirmware.sh),以生成包含新分区的最终固件 update.img
  • userdata:grow 分区 :注意 parameter.txt 中最后一个分区通常带有 :grow 标志,它会自动占用所有剩余空间。如果你在其前插入新分区,记得要调整它的起始地址。

总结

整个流程可以概括为:定义分区 (parameter.txt) -> 声明打包 (package-file) -> 准备镜像 (share.img) -> (可选) 配置挂载 (fstab)

其中,修改 parameter.txt 并精确计算分区地址是最核心也最容易出错的环节,务必仔细核对。

相关推荐
擎天柱工坊3 天前
干货 | RK3588硬件全开源设计笔记1-芯片PCB叠层阻抗设计
学习笔记·rk3588·pcb设计·芯片特性·叠层设计·阻抗设计
禅口魔心5 天前
RK3588硬件 Agent 代码详解
rk3588·嵌入式开发·硬件agent
禅口魔心5 天前
RK3588(Rock 5T)硬件 Agent 搭建实录:从环境到跑通第一个闭环
rk3588·嵌入式开发
Lee_jerome16 天前
从 PyTorch 权重到 RK3588 板端推理:ResNet18 二分类模型完整部署教程
pytorch·边缘计算·rk3588·模型部署·onnx·resnet18·int8量化
赋创小助手24 天前
赋创FR50 AI BOX部署解析:RK3588+LQ50 Duo架构、320 TOPS与模型适配参考
人工智能·架构·rk3588·ai box·大模型本地部署·fr50 ai box·lq50 duo
郭涤生25 天前
ARM大小核架构调度原理与RK3588嵌入式配置复习
arm开发·架构·rk3588
Industio_触觉智能1 个月前
瑞芯微ISP内核驱动深度解析|ISP39 AI协处理器与完整业务链路总结(下篇)
人工智能·嵌入式硬件·硬件架构·硬件工程·rk3588·isp·rk3576
xz驱动分享1 个月前
Linux DMA 子系统学习笔记
linux·dma·rk3588·嵌入式软件
XMAIPC_Robot1 个月前
RK3588+8路AHD+双CAN工控方案|多路模拟视频同步采集+工业总线联动AI边缘检测落地
人工智能·rk3588·ai视觉·图像采集·多路ahd视频