feat: 发布固件底层开发 Skill 套件
This commit is contained in:
commit
c7ae3b4ce1
72 files changed
+10212
No files matched your search
@@ -0,0 +1,133 @@
|
||||
# 构建、Git、imgs 与 PSP 交接证据
|
||||
|
||||
## 项目内证据目录
|
||||
|
||||
新项目必须包含:
|
||||
|
||||
```text
|
||||
doc/bsp_adaptation/
|
||||
├── adaptation_report.md
|
||||
├── inputs/
|
||||
├── validation/
|
||||
├── handoff/
|
||||
│ └── psp_handoff.json
|
||||
└── status.json
|
||||
```
|
||||
|
||||
`adaptation_report.md` 至少记录参考与目标、芯片/SDK/Flash/系统形态、交付级别、调查范围、验证模式、用户确认、输入依据、修改文件、旧值与新值、继承项、GPIO/DTS 冲突处理、内存/分区检查、未执行验证、风险和真实状态。
|
||||
|
||||
小型 GPIO List、内存或分区需求原样复制到 `inputs/`。大型或敏感原理图、芯片手册和工程资料默认不重复复制,只记录受控路径、版本、适用型号和 SHA-256。禁止保存密钥、token、证书内容或许可证凭据。
|
||||
|
||||
CSV 只有从原理图提取或重新映射 Pinmux 时才作为派生审核证据写入 `inputs/`;它不是唯一事实源。
|
||||
|
||||
## 本地 Git
|
||||
|
||||
`EmxRes` 已有 Git worktree 只用于只读状态、参考项目脏文件发现和差异证据。不得执行 `git init`、`add`、`commit`、`stash`、清理、分支切换、历史改写或 `push`。
|
||||
|
||||
项目创建本身不需要远端 Git。根仓库其他项目的改动不阻塞;与参考或目标重叠的已有改动必须先确认。
|
||||
|
||||
## 项目创建阶段
|
||||
|
||||
仅创建 `config-project` 或只读审查时不执行:
|
||||
|
||||
- `ep_kernel.sh`;
|
||||
- `ep_uboot.sh`;
|
||||
- `EPSYNCSDKConfig.sh`;
|
||||
- `EMX2_BuildSDKTool`。
|
||||
|
||||
这些脚本会将配置复制或 `rsync` 到项目外 SDK,有的还会改变脚本权限或访问远端。仅创建配置项目时只完成目录、配置回读、DTS/GPIO 静态一致性、精确差异白名单和文档检查。任务要求 `bsp-build-artifacts` 或更高交付级别时,静态检查完成后按下一节自动执行标准全量编译。
|
||||
|
||||
## 统一编译
|
||||
|
||||
需求和实施方案已经确认、任务需要构建产物时,标准流程自动执行:
|
||||
|
||||
```bash
|
||||
cd ~/EapilBsp/EMX2.0/EmxRes
|
||||
source tools/script_completion.sh
|
||||
EMX2_BuildSDKTool <项目名> <YYYYMMDD_N> all
|
||||
```
|
||||
|
||||
`YYYYMMDD` 使用 Asia/Shanghai 当前日期;未指定时选择尚不存在的最小正整数序号。默认全量 `all`,只有用户明确要求时使用组件构建。
|
||||
|
||||
先运行:
|
||||
|
||||
```bash
|
||||
python3 <BSP Skill>/scripts/bsp/bsp_preflight.py build \
|
||||
--project <项目名> \
|
||||
--version <YYYYMMDD_N>
|
||||
```
|
||||
|
||||
只有 `passed=true` 才能自动执行。执行前把工具返回的精确工作目录、完整命令、项目与 SDK 路径、构建范围、最终 imgs 版本路径、工作区状态、配置同步副作用,以及统一脚本中的远端 `git fetch origin` 写入记录,不再请求第二次确认。不得从 `EmxRes` 的父目录启动,也不得依赖登录 Shell 的偶然当前目录。
|
||||
|
||||
下列情况不自动处理:预检失败、统一脚本或路径与固定规则不符、输出版本已存在、参考或目标出现新的重叠改动、需要直接运行同步脚本、需要组件构建、需要改变构建参数、需要修改统一脚本,或者构建失败后需要清理和重试。此时停止并向用户说明异常、影响和可选处理方式。
|
||||
|
||||
不得修改、注入或静默绕过统一构建脚本的远端检查。本地免远端模式属于独立工具优化任务。
|
||||
|
||||
## 输出冲突与权限
|
||||
|
||||
输出目录通常为:
|
||||
|
||||
```text
|
||||
/epbuild/EMX2.0/EmxRes/<项目名>/imgs/<构建版本>
|
||||
```
|
||||
|
||||
已存在时默认停止并建议下一序号。绝不自动向“强制删除并继续”回答 `yes`;覆盖需要针对精确绝对路径的独立确认。
|
||||
|
||||
构建前记录新项目内同步脚本权限;统一脚本临时 `chmod 777` 后,构建结束恢复已记录的原权限并写入报告。只恢复新项目内的已知文件,不改 SDK 或其他项目权限。
|
||||
|
||||
## 构建证据与状态
|
||||
|
||||
成功必须同时满足:
|
||||
|
||||
- 命令退出码为零;
|
||||
- 日志到达正常完成阶段;
|
||||
- 输出目录存在且含非空固件文件;
|
||||
- 当前项目实际生效的分区表可唯一确定,或已显式指定 `configs/` 内精确文件;
|
||||
- 最终 imgs 中唯一 `kernel.bin` 和 `rootfs.bin` 相对各自最小对应分区均保留至少 512 KiB(524288 字节);
|
||||
- 文件名、大小和 SHA-256 清单写入 `validation/`;
|
||||
- 构建后项目源码差异仍通过白名单。
|
||||
|
||||
满足以上条件后运行:
|
||||
|
||||
```bash
|
||||
python3 <BSP Skill>/scripts/bsp/record_build_handoff.py \
|
||||
--project <项目名> \
|
||||
--build-version <YYYYMMDD_N> \
|
||||
--build-exit-code 0 \
|
||||
--completion-marker-seen \
|
||||
--risk <仍存在的硬件风险>
|
||||
|
||||
python3 <BSP Skill>/scripts/bsp/project_guard.py audit-final \
|
||||
--target-project <项目名>
|
||||
```
|
||||
|
||||
自动发现多个 `partition*.xml` 时,上述记录命令必须追加:
|
||||
|
||||
```bash
|
||||
--partition-table configs/<实际生效路径>/partition_spinand.xml
|
||||
```
|
||||
|
||||
该参数只接受当前 BSP 项目 `configs/` 内的文件。检查失败时脚本不会生成 `build_passed` handoff。
|
||||
|
||||
记录脚本生成或更新:
|
||||
|
||||
- `validation/artifact_manifest_<构建版本>.sha256`;
|
||||
- `validation/image_partition_margin_<构建版本>.json`;
|
||||
- `handoff/psp_handoff.json`;
|
||||
- `status.json`。
|
||||
|
||||
`psp_handoff.json` 遵循统一入口的 [BSP→PSP 交接契约](../../firmware-lowlevel-development/references/bsp-psp-handoff.md)。`audit-final` 必须在这些文档写入后执行;它使用 prepare 时冻结的参考清单,而不是假定参考项目从未变化。
|
||||
|
||||
成功时保存简明摘要、kernel/rootfs 分区余量证据、固件哈希清单和精确 imgs 版本路径;失败时保存完整日志、阶段和关键错误。后续同步或编译失败不删除已经通过静态门禁的正式项目,只更新状态。不得只记录 `imgs` 软链接、父目录或“latest”;交付和 PSP 依赖必须绑定具体构建版本目录。
|
||||
|
||||
没有同步和编译时写:
|
||||
|
||||
```text
|
||||
本地 BSP 配置项目已创建;尚未同步 SDK,尚未完成编译验证
|
||||
```
|
||||
|
||||
本地编译成功也不能替代板上 GPIO、电平、时序、外设或负责人验收。
|
||||
|
||||
## 最终回复
|
||||
|
||||
完成构建时必须显式输出:项目路径、精确 imgs 版本路径、kernel/rootfs 的镜像大小、最小对应分区大小和实际余量、余量证据路径、交接 manifest 路径、产物清单/hash 路径、`audit-final` 结果,以及硬件/负责人/发布状态。没有生成交接 manifest 时不能声称已完成 PSP 交接。
|
||||
@@ -0,0 +1,43 @@
|
||||
# 内置 CV18 GPIO/PINOUT 资料目录
|
||||
|
||||
本 Skill 内置五份芯片 GPIO/PINOUT 设计表。对下表覆盖的芯片,用户只需提供项目原理图或 GPIO List,不再重复提供芯片 GPIO 设计文档。内置表说明芯片 Pad、封装脚号和 FMUX 能力,不能替代项目原理图上的真实连接、有效电平和板级用途。
|
||||
|
||||
## 自动选表
|
||||
|
||||
优先读取目标项目;目标尚未创建时读取已确认的同芯片参考项目:
|
||||
|
||||
```bash
|
||||
python3 scripts/bsp/query_builtin_pinout.py \
|
||||
--project <EmxRes项目绝对路径> \
|
||||
--query <Pad、GPIO或FMUX功能> \
|
||||
--output <证据JSON>
|
||||
```
|
||||
|
||||
脚本从 `<项目>/buildEnvConfig.sh` 唯一、静态的 `EP_CHIP` 选表,校验内置文件 SHA-256,自动找到唯一的“管脚信息表”,并返回封装脚号、Pad、IO 属性、FMUX 寄存器、默认值、复用列表和 Excel 行号。`--query` 可重复;`GPIOA_7` 与表中的 `XGPIOA[7]` 按同一 GPIO 查询。只有在还没有可读取项目时,才允许用已确认的精确芯片执行 `--chip <芯片>`;目录名永远不能代替 `EP_CHIP`。
|
||||
|
||||
| `EP_CHIP` 范围 | 内置资料 | 目录 ID |
|
||||
|---|---|---|
|
||||
| `CV1810`、`CV1810C` 至 `CV1814C` 的 C/CA/CP/CPA 变体 | `CV181xC_PINOUT_V0.1_CN.xlsx` | `cv181xc` |
|
||||
| `CV1810H` 至 `CV1814H` 的 H/HA/HP/HPA 变体 | `CV181xH__PINOUT_V0.1_CN.xlsx` | `cv181xh` |
|
||||
| `CV1815J`、`CV1815JA` | `CV1815J__PINOUT_V0.1_CN.xlsx` | `cv1815j` |
|
||||
| `CV184xC` 的 C/CA/CP/CPA 变体,如 `CV1841CP`、`CV1842CP` | `CV184xC__PINOUT_V13_CN.xlsx` | `cv184xc` |
|
||||
| `CV184xH` 的 H/HA/HP/HPA 变体,如 `CV1842HP`、`CV1843HP` | `CV184xH__PINOUT_V13_CN.xlsx` | `cv184xh` |
|
||||
|
||||
精确规则、版本和文件 hash 由 `references/gpio-pinout/manifest.json` 管理。`CV1801B` 等未列型号必须失败并报告“没有对应的内置 GPIO 设计表”;禁止用名称相近的表降级处理。
|
||||
|
||||
## 证据与门禁
|
||||
|
||||
- 把查询输出保存到目标项目 `doc/bsp_adaptation/inputs/chip_pinout_lookup.json`,并在 `gpio_plan.json.source_evidence` 中记录查询结果的内置文件路径、SHA-256、工作表名和 Excel 行号。
|
||||
- 一个查询无匹配会使命令返回失败;先核对原理图标注和规范化名称,不能靠模糊匹配直接定案。`--match contains` 只用于探索候选,正式证据应回到精确 Pad、脚号或 FMUX 功能。
|
||||
- `EP_CHIP` 缺失、动态展开、重复冲突、无法唯一选表、hash 不一致或工作表结构改变时停止 GPIO 实施。
|
||||
- 芯片型号匹配不等于封装匹配。仍须用表中的脚号/球位与原理图封装交叉核对;不一致时阻塞,不生成最终 GPIO 结论。
|
||||
|
||||
## 维护内置资料
|
||||
|
||||
更新或新增表格时,将原始 XLSX 放入 `references/gpio-pinout/`,同步修改 `manifest.json` 的匹配规则、资料版本和 SHA-256,并运行:
|
||||
|
||||
```bash
|
||||
python3 scripts/bsp/test_query_builtin_pinout.py
|
||||
```
|
||||
|
||||
不得在未更新 hash 和行为测试的情况下替换内置表格。
|
||||
@@ -0,0 +1,86 @@
|
||||
# CV18 GPIO、Pinmux 与 Kernel DTS
|
||||
|
||||
## 适用范围
|
||||
|
||||
CV180*、CV181*、CV182*、CV183*、CV184* 项目先以实际 `buildEnvConfig.sh` 和配置布局确认芯片与有效文件。目录名和相近项目只能作为线索。
|
||||
|
||||
CV18 项目的 GPIO 复用、方向和启动安全初值通常由实际生效的 `cvi_board_init.c` 实现;Kernel DTS/DTSI 仍可能在 Linux 启动后声明同一 IO,必须同时检查。
|
||||
|
||||
## 内置 GPIO 资料查询
|
||||
|
||||
按 [内置 GPIO 资料目录](builtin-gpio-pinout.md)从项目 `buildEnvConfig.sh` 的 `EP_CHIP` 自动选择设计表,不要求用户重复提供已覆盖芯片的 PINOUT 文档。对 GPIO List 或原理图中的每个目标 Pad/GPIO/FMUX 执行 `scripts/bsp/query_builtin_pinout.py`,用返回的 Excel 行、Pad、Bank/Bit 复用项、FMUX 寄存器和默认值建立芯片侧证据。内置资料没有覆盖、查询无匹配或封装脚号冲突时停止;不得根据项目目录名或相近芯片猜测。
|
||||
|
||||
## `cvi_board_init.c` 语义
|
||||
|
||||
修改前读取整个相关函数,保留原有签名、调用阶段和代码风格:
|
||||
|
||||
- `PINMUX_CONFIG(pad, function)`:选择 Pad 复用功能;
|
||||
- `Gpio_Set_Dir(base, bit, 1)`:按现有 CV18 实现配置输出;
|
||||
- `Gpio_Set_Dir(base, bit, 0)`:按现有 CV18 实现配置输入;
|
||||
- `Gpio_Set_Value(base, bit, value)`:设置输出状态或安全初值;
|
||||
- `Gpio_Get_Value(base, bit)`:读取输入状态;
|
||||
- `cvi_board_init()`:启动期复用、方向和初值;
|
||||
- `cvi_update_led_control*()`、`cvi_get_key_status()` 等:运行期业务钩子,只修改与其功能相符的 GPIO;
|
||||
- `ep_flash_bootidx()` 等启动钩子:只有需求确实涉及其 GPIO 时修改。
|
||||
|
||||
不得只按函数名或文本位置替换。对每个目标信号建立:功能名、Pad、复用功能、Bank/Bit、方向、有效电平、启动初值、运行期钩子和来源证据。
|
||||
|
||||
## 新增、移除与“无 GPIO”
|
||||
|
||||
- 参考项目没有、目标项目需要:只有 Pad、复用功能、Bank/Bit、方向和初值完整时才新增真实代码。
|
||||
- 目标项目明确“无 GPIO”“未装配”或“不需要控制”:移除参考项目的旧复用、方向、初值及运行期控制,并在对应位置留下包含功能名的说明,例如:
|
||||
|
||||
```c
|
||||
// IR_LED: no GPIO on this board; no initialization required.
|
||||
```
|
||||
|
||||
- 信息不完整时禁止猜测寄存器、Bank/Bit 或初始电平;在报告中列为阻塞。
|
||||
|
||||
## Kernel DTS/DTSI 占用检查
|
||||
|
||||
先按 [调查范围与验证模式](scope-and-validation-modes.md)确定验证模式。两种模式都从实际构建使用的板级 `.dts` 开始,递归读取允许范围内的有效 `.dts`/`.dtsi`,不能扫描无关项目后把非生效引用当成冲突。
|
||||
|
||||
完整 DTS 审核模式下,SDK include 文件或条件编译上下文不可读时,不能得出“Kernel 未占用该 GPIO”的结论,并阻塞完整审核通过。EmxRes 配置模式下,只核对项目 Overlay 并明确降低验证等级;它不阻塞配置项目最终化,但在统一编译及最终 DTB 核对前不能声明 Kernel GPIO 占用已验证。
|
||||
|
||||
按 GPIO Bank/Bit 检查:
|
||||
|
||||
- `*-gpio`、`*-gpios` 和厂商自定义 GPIO 属性;
|
||||
- `scl-pinmux`、`sda-pinmux` 等厂商 Pinmux 属性;
|
||||
- 节点覆盖、子设备和 `status`;
|
||||
- 被条件编译或注释掉的定义,区分生效与非生效;
|
||||
- 新旧消费者和 `cvi_board_init.c` 之间的用途与有效电平。
|
||||
|
||||
## 释放旧消费者
|
||||
|
||||
优先最小化释放,沿用项目现有 Device Tree 语法:
|
||||
|
||||
1. 只冲突单个 GPIO 属性时,在最接近板级的有效节点覆盖中使用 `/delete-property/`,保留模块其他功能。
|
||||
2. 软件 I2C 等成组配置中,相关 `scl/sda-pinmux` 与 `scl/sda-gpios` 必须成对处理,不能留下半套声明。
|
||||
3. 只有用户明确不使用整个模块,或释放 IO 后模块已经无法成立时,才设置 `status = "disabled"`。
|
||||
4. 只停用总线下某个设备时,禁用对应子节点,不牺牲整个控制器。
|
||||
5. 若模块仍有必要功能且无法安全释放单个 IO,停止并报告冲突。
|
||||
|
||||
示例:
|
||||
|
||||
```dts
|
||||
/* Release GPIOC_13 for LCD_DC; old board used it as display reset. */
|
||||
&old_display {
|
||||
/delete-property/ reset-gpios;
|
||||
};
|
||||
```
|
||||
|
||||
若新 GPIO 只用于 U-Boot 启动期初始化,DTS 只解除旧消费者,不虚构新设备节点。若它属于 Kernel 驱动管理的新设备,则在释放旧消费者后声明给正确新节点。
|
||||
|
||||
## 验证
|
||||
|
||||
逐个目标信号确认:
|
||||
|
||||
- Pad 复用与 GPIO Bank/Bit 一致;
|
||||
- 输入没有无意义的输出初值,输出有明确安全初值;
|
||||
- 同一 Pad 或 GPIO 没有重复用途;
|
||||
- 运行期函数与启动期初始化引用一致;
|
||||
- 明确无 GPIO 的功能没有残留旧控制代码;
|
||||
- 项目 Overlay 与 SDK 的完整有效 DTS/DTSI include 链中,旧消费者、Pinmux 和 GPIO 属性已解除;
|
||||
- 新 Kernel 消费者与 U-Boot 的用途和极性不冲突。
|
||||
|
||||
完整 DTS 审核模式检查整个有效 include 链;EmxRes 配置模式检查项目 Overlay,并在统一构建后尽量从最终 DTB 核对。不能执行对应验证时记录准确的未验证项,不得声称 Kernel 已验证。
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"documents": [
|
||||
{
|
||||
"id": "cv181xc",
|
||||
"revision": "V0.1_CN",
|
||||
"file": "CV181xC_PINOUT_V0.1_CN.xlsx",
|
||||
"sha256": "422b0114b24d20917c0b67e30622012d67082637cb7700ddfa0bffe23949c2a7",
|
||||
"chip_patterns": ["^CV181[0-4]C(?:P)?A?$"],
|
||||
"chip_aliases": ["CV1810"]
|
||||
},
|
||||
{
|
||||
"id": "cv181xh",
|
||||
"revision": "V0.1_CN",
|
||||
"file": "CV181xH__PINOUT_V0.1_CN.xlsx",
|
||||
"sha256": "3f066800b8233e485f0f6422a1b752cf00e6fb15ca37692ebba17141cd23de30",
|
||||
"chip_patterns": ["^CV181[0-4]H(?:P)?A?$"],
|
||||
"chip_aliases": []
|
||||
},
|
||||
{
|
||||
"id": "cv1815j",
|
||||
"revision": "V0.1_CN",
|
||||
"file": "CV1815J__PINOUT_V0.1_CN.xlsx",
|
||||
"sha256": "d65c73ff850b0c32d6d8a4e0846c9cf8cde1b6ba849112b14789a8e1813922d4",
|
||||
"chip_patterns": ["^CV1815JA?$"],
|
||||
"chip_aliases": []
|
||||
},
|
||||
{
|
||||
"id": "cv184xc",
|
||||
"revision": "V13_CN",
|
||||
"file": "CV184xC__PINOUT_V13_CN.xlsx",
|
||||
"sha256": "6a796107dc87d2d59f375fac68a1887b5813e3ab5a2104596dffc1bf241bd331",
|
||||
"chip_patterns": ["^CV184[0-9]C(?:P)?A?$"],
|
||||
"chip_aliases": []
|
||||
},
|
||||
{
|
||||
"id": "cv184xh",
|
||||
"revision": "V13_CN",
|
||||
"file": "CV184xH__PINOUT_V13_CN.xlsx",
|
||||
"sha256": "260d2d7ea9169f970129932762f1a3ae27a887de1363553c805ede17ce9de109",
|
||||
"chip_patterns": ["^CV184[0-9]H(?:P)?A?$"],
|
||||
"chip_aliases": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
# GPIO 实施计划契约
|
||||
|
||||
原理图或 GPIO List 导致 GPIO/Pinmux/DTS 变化时,在写代码前创建:
|
||||
|
||||
```text
|
||||
doc/bsp_adaptation/inputs/gpio_plan.json
|
||||
```
|
||||
|
||||
CSV 可作为附加审核视图,但不能替代该计划。计划顶层包含 `schema_version=1`、项目名、验证模式、来源、确认信息和 `signals`。每个信号至少包含:
|
||||
|
||||
- `function`:稳定的板级功能名;
|
||||
- `pad`、`mux`;
|
||||
- `gpio`:GPIO 时写 `A14`、`C17`、`PWR22` 等,非 GPIO 写 `null`;
|
||||
- `direction`:`input`、`output`、`peripheral` 或 `none`;
|
||||
- `active_level`:`high`、`low`、`paired`、`unknown` 或 `null`;
|
||||
- `boot_value`:输出为 `0`/`1`,其他方向为 `null`;
|
||||
- `runtime_owner`;
|
||||
- `dts_consumers`:已知的旧/新消费者数组;
|
||||
- `source_evidence`:带页码、表格行或文件位置的来源数组;芯片侧证据必须包含自动选中的内置表路径、SHA-256、工作表名和 Excel 行号;
|
||||
- `decision`:`confirmed`、`inherited`、`no-gpio`、`provisional` 或 `blocked`;
|
||||
- `note`。
|
||||
|
||||
执行:
|
||||
|
||||
```bash
|
||||
python3 scripts/bsp/validate_gpio_plan.py <gpio_plan.json>
|
||||
```
|
||||
|
||||
校验器检查字段、Pad/GPIO 重复、方向与启动值、GPIO/非 GPIO 语义和决策状态。写代码前向用户展示同一份实施表;用户确认后写入 `confirmation.confirmed=true`、确认时间和摘要,再次运行校验器。
|
||||
|
||||
只有 `confirmed`、`inherited` 和 `no-gpio` 行可以进入已确认实现。`provisional` 或 `blocked` 行必须先补证据或取得明确硬件决定。`no-gpio` 行不得生成虚构 GPIO 代码,应移除参考项目旧控制并留下包含功能名的注释。
|
||||
|
||||
对内置目录覆盖的 CV18 芯片,先按 [内置 GPIO 资料目录](builtin-gpio-pinout.md)运行 `query_builtin_pinout.py`,再建立计划。项目原理图或 GPIO List 负责说明板级连接与目标用途;内置表负责证明 Pad、脚号和 FMUX 能力,二者不能互相替代。
|
||||
@@ -0,0 +1,75 @@
|
||||
# 媒体内存与分区适配
|
||||
|
||||
## 通用规则
|
||||
|
||||
媒体内存由用户提供明确数值和单位。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 余量检查时明确列为未验证,不合成通过。
|
||||
@@ -0,0 +1,46 @@
|
||||
# BSP 原理图 Pinmux 审核证据
|
||||
|
||||
根据用户提供的项目原理图与本 Skill 自动选择的内置芯片引脚表,生成可审核的项目 Pinmux CSV。CSV 是原理图到 BSP 配置的派生视图,不是修改 `cvi_board_init.c`、DTS/DTSI 或其他 BSP 源码的必需输入,也不能独立表达完整的方向、初值、Pad 电气和初始化顺序。
|
||||
|
||||
## 输入和输出
|
||||
|
||||
输入包括项目名称、项目原理图和可读取的 EmxRes 项目。按 [内置 GPIO 资料目录](builtin-gpio-pinout.md)读取 `buildEnvConfig.sh` 的 `EP_CHIP` 并选取对应 PINOUT;对已覆盖芯片不再要求用户提供 GPIO/FMUX 手册。项目名称没有明确给出时,从原理图标题栏、图号或文件名推导,并在交付时说明。内置目录未覆盖该芯片时才列为缺失输入并请求匹配资料。
|
||||
|
||||
需要 CSV 时,输出文件名为 `<项目名称>_pinmux.csv`。新 BSP 项目中的默认位置为 `doc/bsp_adaptation/inputs/`。清理文件名中的 `/\\:*?\"<>|`,将连续空白替换为下划线,保留可安全使用的中文。CSV 使用 UTF-8 BOM。
|
||||
|
||||
CSV 仅保留原理图中实际使用且拥有至少两种编号 FMUX 选择的信号引脚。表头及顺序严格为:
|
||||
|
||||
1. `引脚号`
|
||||
2. `功能名称`
|
||||
3. `引脚名称`
|
||||
4. `有效电平`
|
||||
5. `FMUX寄存器`
|
||||
6. `FMUX当前值`
|
||||
7. `FMUX默认值`
|
||||
8. `FMUX_list`
|
||||
|
||||
生成表格前必须阅读 [workflow-and-schema.md](workflow-and-schema.md),按其中的数据结构、有效电平规则和验收要求执行。
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 识别原理图中的主芯片型号、器件号、封装和所有分单元页面;同时读取项目 `buildEnvConfig.sh` 的唯一 `EP_CHIP`。两者冲突时停止。
|
||||
2. 提取主芯片所有实际连接的信号脚。排除电源、地、EPAD、明确 NC 和未连接脚,但不能因当前功能不是 GPIO 而排除。
|
||||
3. 执行 `query_builtin_pinout.py --project <项目> --query <目标Pin或功能>`,从自动选择的内置表提取球位、Pad 名、FMUX 寄存器、默认值,以及每个编号对应的全部复用能力;查询 JSON 保存在 `doc/bsp_adaptation/inputs/chip_pinout_lookup.json`。
|
||||
4. 以规范化 Pad 名为主键对齐原理图和手册,并用球位、封装和功能交叉检查。型号或封装不匹配时停止 CSV 生成,只交付资料差异和冲突清单;型号与封装已匹配但个别字段仍缺少证据时,才将该字段写为 `UNKNOWN` 或 `待确认` 并报告风险。
|
||||
5. 根据 Pad 支持能力和原理图实际用途确定 `FMUX当前值`。网络名只是线索;网络名声称的功能不在该 Pad 复用表中时,保留手册事实并报告矛盾。
|
||||
6. 只有当前目标功能为通用 GPIO 时才分析 `有效电平`。沿实际信号路径检查上下拉、反相器、三极管、MOS、驱动阵列、低有效命名和上电状态。明确时填 `高有效` 或 `低有效`,证据不足填 `待确认`;非 GPIO 一律填字符串 `null`。
|
||||
7. 建立规范化 JSON,并执行:
|
||||
|
||||
`python3 scripts/bsp/build_pinmux_csv.py --input <normalized.json> --output-dir <交付目录>`
|
||||
|
||||
8. 检查脚本结果,回查寄存器、默认值、当前值、有效电平和所有资料冲突。只有型号与封装匹配且脚本验收通过时才把 CSV 作为审核证据;硬阻塞存在时停在 `investigating` 或 `blocked` 并交付冲突清单。
|
||||
|
||||
## 不可破坏的规则
|
||||
|
||||
- “实际使用”以真实电气连接为准,而不是仅凭网名或相邻文字。
|
||||
- “多种 FMUX”要求 `FMUX_list` 中至少有两个不同编号项,例如 `0:GPIOA_1; 3:UART1_TX`。无编号的 MIPI、Audio、EPHY 等特殊模式可以记录,但不能单独满足筛选条件。
|
||||
- `功能名称`写原理图网络名或可验证的板级用途;`引脚名称`写芯片 Pad 名;`引脚号`优先写 BGA 球位。
|
||||
- `FMUX当前值`是实现原理图当前用途所需的编号,不是寄存器复位值;`FMUX默认值`必须来自匹配的芯片手册。
|
||||
- GPIO 的 `待确认` 与非 GPIO 的 `null` 含义不同,不能混用;禁止猜测缺失事实。
|
||||
- 型号或封装不匹配是生成门禁,不是可用 `UNKNOWN` 降级放行的普通字段缺失。
|
||||
- 内置表路径、SHA-256、工作表名和 Excel 行号必须进入来源证据;目录名不能作为芯片或 Pinmux 证据。
|
||||
@@ -0,0 +1,38 @@
|
||||
# BSP 调查范围与验证模式
|
||||
|
||||
## 默认范围
|
||||
|
||||
默认只读取:
|
||||
|
||||
- 用户明确给出的原理图、GPIO List、规格书和需求清单;
|
||||
- 当前 BSP Skill 的指令、脚本和 `references/gpio-pinout/` 内置资料;
|
||||
- `~/EapilBsp/EMX2.0/EmxRes/<参考项目>`;
|
||||
- 已确认后的目标 staging/正式项目;
|
||||
- `EmxRes/tools/script_completion.sh` 及其为解释实际构建副作用所必需的精确相邻脚本;
|
||||
- 构建后的 `/epbuild/EMX2.0/EmxRes/<目标项目>/imgs/<构建版本>`。
|
||||
|
||||
不得用 `find`、`rg` 或同类工具扫描整个用户主目录、整个 `EapilBsp`、整个 SDK 或无关项目。找不到资料时列出缺失项和建议的精确路径,不扩大搜索范围。用户主动收紧范围后立即采用更窄边界;报告曾经执行但被废弃的越界只读调查,不能写成“从未搜索”。
|
||||
|
||||
## EmxRes 配置模式(默认)
|
||||
|
||||
适用于用户只允许查看项目 Overlay 和统一编译的情况:
|
||||
|
||||
1. 人工分析只覆盖参考/目标项目中的 `buildEnvConfig.sh`、配置目录、`cvi_board_init.c`、板级 DTS/DTSI、defconfig、分区和同步脚本。
|
||||
2. 不人工搜索 SDK 源码,也不据此声称完整 include 链已审计。
|
||||
3. 项目最终化前允许声明“项目级静态检查通过”;不能声明最终 Kernel GPIO 占用已验证。
|
||||
4. 任务需要构建产物时,预检通过后自动执行统一全量编译,并以实际编译成功和生成的最终 DTB/FIT 为生效证据。能从最终 DTB 可靠反编译时,核对目标 GPIO 消费者并保存结果;不能反编译时明确标记未验证。
|
||||
|
||||
该模式不会因为禁止人工读取 SDK 而阻塞项目创建,但会降低 DTS 结论的验证等级。
|
||||
|
||||
## 完整 DTS 审核模式
|
||||
|
||||
仅在用户授权读取精确 SDK 基线路径时使用:
|
||||
|
||||
1. 从实际板级 DTS 开始递归解析有效 DTS/DTSI include 链和条件编译上下文。
|
||||
2. 读取范围限于为该 build type 解析出的精确文件和必要的 Pinmux 定义;仍禁止扫描整个 SDK。
|
||||
3. include 无法解析或上下文不唯一时,目标 GPIO 占用检查不得判为通过。
|
||||
4. 本模式只授予只读分析;只有任务明确进入构建产物交付级别时,才按 BSP 构建规则自动执行标准全量编译。其他 SDK 写入仍需用户确认。
|
||||
|
||||
## 模式记录
|
||||
|
||||
预检摘要和 `adaptation_report.md` 必须记录所选模式、允许路径、排除路径、已执行检查和结论上限。模式变化会使此前依赖更宽范围得出的未确认结论失效。
|
||||
@@ -0,0 +1,75 @@
|
||||
# Pinmux 派生 CSV 数据结构与验收规范
|
||||
|
||||
本规范只约束按需生成的审核 CSV。BSP 代码修改仍以经确认的 GPIO/Pinmux 需求、自动选择并校验的内置目标芯片资料、参考项目源码和实际构建引用为依据。
|
||||
|
||||
## 规范化 JSON
|
||||
|
||||
导出脚本接收 UTF-8 JSON 对象:
|
||||
|
||||
```json
|
||||
{
|
||||
"project_name": "项目名称",
|
||||
"rows": [
|
||||
{
|
||||
"pin_number": "A12",
|
||||
"function_name": "CAM_RST0",
|
||||
"pin_name": "PAD_MIPI_TXM4",
|
||||
"is_gpio": true,
|
||||
"active_level": "低有效",
|
||||
"fmux_register": "0x030010A4",
|
||||
"fmux_current": "3",
|
||||
"fmux_default": "0",
|
||||
"fmux_list": "0:XGPIOA_20; 1:CAM_MCLK0; 3:GPIOA_20; MIPI:TXM4"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
| JSON 字段 | 最终列 | 规则 |
|
||||
|---|---|---|
|
||||
| `pin_number` | 引脚号 | BGA 球位优先;非 BGA 填封装脚号 |
|
||||
| `function_name` | 功能名称 | 原理图网络名或经核实的板级用途 |
|
||||
| `pin_name` | 引脚名称 | 芯片手册中的 Pad 名 |
|
||||
| `is_gpio` | 不输出 | 当前用途是否为通用 GPIO,不是 Pad 是否支持 GPIO |
|
||||
| `active_level` | 有效电平 | GPIO 为 `高有效`、`低有效`或`待确认`;非 GPIO 为 `null` |
|
||||
| `fmux_register` | FMUX寄存器 | 完整地址或手册定义的寄存器名 |
|
||||
| `fmux_current` | FMUX当前值 | 当前用途对应编号;不确定填 `待确认` |
|
||||
| `fmux_default` | FMUX默认值 | 手册复位默认值;不确定填 `待确认` |
|
||||
| `fmux_list` | FMUX_list | `编号:功能`,以 `; ` 分隔;可保留特殊模式说明 |
|
||||
|
||||
## 资料提取
|
||||
|
||||
- 先定位主芯片全部分单元页面和封装表,再沿导线、网络标签、页间端口及器件连接确认每个信号脚用途。
|
||||
- 芯片 XLSX 由 [内置 GPIO 资料目录](builtin-gpio-pinout.md)自动选择并使用 `query_builtin_pinout.py` 解析;禁止绕过 manifest 的型号映射和 SHA-256 校验直接借用相近表格。
|
||||
- PDF 优先使用保布局文本提取;文本层错位或原理图密集时,将关键页面转为图像核查。
|
||||
- 为候选 Pad 保留来源页码或工作表行号,至少覆盖型号、封装、球位、Pad、FMUX 地址、默认值、编号映射和特殊模式。
|
||||
|
||||
## 有效电平判定
|
||||
|
||||
仅在 `is_gpio=true` 时判定:
|
||||
|
||||
- GPIO 直接连接使能、复位、LED、按键或驱动器时,依据器件逻辑及真实电流路径判断。
|
||||
- 奇数级 NPN/NMOS 共射或共源级通常造成逻辑反相;P 沟道高边电路还要结合栅极驱动方向。
|
||||
- 上拉且按下接地的按键通常低有效;`RSTN`、`RESET#`、`CS_N` 是低有效线索,但仍需核对中间反相级。
|
||||
- 上下拉可能只定义上电安全态,不能单独作为有效电平结论。
|
||||
- 证据冲突或信号链不完整时填 `待确认`,并说明缺少的证据。
|
||||
|
||||
非 GPIO 当前用途必须填 `null`,即使该 Pad 可以复用为 GPIO。
|
||||
|
||||
## 多 FMUX 筛选
|
||||
|
||||
`FMUX_list` 中,以字符串开头或 `; ` 后出现的 `0:` 到 `7:` 为编号选项。至少有两个不同编号才输出。
|
||||
|
||||
- 保留:`0:GPIOA_1; 2:PWM_1; 3:UART1_TX`
|
||||
- 排除:`0:GPIOA_1; MIPI:RX0`
|
||||
|
||||
## 验收清单
|
||||
|
||||
- 文件名为安全化的 `<项目名称>_pinmux.csv`,编码为 UTF-8 BOM。
|
||||
- 表头严格为八列,顺序不变。
|
||||
- 每个球位最多一行,且每行至少有两个不同编号 FMUX 选项。
|
||||
- GPIO 有效电平不是 `null`;非 GPIO 有效电平恰为 `null`。
|
||||
- `FMUX当前值`为编号时,该编号存在于 `FMUX_list`。
|
||||
- 球位、Pad、寄存器和默认值来自匹配型号及封装的资料。
|
||||
- `待确认`、`UNKNOWN` 和功能冲突均在交付信息中逐项列出;型号或封装不匹配时禁止生成最终 CSV,只交付差异与冲突清单。
|
||||
- 不包含电源、地、EPAD、NC 或未连接脚。
|
||||
@@ -0,0 +1,142 @@
|
||||
# BSP 项目适配工作流
|
||||
|
||||
## 1. 识别模式
|
||||
|
||||
本工作流用于在当前用户的 `~/EapilBsp/EMX2.0/EmxRes` 中,从一个已确认参考项目创建新 BSP 配置项目。`EmxRes` 是配置 Overlay;不能假定它是完整 SDK 源码树。
|
||||
|
||||
若用户只要求审查已有 BSP,不创建项目,则执行对应的只读检查,不运行复制和最终写入步骤。
|
||||
|
||||
## 2. 最低输入与继承
|
||||
|
||||
始终需要参考项目名、新项目型号、精确芯片型号、单/双系统形态、验证模式和交付级别。交付级别必须明确为以下之一:
|
||||
|
||||
- `config-project`:仅创建 BSP 配置项目;
|
||||
- `bsp-build-artifacts`:再运行统一构建并交付 imgs 版本目录;
|
||||
- `flash-package`:要求项目原生流程产生明确的可烧录/升级包;
|
||||
- `production-package`:要求量产整片包、签名或发布时另行确认对应权限。
|
||||
|
||||
用户要求修改某一领域时再要求对应输入:
|
||||
|
||||
- GPIO:GPIO List 或原理图;已覆盖 CV18 芯片的 GPIO/PINOUT 设计表由 Skill 内置并自动选择;
|
||||
- 媒体内存:明确数值和单位;
|
||||
- 分区:变化的分区名称和目标大小。
|
||||
|
||||
未提及的领域完整继承参考项目。用户直接提供的 GPIO List 是目标需求;只提供原理图时,先按 [GPIO 实施计划契约](gpio-plan.md)提取候选差量并让用户确认。
|
||||
|
||||
## 3. 只读预检
|
||||
|
||||
1. 将 `~` 解析为执行任务的当前用户主目录,确认参考项目是 `EmxRes` 的直接子目录,目标也是新的直接子目录。
|
||||
2. 检查目标正式目录和同名残留目录;正式目录已存在时停止,不覆盖。
|
||||
3. 先运行 `scripts/bsp/bsp_preflight.py project`,再只读取报告定位的 `buildEnvConfig.sh`、配置同步脚本和实际配置目录,发现精确芯片、SDK、Flash、架构、单/双系统形态和板卡 build type。
|
||||
4. GPIO 任务按 [内置 GPIO 资料目录](builtin-gpio-pinout.md)从 `buildEnvConfig.sh` 的 `EP_CHIP` 自动选表并查询全部目标信号;将结果保存为输入证据。目录名与 `EP_CHIP` 冲突时以后者为芯片配置事实并报告命名风险,原理图芯片与 `EP_CHIP` 冲突时停止。
|
||||
5. 按 [调查范围与验证模式](scope-and-validation-modes.md)执行 GPIO/DTS 检查。默认 EmxRes 配置模式不人工搜索 SDK;完整 DTS 审核模式只读取精确解析出的 include 链。
|
||||
6. 默认要求参考与目标使用相同精确芯片、SDK、Flash 和系统形态。不同芯片或布局转换不是少量适配,要求更接近的参考项目或新的工作包。
|
||||
7. 只读检查 `EmxRes` Git 状态。参考项目自身包含已修改或未跟踪文件时,列出并要求确认复制当前磁盘状态;其他项目的改动只记录、不阻塞。
|
||||
8. 扫描软链接。允许保留项目内相对链接;约定的 `imgs` 链接按第 6 节处理;其他指向 `EmxRes` 外部的链接要求确认。
|
||||
9. 发现凭据、私钥、token 文件或未知大型生成物时停止复制该项并报告,不能静默带入新项目。
|
||||
|
||||
## 4. 命名与板卡版本
|
||||
|
||||
默认目录名:
|
||||
|
||||
```text
|
||||
<大写芯片型号>-<项目型号>
|
||||
<大写芯片型号>-<项目型号>_dualos
|
||||
```
|
||||
|
||||
项目型号内部原有连字符可保留。`_dualos` 由明确的双系统形态决定,不能从 `CONFIG_RTOS_ION_SIZE` 单独推断。`_v6.3.3`、`_optimize`、日期、Flash 等额外后缀只有用户明确要求时添加。
|
||||
|
||||
板卡 build type 中的 `xxxx` 默认继承参考项目。用户明确改变时,必须一致修改配置目录、板卡 defconfig、DTS 名称和所有实际引用;禁止只重命名单个文件或全局盲替换项目名。
|
||||
|
||||
## 5. 一次性实施确认
|
||||
|
||||
持久化复制前展示:
|
||||
|
||||
- 参考和目标绝对路径;
|
||||
- 芯片、SDK、Flash、系统形态、布局和板卡版本;
|
||||
- 最终项目名;
|
||||
- GPIO、内存、分区差量和继承项;
|
||||
- 候选修改文件;
|
||||
- `imgs` 链接变化;
|
||||
- 输入证据和 `doc/` 计划;
|
||||
- 交付级别、调查范围、验证模式及结论上限;
|
||||
- 完整 GPIO 实施表和所有 `provisional`/`blocked` 项;
|
||||
- 将执行及不会执行的验证、同步、编译和外部动作。
|
||||
|
||||
用户确认后运行本地复制。交付级别需要构建产物时,该确认同时覆盖预检通过后的标准全量编译,不再在编译前重复询问;设备动作、上传和发布仍不在授权范围内。
|
||||
|
||||
## 6. 安全复制与 `imgs`
|
||||
|
||||
使用:
|
||||
|
||||
```bash
|
||||
python3 scripts/bsp/project_guard.py prepare \
|
||||
--reference-project <参考项目> \
|
||||
--target-project <新项目>
|
||||
```
|
||||
|
||||
脚本在 `EmxRes` 下创建唯一的 `.<新项目>.bsp-staging-*` 临时目录,保留普通文件权限和软链接,排除 Git 元数据、缓存、明确构建输出和日志,并写出克隆清单。
|
||||
|
||||
约定的:
|
||||
|
||||
```text
|
||||
/epbuild/EMX2.0/EmxRes/<参考项目>/imgs
|
||||
```
|
||||
|
||||
只重定向为:
|
||||
|
||||
```text
|
||||
/epbuild/EMX2.0/EmxRes/<新项目>/imgs
|
||||
```
|
||||
|
||||
不跟随或复制镜像内容。新目标不存在时允许悬空,并记录警告。
|
||||
|
||||
## 7. 差量实施
|
||||
|
||||
1. 先读取目标文件的真实结构、调用语义和构建引用。
|
||||
2. 只修改经确认字段;未给出的方向、电平、初值、分区属性等继承参考项目。
|
||||
3. CV18 GPIO 使用 [CV18 GPIO 与 DTS 规则](cv18-gpio-dts.md)。
|
||||
4. 媒体内存和分区使用 [内存与分区规则](memory-and-partition.md)。
|
||||
5. 在 `doc/bsp_adaptation/` 建立适配报告、输入证据和验证记录。
|
||||
6. GPIO 任务保存已确认的 `inputs/gpio_plan.json`,并在写代码前后运行校验器。
|
||||
7. 不执行与目标差量无关的格式化、重构、warning 清理或版本升级。
|
||||
|
||||
## 8. 差异白名单与正式写入
|
||||
|
||||
对每个允许修改的文件传入精确相对路径;不要用 `configs/**` 一类宽泛规则:
|
||||
|
||||
```bash
|
||||
python3 scripts/bsp/project_guard.py verify \
|
||||
--reference-project <参考项目> \
|
||||
--staging-dir <临时目录名> \
|
||||
--target-project <新项目> \
|
||||
--allow-path <精确相对文件> [--allow-path <另一文件> ...]
|
||||
```
|
||||
|
||||
`doc/bsp_adaptation/` 和约定 `imgs` 链接由工具内建允许。出现白名单外新增、删除、内容或权限变化时停止。
|
||||
|
||||
全部必需静态检查通过且 `adaptation_report.md` 已完成后:
|
||||
|
||||
```bash
|
||||
python3 scripts/bsp/project_guard.py finalize \
|
||||
--reference-project <参考项目> \
|
||||
--staging-dir <临时目录名> \
|
||||
--target-project <新项目> \
|
||||
--allow-path <精确相对文件> [--allow-path <另一文件> ...]
|
||||
```
|
||||
|
||||
最终化不信任旧的 `project_delta.json`,会用同一参考项目和精确白名单重新执行完整验证,再在同一文件系统原子重命名。失败时保留临时目录供检查;清理临时目录必须再次确认。
|
||||
|
||||
## 9. 完成状态
|
||||
|
||||
没有执行 SDK 同步和完整编译时,正式状态写为:
|
||||
|
||||
```text
|
||||
本地 BSP 配置项目已创建;尚未同步 SDK,尚未完成编译验证
|
||||
```
|
||||
|
||||
后续同步或编译失败不删除已创建项目,只更新项目内验证证据和真实状态。
|
||||
|
||||
任务已要求构建产物时,正式项目静态检查通过后自动进入标准全量编译。预检失败、输出版本冲突、统一脚本缺失、工作区出现重叠改动、命令返回失败或产物检查失败时停止,不自动覆盖、清理或重试;记录证据后请用户决定如何处理。
|
||||
|
||||
完整编译成功后还要按分区表验证唯一 `kernel.bin`、`rootfs.bin` 均至少保留 512 KiB 分区余量,再记录精确 imgs 版本目录和 BSP→PSP 交接 manifest;未执行或未通过该检查,以及仅有 `imgs` 软链接或“最新目录”,都不能作为下游基线。
|
||||
Reference in new issue
Block a user