跳转至

HiDiTingV100 一站式CLI开发环境使用指南

一站式CLI开发环境通过统一的命令行工具 fbb 封装了工程配置、编译、烧写、监视等完整工作流。开发者无需下载 CMake/Ninja 等环境,也无需操作这些底层命令,只需使用 fbb 系列子命令即可完成全部操作。

主要特性:

  • 支持 SDK 源码树外执行工程构建
  • 支持一键快速创建空工程
  • 通过图形化功能裁剪与配置
  • 内置烧写与串口监视器
  • 跨平台:Windows、Linux

环境准备

📌 前置依赖:Git

安装命令通过 Git 协议拉取源码,需确保系统已安装 Git。

  • Windows 推荐通过 winget 安装:
    winget install --id Git.Git -e --source winget
    
  • Linuxsudo apt install git(Debian/Ubuntu)或 sudo dnf install git(Fedora)

安装后重新打开终端,执行 git --version 确认安装成功。

环境安装

一行命令完成 uv 安装、fbb-cli 安装和 fbb setup

Windows(以管理员身份启动 PowerShell):

irm https://dl.hispark.hisilicon.com/bootstrap.ps1 | iex

提示(仅在报错时处理)

若安装时提示 PowerShell requires an execution policy in [Unrestricted, RemoteSigned, Bypass],在当前窗口执行:

Set-ExecutionPolicy Bypass -Scope Process

该设置仅对当前 PowerShell 进程生效,关闭窗口后自动失效。

若提示「此应用已被你的组织的应用程序控制策略阻止」,请确认下载地址和文件来源正确,并联系 IT 按企业流程审核、放行 CLI 下载的工具。

Linux:

curl -fsSL https://dl.hispark.hisilicon.com/bootstrap.sh | sh

完成后执行 fbb doctor 验证环境是否就绪。若输出正常,则继续进行代码下载与编译。


代码下载与编译

执行以下命令下载 SDK,可通过 --dir <sdk_dir> 参数指定安装路径;当前默认安装到用户目录的 hispark 子目录。

fbb sdk install hs-fbb@master

下载完成后,按终端 Done. Next: 提示进入 SDK 的 src 目录:

cd "<Done. Next: 显示的 src 路径>"

仅在提示需要准备构建环境时执行:

fbb setup

编译固件:

fbb build pack_diting_community

编译成功后,固件包位于 output\3322\fwpkg\diting-community.fwpkg

⚠️ 路径要求:SDK 路径不能包含空格或中文。

⚠️ 编译失败提示:若编译日志中出现 access denied,可能是杀毒软件拦截了工具链进程。请确认工具来源可信,并将工具链相关可执行程序(含 ccache)加入杀毒软件信任白名单;企业环境请联系 IT 管理员处理。


烧写与调试

Windows

USB 烧写(推荐)

在管理员 PowerShell 中执行:

fbb flash -f "output\3322\fwpkg\diting-community.fwpkg" --chip 3322 -d

烧写成功后监视启动日志:

fbb monitor --port COM3

串口烧写

显示烧写等待后,给 Hi3322 断电并重新上电:

fbb flash -f "output\3322\fwpkg\diting-community.fwpkg" -p COM3 --chip 3322 --manual-reset --timeout 600

烧写成功后,使用上面的 monitor 命令查看启动日志。

Linux

Linux 当前使用串口烧写。普通用户首次使用前需加入 dialout 组:

首次配置权限:执行 sudo usermod -aG dialout "$USER",然后注销并重新登录;重新打开终端后执行 id -nG,确认输出包含 dialout

显示烧写等待后,给 Hi3322 断电并重新上电:

fbb flash -f "output/3322/fwpkg/diting-community.fwpkg" -p /dev/ttyUSB0 --chip 3322 --manual-reset --timeout 600

烧写成功后监视启动日志:

fbb monitor --port /dev/ttyUSB0 --baud 750000 --until "APP\|run:" --timeout 45

