Files

45 lines
9.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: petalinux-emmc
description: Build, reuse, deploy, recover, and hardware-validate a PetaLinux production system whose kernel and ext4 rootfs reside on eMMC or removable SD/TF while Zynq boots FSBL and U-Boot from QSPI. Use for PR26-style two-stage production deployment; HJX9009 uses TF instead of nonexistent eMMC.
---
# PetaLinux eMMC/TF 正式系统
目标是从已经可恢复的 QSPI 过渡 Linux 部署正式 FIT 内核与持久 ext4 根文件系统,完成真实断电启动和读写验收。名称中的 `emmc` 指 PR26 的第二阶段;**介质和控制器由板卡证据决定**,不能从 `/dev/mmcblk0` 推断是板载 eMMC。PL bit→bin 和应用程序发布属于另外的 Petalinux-pl/ps 任务,不得冒称完成。
## 板卡和输入
若用户尚未指定板卡,先让用户选择:`1. HJX9009 2. emv9.3 3. ipots 4. others`。HJX9009 必须阅读 [references/hjx9009-tf.md](references/hjx9009-tf.md);其 J1 TF 接 PS SD0、没有 eMMC。其余板卡目前没有通过本 skill 验证的正式系统 profile,阅读 [references/board-intake.md](references/board-intake.md),取得原理图/HDF 或等效硬件配置并查实存储、启动、恢复和电源细节后才可烧写;不能套用 HJX9009 的 MIO、分区或桥接。
阅读项目 AGENTS/CLAUDE adapter、全局/项目 bmem 和 PR26/Result 原文。将用户交付的当前 Vivado `.hdf`(2018.1)或相应版本 `.xsa`、bit、PS7 初始化、板卡修订、PetaLinux/Vivado/SDK 版本、可恢复镜像与串口/JTAG路径绑定。旧参考工程只择项审阅,不整树覆盖;历史同名 HDF、旧 IP 和密码不是当前输入。现场网络地址、TFTP 绑定和介质容量每次实测,不复制笔记。
## QSPI 前置门禁
首次安装前**实际证明**目标板已经从 QSPI 冷启动进入可恢复的过渡 Linux:记录 BootROM/U-Boot/QSPI FIT 来源、initramfs、MTD 布局、网络/TFTP、分区和校验工具、已知良好 QSPI 镜像及恢复链。若板上已是正式 TF/eMMC 系统,先证明 QSPI 救援 FIT 仍在且可通过受控回退路径启动,不能要求默认 `bootcmd` 重回 QSPI-only,也不能为了检查而无条件重写现有生产 bootenv。不能以 delivery 文件存在或上次成功代替当前门禁。若过渡/救援系统尚未部署或与当前 HDF/板卡不匹配,调用共享 `petalinux-qspi` skill 完成其构建/部署/验收,然后返回本流程;保留现有生产系统的可恢复配置,该调用不免除板卡输入和写前边界检查。若过渡系统可启动但目标介质尚未正常枚举,先修复/验证检测链,不能通过格式化解决未枚举问题。
## 构建和复用
### 与 SDK→Linux 应用迁移配套的驱动门禁
若正式 TF/eMMC 系统要运行从 SDK 裸机工程移植的 PS 应用,E1 构建前逐项核对该应用所依赖的 PL AXI MMIO、PS/EMIO GPIO、SPI、ADRV9009/Talise、DMA/中断及物理 DDR 邮箱。对照**当前** bit/HDF、目标 DT、`/proc/iomem`、`/dev`、内核 config/模块和应用 ABI,列出已由 Linux 提供的接口与缺失接口。缺失驱动、DT 节点、模块自动加载、固件或用户态 HAL 时,应把源码和 recipe 放入正式 PetaLinux 工程,在 kernel、DT、rootfs 与 FIT 同源构建并纳入 `build_inputs.json`/哈希门禁;不能只在运行板上临时 `modprobe`、`mknod` 或用旧交付 FIT 冒充完成。
尤其不能沿用 SDK 的固定 DDR 地址而直接写 `/dev/mem`:先证明目标范围在 DT `reserved-memory` 中保留,且不与 Linux `System RAM`、kernel code/data、CMA、rootfs 或 DMA buffer 冲突。HJX9009 旧 SDK `0x00400100` 邮箱在 2026-09-16 当前 Linux `/proc/iomem` 中属于 kernel code 范围、DT 无 `reserved-memory`;迁移应用必须停止使用该地址,改为受管理的 IPC/驱动接口或重新协商并保留安全的物理范围。当前板上已有 `/dev/spidev1.0` 和 root 可用的 `/dev/mem`,但这不证明 AD9528/ADRV9009 初始化、JESD 或自动 DPD 控制已移植。若新增 UIO/专用驱动,按新 HDF 确认 `reg` 大小、时钟、复位与中断,加入模块及启动加载规则,并以真实板端探针和功能测试验收。
任何上述改动都会改变正式系统输入,须重做相应 G1–G3 和 E1–E4;旧的 QSPI 救援 FIT 与分区边界不得因应用驱动升级而被无条件覆写。
采用独立正式工程。保持 `boot media = QSPI`、`BOOT.BIN = 同一硬件交付的 FSBL + U-Boot`,正式 `image.ub` 在经验证的 eMMC/TF BOOT 分区,根文件系统在第二分区 ext4;实际 FIT/启动路径必须与板卡检测条件相容。需要早期桥接 initramfs、软件 CD 旁路或根 UUID 时,把源文件、DT、U-Boot overlay、rootfs 配置和启动参数都算作构建输入,不得仅改环境后仍声称镜像相同。`BOOT.BIN` 不自动包含 PL bit 或 FIT。QSPI kernel 分区中的过渡 `image.ub.qspi` 保持可恢复。
先为当前输入生成 `build_inputs.json`,可用 sibling `petalinux-qspi/scripts/qspi_cache.py capture` 的通用指纹捕获接口;HJX9009 使用稳定的 [references/hjx9009-profile.json](references/hjx9009-profile.json) 作 profile 文件。指纹包含 HDF/bit、所有 config/recipe/DT/U-Boot/桥接源、工具版本、BOOT 组成与根文件系统方案;部署时变化的 IP/密码不进指纹。再用 [scripts/emmc_cache.py](scripts/emmc_cache.py) 检查当前指纹与交付的 `BOOT.BIN`、`image.ub`、`rootfs.tar.bz2`、`build_inputs.json`、`summary.json`、`MANIFEST.md` 和 `SHA256SUMS`。构建门禁 G0=输入、G1=HDF 导入、G2=配置、G3=构建打包;仅在检查返回 `reusable=true`、G0–G3 均 PASS、产物与当前硬件输入/启动方案一致时跳过重建。文件存在、mtime、旧 bit 相同或仅有一次启动日志均不足;旧交付缺可核验指纹/清单时补齐证据或重建。复用构建**不能**跳过当前介质和板级部署验收。
示例:`python <skill>/scripts/emmc_cache.py check --current <new-build_inputs.json> --delivery <production-delivery>`。`summary.json` 中 `build_gates.G0..G3.status`(或 `gates.G0..G3.status`)均须为 `PASS`。若目标板当前已有同哈希 FIT、同根 UUID/内容与同 BOOT,先执行 E4 验收;达到所有门禁可报告“当前部署已是最新”,不必重复分区或烧写。
## 顺序门禁
1. **E0 前置/只读:** QSPI 门禁;当前 HDF/板号;U-Boot/SDHCI/MTD;介质 CID、容量、分区、挂载;首尾与拟用地址范围的重复只读校验。TF/eMMC 容量可见不证明高地址可写;出现不稳定范围时缩小到经验证范围或换介质,绝不盲用标称容量。计算唯一分区计划、UUID、空间余量、恢复路径和本轮目标文件哈希。
2. **E1 构建:** 从同一 HDF 生成/审阅 PS7、设备树和 FSBL;配置正式 kernel/SD 驱动、ext4 rootfs 归档与必要 initramfs;构建并解包审计。生成 FIT、rootfs 归档和仅含 FSBL+U-Boot 的 BOOT.BIN,记录 BIF、版本、SHA-256、启动命令与构建日志。不得直接运行旧 `emmc_auto_format.sh`/`auto_up_emmc.sh`:它们写死设备/IP、无严密失败门禁,可能清空分区和 QSPI bootenv。
3. **E2 介质部署:** 用户的正式系统部署请求包含目标介质重建时,仍先核对 CID/容量/无其它介质、精确设备节点、挂载点与分区计划;写前停用自动挂载并可靠卸载。先把全部产物传输到安全暂存区、检查文件大小/哈希/可用空间,任何传输失败即停止,不允许落入格式化或 Flash 擦除。按已验证范围分区/格式化,回读分区表、fsck;写 FAT BOOT 的 `image.ub` 并读回哈希;将对应 `rootfs.tar.bz2` 解包到 ext4,检查 `/sbin/init`、权限、设备节点及关键文件,sync、卸载、fsck、只读回读。若最终归档与上卡内容有差异,明确记录,不得报告逐字节一致。
4. **E3 QSPI 启动更新:** 仅在 E2 全通过、旧 QSPI 镜像与 JTAG 恢复可用时,更新必要的 FSBL/U-Boot 或持久 bootcmd。计算 boot/bootenv/kernel 的实际范围;不要清空 bootenv 或覆盖救援 FIT。QSPI 擦写后做**全长回读比较与 CRC/哈希**,环境回读确认;不能只看 `flashcp`/`sf write` 无报错。卡缺失或 FIT 失效时的 QSPI 救援分支必须单独冷启动实测。
5. **E4 现场验收:** 至少两次完整断电冷启动,串口证明 `QSPI FSBL/U-Boot → 目标介质 FIT → 目标 ext4 /`;核对 FIT hash、CID、根 SOURCE/FSTYPE/UUID、实际网络、MTD、FPGA manager(仅存在不等于 PL 已部署)。做受控文件写入、sync、断电,再读回持久化;检查 ext4/mmc 错误和 fsck。再单独验证无卡/损坏 FIT 的 QSPI 救援路径。某项未完成记为 `PARTIAL`/`BLOCKED`,不称“全功能完成”。
所有 U-Boot/串口命令逐条核对退出状态、期望回显、实际 `$filesize` 和 CRC。不能让 TFTP 失败后旧 DDR 数据落入写入步骤。把自动状态/log 放在项目 `Notes/auto/`;manifest 记录门禁、证据路径、板卡/介质身份、输入与产物哈希、实际网络和遗留限制。按项目 bmem 协议导入用户 Notes、沉淀会话和可持久结论并同步;分别报告本地/远端/中心同步状态。