Files
firmware-lowlevel-development/skills/firmware-lowlevel-bsp-development/references/cv184x-sdk-readonly-review.md
T
tangfahong ea4ff92835 chore(release): 1.0.1
明确 BSP 的 RES 开发范围和 SDK 构建写入边界;调整 CV184X 强制补丁预检并补齐构建交接测试。
2026-10-09 18:05:07 +08:00

4.4 KiB
Raw Blame History

CV184X 板级配置与构建链

适用于 EP_CHIP=CV184* 且项目采用 configs/<board_build_type>/ 的 EmxRes 项目。CV181X 的 configs/kernel/、configs/uboot/ 是另一条流程,不能混用。先看项目 buildEnvConfig.sh、板级目录和 configs/EPSYNCSDKConfig.sh,再从 EmxRes/tools/EMX2_BuildSDKTool 确认实际走的是 BuildCvitek184XSDKTool.sh;不要凭项目名猜板型。

配置如何生效

开发源文件与配置只修改当前 RES 项目。SDK 只读调查和原生构建同步按 RES、SDK 与表述边界 分开说明;本节中的 SDK 路径均为同步或生成目标,不授予人工编辑权限。

专用工具按 EP_CHIP 和 EP_FLASH_TYPE 选定 CV_BUILD_TYPE。EPSYNCSDKConfig.sh 将项目单板卡目录用 rsync -av 写到 SDK build/boards/cv184x/<CV_BUILD_TYPE>/,然后工具执行 SDK defconfig、clean_all 和分项构建。先核对工具选出的 build type 与项目目录一致;若不一致,停止,不让同步脚本猜目标。同步脚本末尾固定 exit 0,单看脚本退出码不够,需比较每个映射文件及实际构建日志。

项目板卡目录至少应结合真实需求检查顶层 <board>_defconfig、Kernel/U-Boot defconfig、dts_arm/<board>.dts、u-boot/cvi_board_init.c 与分区 XML。顶层 defconfig 经 build/common_functions.sh:defconfig 生成 SDK build/.config;build/envsetup_soc.sh 根据该配置选实际生效的分区 XML。CONFIG_DUAL_OS 还影响 build/Makefile 选用哪组模块加载顺序。DTS 的 GPIO 使用要追到 cv184x_base_arm.dtsi、封装 DTSI、存储 DTSI、cv184x_default_memmap.dtsi 以及最终 DTB;只检查项目顶层 DTS 不足以证明引脚已释放。媒体内存还要看 cvi_board_memmap.h 的生成值、Kernel reserved-memory 和 RTOS 占用。

在当前专用工具里,all 会进入驱动分支;该分支直接调用 build_osdrv、build_libsophon 和 pack_rootfs,并没有依据项目 BUILD_SDK_DRIVER=n 跳过这些步骤。项目设置了这个变量也不能据此断言 SDK 驱动未构建。最终 rootfs 还会从 SDK 目录外的 CV184X/rootfs/<Flash>/ 打包;排查镜像内容时需要把这条独立输入链单独核对。

用户给出 SDK 路径后的只读核对

python3 <BSP Skill>/scripts/bsp/inspect_cv184x_sdk.py \
  --project <EmxRes 项目绝对路径> \
  --sdk-root <用户明确指定的 SDK 根目录绝对路径>

检查器核对工具实际选择的板型、同步顺序、项目到 SDK 的文件映射、当前 build/.config、SDK 子仓库的已跟踪文件状态,并报告补丁强制重置风险。sdk_copy_differs 只说明当前磁盘内容不同;SDK 可能上次构建了别的项目,不能自动判断谁应覆盖谁。检查器不运行同步、补丁检查、构建或设备操作,也不证明最终镜像用的就是当前项目配置。

例如 CV1841CP-LY-SM-YT70_dualos 使用 cv1841cp_wevb_0015a_spinand。截至本次分析,项目与 SDK 当前的顶层 defconfig、DTS、分区 XML、U-Boot 初始化文件内容不同;项目分区的 APP/APP2 为 32768 KiB,SDK 当前表为 19456 KiB 并另有 DATA 分区。这是“当前 SDK 快照不可当作该项目已同步基线”的证据,不是要把 SDK 改成项目值的授权。其他 CV184X 项目不能套用这组容量。

补丁检查的职责与构建安全

BuildCvitek184XSDKTool.sh 应自行处理补丁检查,失败时返回错误。Skill 不额外运行 --check-env、扫描 SDK 子仓库或判断补丁完整性,只记录原生脚本的退出码和必要错误日志。编译前仅核对精确的项目构建入口不会在检查失败时自动执行 --applypatch --force;这不是补丁完整性检查。旧脚本仍包含自动强制打补丁时,不能以“失败后报告”代替禁止执行:先停止,让构建脚本所有者将失败分支改为返回非零;Skill 不自行改共享构建脚本或覆盖其行为。

EmxRes/tools/BuildGitCheck.sh 会执行远端 git fetch origin,但对非 Git 顶层目录的错误不一定可靠传播,因此它显示“检查通过”不能单独证明所有 SDK 子仓库干净或版本一致。构建成功之后仍要核对实际生效分区表、kernel.bin/rootfs.bin 余量,以及 fip.bin、boot.bin、yoc.bin、驱动和 rootfs 是否按需求出现。单凭配置同步、命令零退出码或某个文件存在,不能声称 BSP 已通过板上验证。