This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM6421:AM6421:BuildRoot 的映像大小缩减 — 寻求从 16MB 到<8MB 的建议

Guru**** 2927270 points

Other Parts Discussed in Thread: AM6421

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1652353/am6421-am6421-image-size-reduction-for-buildroot---seeking-advice-to-go-from-16mb-to-8mb

器件型号: AM6421

工具/软件: BuildRoot

问题描述:

我们目前正在开发基于 AM6421 的定制电路板。 我们对启动映像有非常严格的存储限制、并使用 BuildRoot 作为构建系统。

尺寸要求:

  • 引导加载程序 (SPL/U-Boot): 必须 < 1MB

  • 总系统映像(内核+ RootFS): 必须 < 8MB

  • 当前状态: 我们已成功实现小于 16MB 的总图像大小。

当前实施的方案:

  • 内核: 使用压缩 gzip

  • RootFS: 使用 squashfs

  • 平台: 定制 AM6421 电路板。

  • 我们需要将剩余大小缩减约 50%(从 16MB 降至 8MB)。 我们已经采用了标准的压缩方法、并正在寻找任何 高级提示、技巧或特定的 BuildRoot 配置 、以帮助我们达到这一积极的目标。

所需模块和外设:
图像必须保留以下功能。 请就我们可以设置的任何特定配置标志提出建议、以尽量减少这些特定组件的占用空间:

外设:

  1. USB

  2. UART

  3. GPMC NAND 闪存

  4. QSPI NOR 闪存

  5. 2 个以太网端口(RGMII 接口)

  6. GPIO

  7. LPDDR

模块和软件栈:

  1. HSR/PRP: 支持非卸载和 ICSSG 卸载模式(包括相关的 PHY 驱动程序)。

  2. PTP: 带 CPTS PHC(精确时间协议)。

  3. 远程处理器和 Rpmsg: 用于 R5 和 M4 内核。

  4. TI 固件: R5 和 M4 内核所需的固件。

  5. PRUSS 固件。

  6. 网络堆栈:

    • OpenSSH(sftp 服务器)

    • Dropbear

    • 基本 Web 服务器页面加载功能。

  7. 以太网驱动程序: CPSW-NUSS(MAC/交换机)和 ICSSG-PRUETH。

  8. USB DTLS。

具体问题:

  1. 考虑到解压缩开销、是否有任何特定的内核压缩算法(例如 XZ、ZSTD)能够提供比 AM6421 的 GZIP 明显更好的比率?

  2. 是否可以对 8MB 目标使用比 Squashfs 更高效的文件系统(例如,带压缩的 EROFS)?

  3. 是否有特定的 BuildRoot “Hacks“或 Kconfig 片段来去除 Linux 内核和 Busybox、使其超出默认值(例如,删除 printk 支持,模块卸载,特定的网络调试挂钩)以节省空间?

  4. 关于 ICSSG 卸载和固件要求、是否有最小的固件 Blobs 可排除未使用的工业协议 (EtherCAT、Profinet) 以节省 rootfs 上的空间?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Manish:

    这是一个涉及多个层的非常广泛的问题。

    您的具体问题

    1. 这是一个 通用的上游 Linux 问题。 AM64xx 没有专用的解压缩器。 Xz 的压缩效果会更好、但解压缩标头会更高。  
    2. 这也是另一个通用的 Linux 问题。  EROFS 将更高效,但 我建议检查 BuildRoot 邮件列表和 EROFS 上游文档以进行压缩调整。
      请注意 AM64xx:如果您将 EROFS 直接安装在由 GPMC NAND 驱动程序支持的原始 MTD 分区上、请仔细验证您的 MTD 分区布局。 在 NAND 上的 EROFS 直接安装和 UBI 分层之间存在已知的交互、如果配置不正确、可能会导致安装失败。
    3. 这也超出了本论坛的范围。  BuildRoot 邮件列表和内核文档是正确的资源。
      1. 但是、当 CONFIG_PRINTK=n 时:在 AM6421 上、这可能会损坏 R5F 和 M4F 内核的 Remoteproc 跟踪缓冲器。
      2. CONFIG_DEBUG_FS=n:这会删除 debugfs 支持的 Remoteproc 控制接口
    4. 您只能保留所需的固件、并相应地更新 DT。 如果需要更多信息、请创建一个专用主题、并将该主题分配给相关团队。
      请参阅:  
      https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/latest/exports/docs/linux/Foundational_Components Linux_Drivers PRU_ICSSG_Ethernet.html

    您可以尝试探索 falcon 引导 以减小引导加载程序大小。 A53 SPL 和 U-boot 正确的 命令将在 falcon 引导中被旁路。  

    此外、请查看 ti_arm64_prune.config。 它删除了 不相关的平台驱动程序。  

     ti_eary_display.config 将剩余的大部分功能转换为可加载模块、而不是内置模块。 这也有助于去除内核。

    请参阅: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/latest/exports/docs/linux/、Foundational_Components_Kernel_Users_Guide

    此致、
    Vinu