FLASH_RC=0 表示烧写成功;monitor 输出包含 APP|run: 表示新固件已启动。若实际日志波特率为 115200,请将 --baud 改为 115200

低功耗设备:USB 烧写提示 specify --trigger-port; AT probe saw none 时,先通过 AT 串口执行 AT+PM=0 关闭低功耗,再重新烧写。


其他

创建并编译树外工程

树外工程是位于 SDK src 目录之外的独立工程,通过 CLI 引用 SDK 进行编译。

📌 路径建议:树外编译可能因为路径过长导致 Ninja 创建 .rsp 文件失败;为避免该问题,建议使用较短的树外工程路径(如 D:\fbb\myapp)。

编译时工具链会将应用代码与所依赖的 SDK 组件一并编译,并生成固件镜像(.fwpkg)。

📌 树外编译预先配置 SDK 路径(执行命令时 --sdk-dir 也可以指定):

Windows(PowerShell):

$env:FBB_SDK_DIR = "D:\codes\hs-fbb\src"

如需永久生效,将上述命令添加到 PowerShell Profile($PROFILE)中,重新打开终端后即可生效。

Linux:

export FBB_SDK_DIR="$HOME/codes/hs-fbb/src"

如需永久生效,将上述命令添加到 ~/.bashrc~/.zshrc 中,然后执行以下命令使其立即生效:

source ~/.bashrc
  1. 创建工程:

    fbb create-project myapp
    
  2. 进入工程目录:

    cd myapp
    
  3. 查看可用目标:

    fbb list-targets
    
  4. 设置编译目标:

    fbb set-target pack_diting_community
    
  5. 编译:

    fbb build
    

工程目录结构

fbb create-project myapp 生成的标准工程结构如下:

myapp/
├── fbb-project.toml                # 工程描述文件(工程名、chip,以及可选的 SDK 版本等)
├── CMakeLists.txt                  # 顶层工程文件
├── README.md
└── main/
    ├── CMakeLists.txt              # 主组件构建文件
    ├── include/
    │   └── samplepage/
    │       ├── SamplePage.h
    │       ├── SamplePresenter.h
    │       └── SampleView.h
    └── src/
        ├── SamplePage.cpp
        └── SamplePresenter.cpp

执行 fbb set-target 后,CLI 会在工程根目录另行创建 .fbb-target,用于保存默认编译目标。

📌 说明:模板固定使用 samplepage 作为组件名,生成的源文件以 Sample 前缀命名。开发者可直接在此基础上修改,或重命名为自己的组件名。

顶层 CMakeLists.txt 示例:

cmake_minimum_required(VERSION 3.14.1)

set(FBB_PROJECT_COMPONENT_NAME "samplepage")
find_package(fbb REQUIRED HINTS
    "$ENV{FBB_SDK_DIR}/build/cmake"
    "$ENV{FBB_SDK_ROOT_DIR}/build/cmake")

project(myapp)

main/CMakeLists.txt 示例:

set(COMPONENT_NAME "samplepage")

set(SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/src/SamplePage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/SamplePresenter.cpp
)

set(PUBLIC_HEADER
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)

set(WHOLE_LINK true)
set(MAIN_COMPONENT true)
set(APP_TARGETS "diting-community")

build_component()

命令参考

fbb list-targets

列出 SDK 中所有可用的编译目标(Individual Target)和目标组(Target Group)。

fbb list-targets

输出示例:

可用目标:
==================================================

[3322] 单目标:
  3322-loaderboot
  3322-recovery
  3322-seliteos-release
  3322-ssb
  diting-community
  diting-community-bike
  diting-community-native-js
  diting-community-xts

[3322] 目标组:
  pack_diting_community
  pack_diting_community_bike
  pack_diting_community_native_js
  pack_diting_community_xts

共 8 个目标、4 个目标组,跨 1 个芯片

fbb set-target

设置当前工程的默认编译目标,目标名保存在工程目录下的 .fbb-target 文件中,后续 fbb build 在未指定目标时会读取此值。

命令格式:fbb set-target <目标名>

