在工程中使用 SiFli 组件注册表
以下步骤说明如何在现有工程中安装和使用 SiFli 组件注册表 依赖。
备注
当前页面中的部分截图仍来自旧版命令界面;若截图中的命令格式与正文不同,请以当前 sdk.py sf-pkg ... 命令为准。
初始化依赖(sf-pkg init)
sdk.py sf-pkg init
执行成功后,会在 project 目录下生成一份 sf-pkg.yaml 声明文件(YAML 格式,支持注释),例如:
# 工程级固定依赖:每一项为 <包名>/<版本号>@<用户名>,版本可写区间
requires:
- sht30/0.0.4@caisong123
# - battery_calculator/[^1.2]@sifli
# 可选:工程要求的 SDK 区间(npm semver,如 ^2.4)
# support_sdk_version: "^2.4"
requires 为空即表示不依赖任何包;需要时按 <包名>/<版本号>@<用户名> 格式添加即可,例如添加 SHT30 传感器驱动包:sht30/0.0.4@caisong123。
备注
早期版本通过 conanfile.py 声明依赖。若工程根存在 conanfile.py 且没有 sf-pkg.yaml,sf-pkg install 会视为”高级模式”,直接对它执行 conan install(保持旧行为,不参与模块级依赖聚合)。建议新工程使用 sf-pkg.yaml。
sf-pkg.yaml 字段说明
sf-pkg.yaml 同时用于工程根与 SDK 内置模块,字段说明如下:
requires(列表,可选):本工程/本模块需要的外置组件。每一项格式为<包名>/<版本号>@<用户名>,版本可写区间,例如sht30/0.0.4@caisong123、battery_calculator/[^1.2]@sifli。为空或不写等价于无依赖。support_sdk_version(字符串,可选):声明要求的 SDK 版本区间,使用 npm 风格 semver(如^2.4、~2.4.1、>=2.4,<3);不写则不检查。安装/构建时会用环境变量SIFLI_SDK_VERSION校验,不满足即在联网前报错并指明来源文件。工程根与每个模块各自声明、分别校验。enable(列表,可选,仅模块清单使用):模块的 Kconfig 使能符号,列表中任一为y即视为”本模块参与编译”,此时它的requires才会并入拉取集合;全部不满足则不拉取。这里填 Kconfig 中定义的真实符号名(.config行首的CONFIG_是 kconfig 写文件时自动加的,不算符号名的一部分;若符号名本身就以CONFIG_开头,则如实填写)。若省略/为空则视为”总是参与”,仅适合确实没有开关的固定模块。
工程根 sf-pkg.yaml 中 enable 不生效——工程根是固定依赖,sf-pkg.yaml 只需写 requires(和可选的 support_sdk_version)。
模块级外置依赖(模块清单)
SDK 内置模块(如 middleware/*、板级驱动等)也可以各自携带一份 sf-pkg.yaml,声明”仅当本模块参与编译时才需要拉取”的外置组件:
# middleware/<module>/sf-pkg.yaml
# 必须放在"定义该模块使能符号的 Kconfig"同目录
enable:
- BLE_STACK # Kconfig 使能符号,任一为 y 即参与
requires:
- mesh-lib/1.3.0@acme # conan 引用,格式同工程根
support_sdk_version: "^2.4" # 可选,同工程根语义
这份清单必须与其模块的 Kconfig 放在同一目录,且该 Kconfig 要在当前板子的配置树内被解析到,否则清单不会被发现(不参与就不会拉取)。
模块启用时,除拉取外还要让包参与链接:在模块自己的 Kconfig 里对包在
Kconfig.conandeps中声明的使能符号做select。更完整的机制与约定见 模块级依赖设计文档。
搜索可用的包
如果不确定包名或版本号,可以搜索:
sdk.py sf-pkg search <package_name>
示例:
sdk.py sf-pkg search sht30
也可以直接在组件注册表官网进行搜索:点此访问 SiFli组件注册表
安装依赖(sf-pkg install)
在工程的 project 目录下执行:
sdk.py sf-pkg install
不带
--board:只按工程根sf-pkg.yaml的requires安装,不合并模块级依赖。带
--board <board>:额外把该板配置中”启用模块”声明的外置组件合并安装;会先自动按 board.conf + proj.conf 解析该板配置(生成构建目录内的kconfiglist/.config),无需先编译。带
--board-search-path <dir>:在 SDKcustomer/boards之外附加板子搜索目录(同 scons--board_search_path;也可用环境变量SIFLI_SDK_BOARD_SEARCH_PATH)。

安装成功后,会在 project 目录下生成 sf-pkgs 文件夹,其中包含了所安装的包。
构建时自动拉取
只要工程根存在 sf-pkg.yaml,执行 scons --board=<b> 时构建入口会自动检测”本次板配置下启用模块”的依赖集合是否有变化,有变化则自动安装后再继续编译(幂等,未变化会跳过)。需要关闭自动拉取时:
SIFLI_SF_PKG_OFFLINE=1 scons --board=<b> # 或使用 scons --no-sf-pkg
使用驱动
安装完成后即可直接使用驱动:
可以直接编译
include 头文件时无需填写绝对路径,Conan 会自动处理路径配置
Kconfig 配置注意事项
menuconfig会自动整合sf-pkgs文件夹下的所有Kconfig文件这些配置项会出现在
menuconfig的 SiFli External Components 菜单中