Files
firmware-lowlevel-development/skills/firmware-lowlevel-psp-development/references/configuration-boundaries.md
T

9.1 KiB
Raw Blame History

PSP 配置边界与检查

PSP 可以维护

  • 参考 PSP 已有的 psp.json 字段和目录布局;
  • configs/、param/、scripts/ 和项目实际采用的等价目录;
  • 应用可见的 IO/GPIO 语义、LED/按键/IRCUT/PWM/PTZ 等运行配置;
  • Sensor、Media 和 AIPlugin 的项目级配置与 profile;
  • BSP IMG 的绝对路径引用、最终内存/分区摘要和依赖锁定;
  • 用户提供的 ISP/PQ、标定参数、Logo 等必要的小型平台资源;
  • 精简结果文档和 sidecar metadata。

固定打包框架、BSP IMG、大型模型、公共运行库、构建缓存、烧录包及持续变化的日志/验证记录不进入 PSP 仓库。

不取得的所有权

PSP 不直接修改 BSP 的 cvi_board_init.c、DTS/DTSI、驱动、Bootloader、分区表或内存实现。CV181X 的 memmap.py/ION_SIZE,以及 CV184X board defconfig 中的 CONFIG_ION_SIZE、CONFIG_RTOS_ION_SIZE 由 BSP 工作流根据用户明确的媒体内存需求修改。SigmaStar 等未提供规则的平台由用户手工处理,并保留警告。

PSP 可以保存和核对最终值。Media/AIPlugin 需求要求改变 BSP 时,生成需求清单,经 Etunel Hub 路由 BSP;接收新的 BSP handoff 后再更新 PSP。

PSP 也不修改 Media/AIPlugin 公共源码、训练/转换模型、ISP/PQ 配置或伪造兼容版本;缺少上游成果时交 Hub 路由。

GPIO 一致性

交叉核对 BSP handoff/Pinmux 结果与 PSP 中实际存在的 GPIO 配置,包括但不限于:

  • configs/bsp.json;
  • scripts/pinmux.sh;
  • configs/ptz/motorGpio.json;
  • 其他包含 GPIO 编号和应用语义的配置。

发现 GPIO 被 BSP、DTS/DTSI 或其他设备树模块占用时,停止 PSP 验收并提出 BSP 变更请求。没有对应 GPIO 时明确记录“无此 GPIO”,不伪造编号。PSP 只修改自己的运行语义,不越界释放 Kernel IO。

CV18 Sensor 配置基线

CV18 系列以 PSP 内唯一的 sensor_cfg.ini 为主要 Sensor 配置。文件可能位于参考 PSP 的 configs/media/sensor/、configs/media/isp/ 或等价目录;保持参考布局,不为统一目录而搬移。存在多个同名候选、没有候选、软链接或无法确认当前生效文件时停止。

先从原理图或 GPIO list 确认 Sensor 型号、数量、I2C bus/address、MIPI device/lane、P/N swap、MCLK、reset/power GPIO 等实际字段,再用规格书中的 Sensor 类型锁定枚举标识符。不得只凭相近命名、参考板旧值或枚举数字猜选型。每个 [sensor]、[sensor2] 等实际启用 section 都要分别给出规格书选定的枚举名称和依据。

Sensor 拓扑变更的依赖闭包至少包含:唯一 sensor_cfg.ini、Media profile/config/param、ISP/PQ 文件引用和 hash、AIPlugin 通道/输入配置、pinmux/reset/power/MCLK/PWM 脚本,以及与通道数有关的资源拷贝映射。只改 sensor_cfg.ini 不算闭环;不适用项也要写明原因。

Skill 已内置本流程确认的两份枚举基线,运行时不得再到 SDK 目录或附件目录中搜索“最新”或相近文件:

validate_psp.py 根据 --expected-chip 自动选择对应内置文件并在结果中记录内置路径和 SHA-256。若规格书 Sensor 在内置表中不存在,或项目资料明确证明目标 Media SDK 使用不同枚举版本,停止自动适配并报告基线差异;不得退回目录扫描或猜测近似枚举。此时可在用户提供精确新头文件后用 --sensor-enum-header 显式覆盖并记录 source=override,随后应按独立 skill 更新流程评审是否替换内置基线。

配置规则如下:

  • CV181X(CV1810、CV1811C、CV1815JA 等):读取 sensor_list.h 中 typedef enum _SAMPLE_SNS_TYPE_E,sensor_cfg.ini 的 name 填枚举名称,例如 SMS_SC4336P_MIPI_4M_30FPS_10BIT,不能填枚举序号或自行换算值。
  • CV184X(CV1841CP、CV1842CP、CV1842HP、CV1843HP 等):读取 sensor_cfg.h 中 typedef enum _SNS_TYPE_E,先按规格确定枚举名称,再把该枚举的显式整数值写入 sensor_cfg.ini 的 name;建议保持头文件中的十六进制表达形式。结果同时记录枚举名称和值,不能只记录一个无来源数字。