示例:

fbb set-target pack_diting_community

fbb get-target

查看当前工程已保存的默认目标。

fbb get-target

fbb create-project

在指定路径使用内置空白模板创建新工程。基于 SDK 示例创建工程请使用 fbb create-project-from-example

命令格式:fbb create-project <工程名> [--path <目录>]

参数 说明
<工程名> 必填。新工程的名称
--path <目录> 工程创建的父目录,默认为当前目录

示例:

使用空白模板在当前目录创建:

fbb create-project myapp

在指定目录创建:

fbb create-project myapp --path /home/user/projects

fbb create-component

命令格式:fbb create-component <组件名> [--path <父目录>]

📌 推荐用法:在工程内任意目录执行命令且不指定 --path,CLI 会自动定位工程根目录并创建 components/<组件名>。如需指定路径并让构建系统自动发现组件,请将 --path 设置为工程的 components 目录。

示例:

进入工程目录:

cd myapp

创建组件:

fbb create-component my_sensor

执行后生成:

myapp/
├── components/
│   └── my_sensor/
│       ├── CMakeLists.txt
│       ├── Kconfig
│       ├── component.c
│       └── include/
│           └── component.h
└── ...

📌 空组件说明:新建组件的 component.c 仅包含空函数占位实现,component.h 包含对应声明,开发者可在此基础上添加扩展功能逻辑。


fbb config get / set / unset

不打开图形界面,直接读取或修改目标的 Kconfig 选项(适合脚本/CI 场景)。

命令格式:

  • fbb config --target <Individual Target> get <CONFIG_NAME>
  • fbb config --target <Individual Target> set <CONFIG_NAME>=<值>
  • fbb config --target <Individual Target> unset <CONFIG_NAME>

示例:

fbb config --target diting-community get CONFIG_CODE_MINIATURE_ENABLE
fbb config --target diting-community set CONFIG_CODE_MINIATURE_ENABLE=y
fbb config --target diting-community unset CONFIG_CODE_MINIATURE_ENABLE

📌 前提:指定的 Individual Target 必须已有 .config 文件;目标组(如 pack_diting_community)没有独立的 .config,不能用于 fbb config

⚠️ fbb config set 注意set 命令配置的 CONFIG_NAME 必须在当前 .config 中已存在(即 SDK 支持该选项)。若配置项不存在,命令会报错。可先用 fbb config get <CONFIG_NAME> 确认选项是否可用。

⚠️ Hi3322 树外配置限制:当前版本不应在树外工程中使用 fbb menuconfig diting-community --mode defconfig 初始化配置,请保留 SDK 随目标提供的 3322 配置,不要用 defconfig 覆盖。


fbb menuconfig

打开基于 Kconfig 的图形化配置界面,可裁剪功能模块、调整编译开关。配置结果保存至对应目标的 .config 文件。

命令格式:fbb menuconfig <目标名>

示例:

fbb menuconfig diting-community

⚠️ 仅支持 Individual Targetmenuconfig 不支持 Group Target(如 pack_diting_community)。必须指定组内的具体 Individual Target,例如:fbb menuconfig diting-community

📌 说明:修改配置后需重新运行 fbb build 使配置生效。


fbb build

编译当前目标;--clean 先清理构建输出再全量编译。

编译已保存的默认目标:

fbb build

编译指定目标:

命令格式:fbb build <目标名>

清理后全量重新编译:

命令格式:fbb build --clean <目标名>

💡 增量编译fbb build 默认进行增量编译。CMake 会检测源文件变更,仅重新编译受影响的模块。

⚠️ SDK 工作区状态:当前 Hi3322 构建脚本可能更新 SDK 中的预编译库、第三方生成头文件、签名文件和缓存。即使采用树外工程,SDK 源码树也不保证完全只读。建议在干净的 SDK 工作区中构建,并在构建后执行 git status --short 区分源码改动与生成副作用。

参数 说明
<目标名> 可选。未指定时使用 fbb set-target 保存的默认目标
--clean 清理构建输出后全量编译

