)
Matter SDK 开发工具全景指南从证书签发、SpaKE2P 参数生成到内存分析与产线工厂数据connectedhomeip 实践【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeipMatter SDKconnectedhomeip为开发、调试、量产三个阶段提供了完整的命令行工具链。本文以 docs/tools/index.md 为骨架系统梳理 C 工具chip-cert、spake2p与 Python 工具内存分析、NXP/Silabs/Telink 产线工具的构建方式、全部命令参数、典型用法及源码实现原理并给出仓库内可直接验证的示例路径帮助你在 Matter 设备的调试、测试与量产准备中按图索骥。一、工具总览C 工具与 Python 工具Matter SDK 的工具分两大类源码位置也严格分开类别源码目录典型工具C 工具src/toolschip-cert证书工具、spake2pSpaKE2P 参数工具Python 工具scripts/tools内存分析脚本、NXP/Silabs/Telink 产线与 OTA 工具其中 C 工具由 GN 构建系统编译为宿主平台host二进制是设备证书体系与配对凭证生成的基石Python 工具则多基于这些二进制二次封装服务于内存优化、固件镜像打包与工厂数据写入等更上层的工程场景。二、C 工具chip-cert —— Matter 证书签发与操作工具chip-cert是用于生成和操作 Matter 运营operational证书、认证attestation证书及测试用私钥的 CLI 工具源码位于 src/tools/chip-cert。其命令处理器覆盖生成 CHIP 证书、转换证书格式、转换私钥格式、校验证书链或 PDC 身份、重签证书、打印证书、生成认证证书、生成/打印证书声明CD。2.1 构建 chip-cert运行gn_build.sh时会顺带构建该工具单独构建只需. ./scripts/activate.sh gn gen out/host ninja -C out/host chip-cert ./out/host/chip-cert help查看全局用法用./chip-cert help查看单个子命令参数用./chip-cert gen-cert --help。2.2 运营证书操作实战1. 生成根证书Root CA与私钥./chip-cert gen-cert --type r --subject-chip-id CACACACA00000001 --valid-from 2020-10-15 14:23:43 --lifetime 7305 --out-key Chip-Root-Key.pem --out Chip-Root-Cert.pem --out-format x509-pem2. 用根证书签发中间 CAICA证书与私钥./chip-cert gen-cert --type c --subject-chip-id CACACACA00000002 --valid-from 2020-10-15 14:23:43 --lifetime 7305 --ca-key Chip-Root-Key.pem --ca-cert Chip-Root-Cert.pem --out-key Chip-ICA-Key.pem --out Chip-ICA-Cert.pem --out-format x509-pem3. 用 ICA 签发多个节点Node证书./chip-cert gen-cert --type n --subject-chip-id DEDEDEDE0000001D --subject-fab-id FAB000000000001D --valid-from 2020-10-15 14:23:43 --lifetime 7305 --ca-key Chip-ICA-Key.pem --ca-cert Chip-ICA-Cert.pem --out-key Chip-Node-Key.chip-b64 --out Chip-Node-Cert.chip-b64 --out-format chip-b64注意最后一条示例中节点证书与私钥输出为 base-64 编码的 CHIP 原生格式chip-b64而非前两条示例的 PEM 格式。chip-cert还支持以命令行字符串形式直接传入 CA 证书/密钥和节点公钥见 src/tools/chip-cert/README.md 中的完整长示例演示了多格式混用CA 私钥用 X.509 Hex 格式、CA 证书用 CHIP TLV base64 格式、节点公钥用 CHIP TLV Hex 格式。4. 校验生成的证书链./chip-cert validate-cert Chip-Node-Cert.chip-b64 -c Chip-ICA-Cert.pem -t Chip-Root-Cert.pem5. 格式转换与内容查看CA 服务通常产出标准 X.509 PEM投产前可转换为 CHIP 原生 TLV 格式./chip-cert convert-cert Chip-ICA-Cert.pem Chip-ICA-Cert.chip --chip ./chip-cert print-cert Chip-ICA-Cert.chip2.3 认证证书Attestation实战1. 生成产品认证机构PAA证书与私钥./chip-cert gen-att-cert --type a --subject-cn Matter Development PAA 01 --valid-from 2020-10-15 14:23:43 --lifetime 7305 --out-key Chip-PAA-Key.pem --out Chip-PAA-Cert.pem2. 用 PAA 签发产品认证中间PAI证书./chip-cert gen-att-cert --type i --subject-cn Matter Development PAI 01 --subject-vid FFF1 --valid-from 2020-10-15 14:23:43 --lifetime 7305 --ca-key Chip-PAA-Key.pem --ca-cert Chip-PAA-Cert.pem --out-key Chip-PAI-Key.pem --out Chip-PAI-Cert.pem3. 用 PAI 签发多个设备认证证书DAC./chip-cert gen-att-cert --type d --subject-cn Matter Development DAC 01 --subject-vid FFF1 --subject-pid 0123 --valid-from 2020-10-15 14:23:43 --lifetime 7305 --ca-key Chip-PAI-Key.pem --ca-cert Chip-PAI-Cert.pem --out-key Chip-DAC-Key.pem --out Chip-DAC-Cert.pem4. 校验认证证书链也可用 OpenSSL 交叉验证./chip-cert validate-att-cert --dac Chip-DAC-Cert.pem --pai Chip-PAI-Cert.pem --paa Chip-PAA-Cert.pem openssl verify -CAfile Chip-PAA-Cert.pem -untrusted Chip-PAI-Cert.pem Chip-DAC-Cert.pem2.4 PDC 身份受限自签名证书实战生成 PDC 身份./chip-cert gen-cert --type p --out-key identity-key.pem --out identity.pem --out-format x509-pem ./chip-cert convert-cert -x identity.pem identity.hex ./chip-cert validate-cert -p identity.pem echo OK ./chip-cert validate-cert -p identity.hex echo OK两种格式均作为自签名身份通过校验。2.5 命令参考完整参数速查gen-cert生成 CHIP 证书-t/--type取r根证书、cCA 证书、n节点证书、f固件签名证书、v厂商 ID 校验签名者证书-i/--subject-chip-id为 8 字节内十六进制 Subject ChipId根证书为 ChipRootId中间 CA 为 ChipICAId节点证书为 ChipNodeId取值范围[1, 0xFFFFFFEFFFFFFFFF]固件签名证书为 ChipFirmwareSigningId-f/--subject-fab-id为 Fabric Id不可为 0-a/--subject-cat为 CASE 认证标签低 16 位版本子字段不可为 0-c/--subject-cn-u为 UTF8String 形式的 Common Name-p/--path-len-constraint写入 basic constraint 扩展-x/--future-ext-sub追加 NID_subject_alt_name 扩展-2/--future-ext-info追加 NID_info_access 扩展-C/--ca-cert与-K/--ca-key指定签名 CA文件或字符串-k/--key指定新证书公私钥缺省则新生成-o/--out输出证书-表示 stdout-O/--out-key输出公私钥-k未指定时必须提供-F/--out-format支持x509-pem、x509-der、x509-hex、chip原始 CHIP TLV、chip-b64默认、chip-hex-V/--valid-from为YYYY-MM-DD [HH:MM:SS]缺省当天起-l/--lifetime为整天天数特殊值4294967295表示无明确过期时间。convert-cert证书格式互转输入格式自动检测-p/--x509-pem、-d/--x509-der、-X/--x509-hex、-c/--chip原始 CHIP TLV、-x/--chip-hex、-b/--chip-b64默认。convert-key密钥格式互转输入格式自动检测输出选项包括-p/--x509-pem、-d/--x509-der、-x/--x509-hexSEC1/RFC-5915 系列、-P/--x509-pubkey-pem仅公钥、-c/--chip、-b/--chip-b64默认、-C/--chip-pubkey、-B/--chip-pubkey-b64、-E/--chip-pubkey-hex。注意私钥格式包含公私钥两者公钥格式仅含公钥因此支持“私钥→公钥”转换但不能做“公钥→私钥”转换。resign-cert用新 CA 重签证书-c/--cert待重签证书、-o/--out输出、-C/--ca-cert、-K/--ca-key、-s/--self生成自签名证书。validate-cert校验证书链或单个 PDC 身份-c/--cert非信任证书通常为 ICA、-t/--trusted-cert信任锚根证书RCAC、-p/--pdc-identity按 PDC 身份校验此时不得使用前两项。print-cert-o/--out输出文件缺省/-为 stdout。gen-att-cert生成认证证书-t/--type取aPAA、iPAI、dDAC-c/--subject-cn为 CN-V/--subject-vid与-P/--subject-pid为十六进制 VID/PID-a/--vid-pid-as-cn将 VID/PID 编码为 CN 属性缺省按 Matter 专用 OID 编码-C/-K/-k/-o/-O语义同 gen-cert-f/--valid-from与-l/--lifetime同上。validate-att-cert-d/--dac、-i/--pai、-a/--paa分别指定 DAC、PAI、PAA格式自动检测。gen-cd生成证书声明 CMS 签名消息-K/--key签名私钥-C/--cert与密钥关联的证书其 Subject Key Identifier 会写入 CD-O/--out输出-f/--format-version格式版本-V/--vendor-idVID-p/--product-idPID最多 100 个每个 PID 各用一个-p-d/--device-type-id设备类型 ID-c/--certificate-id证书 IDUTF8 字符串-l/--security-level与-i/--security-info安全级别/信息十六进制-n/--version-number版本号-t/--certification-type取0Development and Test默认、1Provisional、2Official-o/--dac-origin-vendor-id、-r/--dac-origin-product-id指定 DAC 来源 VID/PID-a/--authorized-paa-cert指定被授权签发 PAI 的 PAA 证书文件最多 10 个仅提取其 SKID 值写入 CD。gen-cd 示例签名密钥/证书使用仓库内的测试文件./chip-cert gen-cd -C credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem -K credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem --out cd.bin -f 1 -V FFF1 -p 8000 -d 0016 -c ZIG0000000000000000 -l 0 -i 0 -n 0001 -t 0生成 CMS 签名的 CD 写入cd.bin。量产时替换-V FFF1你的 VID、-p 8000你的 PID、-d 0016你的主设备类型三者均为大写十六进制且需补零对齐。示例未包含dac-origin-vendor-id与dac-origin-product-id。print-cd以十六进制字符串参数直接打印 CD 内容完整示例见 src/tools/chip-cert/README.md 的print-cd小节。version./out/debug/standalone/chip-cert version输出工具版本与版权信息。三、C 工具spake2p —— 设备产线配对参数生成器spake2p用于为设备量产预置生成 SpaKE2 参数PIN 码与 Verifier源码位于 src/tools/spake2p。SpaKE2 是 Matter 中 PASE基于口令的配对会话的核心算法产线需要把 Passcode、Iteration Count、Salt 与 Verifier 烧录进设备。3.1 基本用法./spake2p gen-verifier --pin-code 45502684 --iteration-count 1000 --salt U1BBS0UyUCBLZXkgU2FsdA --out spake2p-provisioning-data.csv为指定 PIN 码生成 verifier输出为 CSV。查看全局用法./spake2p help查看子命令参数./spake2p gen-verifier --help。3.2 批量生成# 100 组随机 PIN、随机 Salt 及对应 Verifier ./spake2p gen-verifier --count 100 --iteration-count 15000 --salt-len 32 --out spake2p-provisioning-data.csv # 100 组指定 PIN、随机 Salt 及对应 Verifierpincodes.csv 每行一个合法 PIN 码 ./spake2p gen-verifier --count 100 --pin-code-file pincodes.csv --iteration-count 15000 --salt-len 32 --out spake2p-provisioning-data.csvpincodes.csv的格式示例可通过spake2p --help查看。该工具也被上层 Python 工具调用Silabs 的 FactoryDataProvider.py 既可接收预生成 verifier也可通过--gen_spake2p_path传入spake2p二进制现场生成。四、Python 工具内存占用分析脚本scripts/tools/memoryscripts/tools/memory 提供一组收集、聚合、报告固件内存占用的脚本对嵌入式 Matter 设备Flash/RAM 通常紧张尤其重要。4.1 公共参数可选参数-h/--help-v/--verbose信息级日志重复出现进入调试模式--config-file FILE读取平台配置文件通常来自platform/子目录命令行参数覆盖配置文件。输入选项-f/--collect-method METHOD指定解析方式——elftoolsPython elftools 库、readelf外部 readelf通常最快、bloaty外部 bloaty、csv/tsv读逗号/制表符分隔表、su读取.su栈使用报告--collect-prefix/--prefix/--strip-prefix PATH从源文件名的开头剥离该路径。输出选项-O/--output-file默认 stdoutcsv/tsv 时是文件名前缀-t/--output-format支持text、csv、tsv、json_split/json_records/json_index/json_columns/json_values/json_table参见 Pandas 文档及 tabulate 提供的任意格式--limit/--report-limit BYTES只显示大于该尺寸的项目支持K等后缀--by/--report-by GROUP取region按平台定义的内存区域聚合如FLASH/RAM、section按段聚合、symbol按符号聚合。选择选项--section(-select/-ignore/-select-all/-ignore-all)系列、--symbol(...)系列、--region(...)系列用于精确圈定分析范围。外部工具选项--tool-bloaty FILE、--tool-nm FILE、--tool-readelf FILE。4.2 各脚本与示例report_summary.py按 region/section 汇总总大小。例如report_summary.py --byregion --config-file${PLATFORM}.cfg ${IMAGE}输出 FLASH/RAM 各占 524285/165501 字节。report_tree.py树状展示内存使用--limit或按 section 限流很有用例如report_tree.py --demangle --byregion --regionRAM:8K --prefix${CHIP_TOOLS} --prefix${PWD} --config-file${PLATFORM}.cfg ${IMAGE}可展示lwip等模块在 RAM 中的占比树。gaps.py报告镜像中不属于任何符号的部分通常为字符串常量等匿名数据目前仅支持elftools读取器、仅适用于 ELF 文件例如gaps.py --section.text --limit1K --config-file${PLATFORM}.cfg ${IMAGE}。diffsyms.py比较两个文件间各符号大小及是否存在的差异一般用于同一产物的两个版本如工作分支 vs master对比。block.py报告命中黑名单的符号引用一般用于库.a或目标文件如block.py --config-fileblocklist.cfg out/release/${PLATFORM}/obj/src/transport/lib/libTransportLayer.a。collect.py读取内存使用数据并转写为其他形式如 csv、json便于后续二次处理。4.3 ELF 大小专项工具scripts/tools/ELF_SIZE_TOOLINGELF_SIZE_TOOLING.md 记录了三个专项脚本file_size_from_nm.py为 ELF 内的方法/命名空间构建交互式树图例如./scripts/tools/file_size_from_nm.py --zoom ::chip::app ./out/qpg-qpg6200-light/chip-qpg6200-lighting-example.out聚焦查看chip::app下的空间占用。binary_elf_size_diff.py对比两个 ELF通常 master 构建与本地修改构建输出CHANGED/REMOVED/ADDED与具体尺寸差支持--output csv --skip-total输出 CSV也支持--output sankey结合--sankey-rules out/rules.txt规则形如match regex to group_name color colorstr导出桑基图数据。compile_flags_from_compile_commands.py从compile_commands.json提取编译标志主要是 include 路径配合本地编译好的 Compiler Explorergcc-arm-none-eabi-g、Node 20用于研究 CHIP 代码的汇编生成。五、Python 工具NXP 产线与 OTA 工具5.1 NXP Factory Data Generator工具由 generate.py、default.py、custom.py 三文件组成generate.py用argparse解析参数将InputArgument实例转为(K, L, V)元组序列生成输出二进制default.py定义基类InputArgument抽象接口为key()、length()、encode()通过output()产出(K, L, V)custom.py定义各具体参数类必须继承默认类。完整用法见 NXP 制造流程指南。5.2 NXP OTA Image Toolota_image_tool.py生成|OTA standard header|TLV1|...|TLVn|格式的 OTA 镜像负载为标准 TLV非 Matter TLVOTA 传输时 TLV 可跨多个 BDX 块OTAImageProcessorImpl需考虑这点目前支持mcxw71平台。它是标准ota_image_tool.py的包装create子命令除标准选项如-v 0xDEAD -p 0xBEEF -vn 50000 -vs 1.0 -da sha256外还支持自定义选项--app-input-file应用二进制、--app-version/--app-version-str/--app-build-date应用版本描述符可与-vn不同、--bl-input-fileSSBL 二进制及对应版本参数、--factory-data启用工厂数据、--cert_declaration/--dac_cert/--dac_key/--pai_certMatter 证书、--json符合ota_payload.schema的 JSON描述自定义 TLV可一次描述多个 TLV。未指定 app/SSBL 描述符选项时使用默认值50000、50000-default、2023-01-01。参考命令见create_ota_images.sh多应用 SSBL 示例见examples/ota_max_entries_example.json。对应 OTA 实现说明见 NXP OTA README。六、Python 工具Silabs 工厂数据与 OTA6.1 FactoryDataProvider.pyEFR32 设备FactoryDataProvider.py 将一组可入网commissionable数据写入 EFR32MG24 设备的 Matter nvm3 分区。前置条件一组匹配的 spake2p 凭据Setup Discriminator、Setup Passcode、Spake2p Iteration count、Spake2p Salt以及 Spake2p Verifier 或 spake2p 生成器路径。主要参数--discriminator、--passcode、--spake2_iteration、--spake2_saltbase64、--spake2_verifierbase64或--gen_spake2p_path二者择一、--mcu_family设备未连接时必需、--jtag_serial多设备时指定、--product_id/--vendor_id/--product_name/--vendor_name/--hw_version/--hw_version_str/--unique_id(128位hex串)/--serial_number、--commissioning_flow0Standard1User Action2Custom、--rendezvous_flag1SoftAP2BLE4OnNetwork可组合。设备在线时直接写入 nvm3离线时生成可稍后烧录的镜像需指定 MCU 系列。示例python3 FactoryDataProvider.py --passcode 20202021 --discriminator 0xf00 --spake2_iteration 1000 --spake2_salt U1BBS0UyUCBLZXkgU2FsdA --spake2_verifier uWFwqugDNGiEck/po7KHwwMwwqZgN10XuyBajPGuyzUEV/iree4lOrao5GuwnlQ65CJzbeUB49s31EHNEkg0JVI5MGCQGMMT/SRPFNRODm3wH/MBiehuFc6FJ/NH6Rmzw6.2 Silabs OTA Image Toolota_multi_image_tool.py同样生成|OTA standard header|TLV1|...|TLVn|格式镜像支持 EFR32 平台。create子命令的标准选项-v -p -vn -vs -da与自定义选项应用类--app-input-file/--app-version/--app-version-str/--app-build-date、工厂数据类--factory-data/--cert_declaration/--dac_cert/--dac_key/--pai_cert、加密类--enc_enable/--input_ota_key16 字节 AES 密钥、自定义 TLV 类--json遵循ota_payload.schema。完整选项清单见 silabs/ota/README.md。七、Python 工具Telink 量产分区生成器mfg_tool.py 面向大批量生产用于生成工厂分区factory partitions。前置依赖chip-cert、spake2p、chip-tool均通过source scripts/activate.sh gn gen build/out/host ninja -C build/out/host构建到build/out/host并加入PATH以及 Python 依赖python3 -m pip install -r requirements.build.txt -r requirements.telink.txt。生成单个分区使用 Matter 项目的默认测试 PAI 密钥/证书/CDpython3 mfg_tool.py -v 0xFFF2 -p 0x8001 \ --serial-num AABBCCDDEEFF11223344556677889900 \ --vendor-name Telink Semiconductor \ --product-name not-specified \ --mfg-date 2022-12-12 \ --hw-ver 1 \ --hw-ver-str prerelase \ --pai \ --key /path/to/connectedhomeip/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Key.pem \ --cert /path/to/connectedhomeip/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.pem \ -cd /path/to/connectedhomeip/credentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der \ --spake2-path /path/to/spake2p \ --chip-tool-path /path/to/chip-tool \ --chip-cert-path /path/to/chip-cert加--count 5可一次生成 5 个分区每个设备独立 SN。输出目录结构为out/vid_pid/SN/factory_data.bin/factory_data.hex分区镜像、summary.json、onb_codes.csv入网码、qrcode.png配对二维码internal/存放中间文件pai_cert.der、DAC_cert.der/.pem、DAC_private_key.bin、DAC_public_key.bin。烧录流程以lighting-app为例先west build -- -DCONFIG_CHIP_FACTORY_DATAy生成带空工厂数据分区的固件输出./build/zephyr/zephyr.bin烧录到 B91 板后再把factory_data.bin写到对应偏移地址——2 MB Flash 为0xff000tlsr9518adk80d_2m_flash.overlay4 MB Flash 为0x205000tlsr9518adk80d_4m_flash.overlay具体以对应 flash overlay 中factory_partition的 reg 为准。启动日志应出现 Serial Number、Vendor/Product Id、Setup Pin Code、Setup Discriminator 及SetupQRCode: [MT:...]等设备配置信息完整日志见 readme.md。八、把工具串起来一份完整的调试→量产流水线综合以上各节一个典型的开发与量产准备流程为调试阶段用chip-cert生成根证书→ICA→节点证书链并validate-cert校验用spake2p为测试 PIN 生成 verifier用chip-cert gen-cd与测试 CD 签名证书签发 CD。固件优化阶段用 scripts/tools/memory 的report_summary.py/report_tree.py定位 Flash/RAM 大户用binary_elf_size_diff.py对比分支改动带来的尺寸变化。量产准备阶段按平台选择产线工具——Telink 用mfg_tool.py产出factory_data.binqrcode.pngSilabs 用FactoryDataProvider.py写入 nvm3 或生成离线镜像NXP 用factory_data_generator与ota_image_tool.py打包应用/SSBL/工厂数据 OTA 镜像证书材料均来自第 1 步或 credentials/test 中的测试证书。上述所有工具均为只读构建与使用无需修改仓库源码即可完成从开发调试到产线镜像生成的全流程。【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考