# 媒体内存与分区适配 ## 通用规则 媒体内存由用户提供明确数值和单位。Skill 可以转换为目标文件已有格式,但不根据算法、媒体规格或经验自行计算容量。 写入前读取实际构建引用和解析格式;写入后重新解析,验证字节值、唯一性和已知容量约束。未知单位、目标键重复、文件不唯一或配置链不明确时停止对应修改。 ## CV181X 媒体内存 规范化芯片型号后,`CV181*` 路由为 CV181X。典型型号包括 CV1810、CV1811C、CV1815JA。 从参考项目实际构建配置定位唯一生效的 `memmap.py`,只修改: ```python ION_SIZE ``` 保持该文件现有的数值表达、对齐和注释风格。不存在、存在多个生效候选或 `ION_SIZE` 语义不明时停止,不创建推测性文件。 ## CV184X 媒体内存 规范化芯片型号后,`CV184*` 路由为 CV184X。典型型号包括 CV1841CP、CV1842CP、CV1842HP、CV1843HP。 根据实际板卡 build type 定位唯一的: ```text cv18xxcp_wevb_xxxx_spinand_defconfig ``` 用户必须同时明确: ```text CONFIG_ION_SIZE CONFIG_RTOS_ION_SIZE ``` 小核不使用 ION 时也要明确给出零值或禁用值。只修改板卡 defconfig,不直接修改 `configs/kernel/.config`。若 `.config` 中存在不同值,记录差异并通过后续配置生成验证;项目流程把 `.config` 当作不可再生输入时停止并报告。 `xxxx` 是板卡版本;每套配置下应定位一个板卡 defconfig。默认继承参考版本。用户改变版本时按主工作流一致更新整个引用链。 ## 其他芯片 SigmaStar 等其他前缀不自动修改媒体内存。报告目标文件和人工修改警告;GPIO、分区或项目命名等独立工作可以继续。 前缀匹配 CV181/CV184 但项目中不存在对应结构时也不得硬套规则。 ## 分区表差量 用户主要提供发生变化的分区名称和目标大小。未提及的分区名称、顺序、属性、偏移和大小继承参考项目。 1. 从板卡版本、Flash 类型和同步脚本定位唯一生效的分区源定义;不修改 SDK 生成副本。 2. 对项目原有自动顺序布局,按同一规则重新计算受影响的后续偏移。 3. 固定绝对偏移、Boot、保留区域和安全相关分区不自动移动。 4. 检查擦除块对齐、偏移重叠、总容量、保留区以及可用镜像能否装入。 5. 多个分区变体并存且无法从实际 build type 唯一定位时停止。 6. 不修改存储驱动、分区解析器、Boot 选择逻辑或升级策略;这些是新的工作包。 ## 编译后镜像余量门禁 全量 BSP 编译完成后必须从当前项目 `configs/` 唯一定位实际生效的 `partition*.xml`;存在多个候选时,不按文件名或时间猜测,必须通过 `record_build_handoff.py --partition-table <项目内精确路径>` 指定构建实际使用的文件。 对最终版本 imgs 目录执行以下强制检查: - `kernel.bin` 和 `rootfs.bin` 都必须是唯一、非空普通文件;`kerne.bin` 不作为别名,除非后续实际构建和分区契约正式改变文件名; - 按分区 XML 的 `file` 属性查找对应项并将十进制 `size_in_kb` 按 1024 字节换算; - 同一镜像对应 A/B 等多个分区时,以其中最小分区作为有效容量; - `有效分区字节数 - 实际镜像字节数 >= 512 * 1024` 才通过,恰好 512 KiB 允许通过; - 镜像缺失/重复、分区项缺失、大小非法、XML 无法解析或余量不足都阻止 `build_passed` 和 BSP→PSP 交接。 通过结果记录分区表绝对路径和 SHA-256、镜像绝对路径/大小、全部对应分区、最小容量、实际余量和固定阈值。该门禁不允许通过修改阈值、四舍五入为 MB 或选择较大的 A/B 分区绕过。 ## 证据 在 `adaptation_report.md` 记录每个配置键或分区的原值、新值、单位转换、源文件、有效构建类型和检查结果。未知总容量或未执行编译后 kernel/rootfs 余量检查时明确列为未验证,不合成通过。