fbb flash

通过 hsflash 将固件包(.fwpkg)烧写到开发板,支持串口与 USB DFU 两种传输介质。

命令格式:fbb flash -f <固件路径> [选项]

选项 说明 默认值
-f/--file <路径> 指定 .fwpkg 固件包路径;当前 Hi3322 平铺包需要显式指定
-p/--port <COMx> 选择串口烧写并指定端口(如 COM3、/dev/ttyUSB0) 串口芯片可自动检测
-d/--device [VID:PID] 选择 USB DFU 烧写;可覆盖 SDK 设备 ID 读取 chip JSON
--trigger-port <COMx> USB 模式的 AT 控制串口 自动探测 AT 应答
--baud <N> 烧写波特率 读取 chip JSON
--chip <名称> 手动指定芯片配置键(Hi3322 使用 3322 从路径/目标名自动推断
--manual-reset 手动进入下载模式;Hi3322 实测需在显示烧写等待后断电重上电
--load-only 选择 *_load_only.fwpkg;当前 Hi3322 不提供该包,请勿使用
--no-elevate Windows 下禁用自动 UAC;需要管理员权限时直接失败
--timeout <秒> 可选的整体烧写超时时间 不设置,由 hsflash 使用各阶段超时
--json-summary 在 stdout 末尾输出一行 JSON 摘要(适合脚本解析)

具体烧写与 monitor 命令见上文烧写与调试


fbb monitor

打开串口监视器,实时查看开发板输出日志,支持超时退出与日志保存。

命令格式:fbb monitor [选项]

选项 说明
--port <COMx> 串口名(自动检测时可省略)
--baud <N> 波特率,默认 115200
--chip <名称> 芯片型号(单芯片 SDK 自动选择)
--until <正则> 匹配到正则表达式时自动退出(exit 0)
--timeout <秒> 超时秒数,超时未匹配 --until 则退出(exit 4)
--reset 打开串口后发送复位命令
--log <文件> 同时将输出写入日志文件(如 fbb-monitor.log);不指定则不记录

快速监视命令见上文烧写与调试。CI/CD 可在该命令后增加 --until <正则>--timeout <秒>--log <文件>


fbb list-examples

列出 SDK 内所有可用的示例工程。

fbb list-examples

fbb create-project-from-example

基于 SDK 内置示例工程创建新工程,适合快速开发特定功能。

命令格式:fbb create-project-from-example <示例名> [--name <工程名>] [--path <目录>]

参数 说明
<示例名> 必填。示例名见 fbb list-examples
--name <工程名> 可选。新工程目录名,默认与示例名相同
--path <目录> 工程创建的父目录,默认为当前目录

示例:

查看所有可用示例:

fbb list-examples

基于已列出的示例创建(工程名与示例名相同):

命令格式:fbb create-project-from-example <示例名> --path ~/projects

指定工程名:

命令格式:fbb create-project-from-example <示例名> --name myapp --path ~/projects


命令速查表

命令 功能
fbb setup 初始化构建环境(工具链、venv)
fbb list-targets 列出所有可用目标和目标组
fbb set-target <目标> 设置默认编译目标(保存到工程 .fbb-target
fbb get-target 查看已保存的默认目标
fbb create-project <名称> 创建新工程
fbb create-component <名称> 创建新组件
fbb config --target <目标> get/set/unset 非交互式读写 Individual Target 的 Kconfig 选项
fbb menuconfig <目标> 图形化功能配置(仅 Individual Target)
fbb build [目标] 增量编译
fbb flash -f <固件> -p <串口> 使用原串口方式烧写固件
fbb flash -f <固件> -d 在管理员 PowerShell 中执行 USB 烧写并自动复位
fbb monitor --port <串口> --baud <波特率> 串口监视器
fbb list-examples 列出可用示例
fbb create-project-from-example <示例> 基于示例创建工程
fbb describe 打印环境、SDK、工具链状态(诊断用)
fbb doctor 诊断构建环境