调用 validate_psp.py 时无需提供头文件路径;只需为每个实际 Sensor section 根据规格选型生成 --expected-sensor sensor=ENUM_NAME、--expected-sensor sensor2=ENUM_NAME。工具会自动选取内置头文件,记录 sensor_cfg.ini 与枚举表 hash,并按芯片系列验证名称或数值表示;枚举不存在、数值不可解析、section 缺少规格期望或配置不一致均阻止 candidate。--sensor-enum-header 仅用于上述已确认的版本差异覆盖,不是日常必需输入。

ISP/PQ 用户边界

ISP 和 PQ 文件由用户更新,Skill 不生成、不选择、不修改,也不把参考值自动声明为适配完成。若参考 PSP 已包含这些文件,保留其目录和内容,把状态记录为 USER_OWNED/PENDING;用户提供更新后记录精确文件/hash 和 USER_REPORTED 确认。ISP/PQ 未更新不阻止完成 PSP 的其他静态检查,但相关设备检查保持未执行或风险项,不能据此声称图像效果已经通过。

ISP/PQ 清单必须同时证明配置中的实际引用、文件存在性和 SHA-256。缺文件、引用旧文件、目录里有文件但没有任何生效引用,均不能标为已更新;Sensor 型号、数量、lane 或 ISP profile 变化后,旧确认自动失效。

Media 与 AIPlugin

CV181X 的新项目或 Media/AI 变更先读源码与 Release 取值指南,并用 audit_cv181x_media_ai.py 按精确 Release/profile 枚举全部字段、默认值、代码读取线索、最终 PSP 差异和 VPSS 通道图。source_hits_hint_only 不是语义证明;每个拟修改字段仍要从代码、当前 SDK 枚举/范围、产品需求或硬件事实确认。没有参考 PSP 时不得把 Release 配置直接当成完整 PSP,也不能因为字段目录存在就认为系统可运行。

至少核对:Media 版本、Sensor 型号/数量/总线、用户负责的 ISP/PQ 状态、AIPlugin 版本、AIPlugin profile 的 SDK、模型平台和运行库目录。版本冲突默认阻塞;只有有实际负责人确认的兼容例外才能继续,并写入最终结果。

未声明的参考配置可以继承,但必须把关键继承项列给用户确认。Media 或 AIPlugin 未提供差异不等于自动禁用,也不等于其真实兼容。

Media 的运行库或驱动列表为空时默认阻塞。只有存在 metadata/media-runtime-exception.json,明确替代来源、目标路径、文件/hash、适用 Media 版本、原因、负责人和确认时间,并在当前应用工程验证替代来源真实存在,才能按例外继续。空列表不能只靠口头说明或“系统里已有”放行。

BSP build 变化的依赖闭包至少包含:psp.json 全部 BSP/IMG 资源路径、metadata/bsp.lock.json、驱动/模块资源映射、Boot/Default、旧 build ID/旧路径残留。分区变化的依赖闭包至少包含:psp.json 分区顺序/大小/file、Boot/Default 的 offset/size/mtdparts/内嵌 partition JSON、所有 MTD 索引、DATA 工具映射、release.py 的 mkAiData.py 参数和最终分区 CSV/摘要。

psp.json 和绝对路径

应用打包代码已依赖参考 psp.json,因此默认保持文件名、层级和字段。新增 BSP lock、允许覆盖和治理信息使用 metadata/ sidecar;变更 psp.json schema、文件名、目录、启动调用或应用可见 GPIO 语义时,先通过 Etunel 取得技术负责人和应用层确认。

应用层与底层共用 BSP 环境,所以保留 psp.json 的绝对路径。路径检查覆盖 PSP 中所有 JSON,以及 .ini、.cfg、.conf、.sh、.py 文本,不能只检查 psp.json。允许团队公共构建根;/home/<用户>、/tmp、/var/tmp 等个人/临时路径必须警告,正式交付默认失败。只有用户确认的共享根或本轮验证根才能通过重复的 --allowed-absolute-root <精确绝对路径> 放行,放行记录必须进入验证结果。外部构建输入不存在时失败,其他配置/脚本路径不存在时至少警告;不得自动寻找名称相近或日期更新的替代物。

同名配置覆盖

现有打包顺序允许 PSP 后复制并覆盖应用配置,但不能静默覆盖。比较应用 orgConfigs 与 PSP configs、应用 orgParam 与 PSP param 等真实映射,输出相对路径、双方 hash 和最终生效方。

默认保留应用工程中的 orgConfigs、orgParam,并从 PSP 候选内容中移除重复的同名文件。这样不会让参考 PSP 在组包时意外覆盖应用配置,也不需要用户逐个确认“继续保留应用值”。

只有硬件适配确实要求 PSP 成为最终生效方时,才向用户展示双方路径、hash、差异和影响,并在确认后把精确路径写入 metadata/allowed-overrides.json。不要为绕过门禁添加通配符;schema 见数据契约。