工具命令行¶
SDK 随附主机端工具的命令格式、选项与示例,示例以 IPRO7AI Reef EVK V4.0 为准。逐步的烧录与控制台操作见烧录与串口。
工具一览¶
| 工具 | 路径 | 用途 | 获取方式 |
|---|---|---|---|
build_freertos.sh |
SDK 根目录 | 构建、清理、烧录、控制台、大小报告与自动测试 | 随附 |
make + project.build |
各应用的 Makefile |
构建单个应用 | 随附 |
serial_monitor.py |
tools/ |
读取控制台输出,可先发送一行命令、等待指定字符串并保存到文件(macOS、Linux;非交互式终端) | 随附 |
create_ota.py |
tools/ |
把 IntelProCube 的合并镜像打包成 boot2 OTA 包 | 随附 |
| 浏览器版图像 Teach | tools/teach_web/ |
在 Chrome/Edge 中采集图像、训练分类器并部署到 ipro_reef_teach |
随附 |
mfg_payload.py |
apps/ai/ipro_reef_teach/ |
生成 ipro_reef_teach 的 --mfg 烧录内容(模式与声纹模型) |
随附 |
| Reef BLE OTA 工具 | apps/bluetooth/ble/ipro_ble_remote/tools/ |
make_reef_ota.sh、reef_ota.py、reef_ble_test.py,以及 Android 演示 App ipro_remote_demo.apk(在应用目录中) |
随附 |
parse_kconfig_dynamic.py |
tools/script/ |
把 Kconfig 树导出为 JSON(需要 kconfiglib,构建流程不使用) | 随附 |
| CMake 3.15 | tools/cmake/ |
系统中没有 cmake 时的备用版本,仅限 Linux x86-64 |
随附 |
| Zephyr 脚本 | tools/zephyr/ |
Zephyr 工作区、构建、烧录与控制台(ipro7_evb、ipro7ai_evk 板型) |
随附 |
| IntelProCube 0.7.0.1 命令行烧录工具 | ipro_iot_tool_macos、ipro_iot_tool_linux、ipro_iot_tool.exe |
通过串口烧录固件、分区表、boot2 与 mfg 内容 |
未包含在 V2.2.1 中,从 GitHub 下载 |
| RISC-V 工具链 | /opt/toolchain/riscv_ipro7/ |
编译(GCC 14,riscv64-unknown-elf-) |
未包含在 V2.2.1 中,请联系 INTELPRO |
| IPRO AI Studio | — | IPRO AI Teach、模型转换与部署 | 不在 SDK 中,从 GitHub 下载 |
OpenOCD/GDB 连接配置、板级自动测试脚本 tools/board_test.sh、崩溃转储主机端工具 |
— | 片上调试、自动上板测试、读取 ==DUMP_READY: 之后的内存 |
未包含在 V2.2.1 中,请联系 INTELPRO |
tools/kconfig/menuconfig.py、configs/ 默认配置目录、OTA 签名用的 ota_products.py |
— | make menuconfig、make defconfig、create_ota.py --sign-key |
未包含在 V2.2.1 中 |
本版本没有通过 JTAG/GDB 进行片上调试的配置与步骤;调试以串口控制台、日志与离线的 addr2line 为主,见调试与故障排除。
环境变量¶
| 变量 | 使用的工具 | 作用 |
|---|---|---|
IPRO_FLASH_TOOL |
build_freertos.sh、make_reef_ota.sh、tools/zephyr/flash.sh、west flash |
IntelProCube 命令行工具的路径。未设置时在 PATH 中查找与本机操作系统对应的工具名称 |
IPRO_SERIAL_PORT |
build_freertos.sh、tools/zephyr/ 脚本、west flash |
默认串口。未设置且未指定 -p 时,若系统中只有一个 USB 串口就自动使用它 |
IPRO_CHIP_VARIANT |
build_freertos.sh flash |
烧录时的 --chip-variant(IPRO7 或 IPRO7AI)。未设置时根据应用配置自动选择,见 build_freertos.sh |
IPRO_FLASH_PT |
build_freertos.sh flash |
烧录时的 --pt 分区表。未设置时不传 --pt,由工具使用默认分区表 |
IPRO_PROBE_PORT |
west flash |
IPRO Debug Probe 的 UART 桥接端口,默认与 --port 相同 |
CROSS_COMPILE |
make、build_freertos.sh build |
工具链前缀;在环境或命令行中设置时优先于 .config 的 CONFIG_CROSS_COMPILE |
IPRO_TOOLCHAIN |
tools/zephyr/bootstrap.sh |
Zephyr 工作区使用的工具链目录,默认 /opt/toolchain/riscv_ipro7 |
IPRO_ZEPHYR_WS |
tools/zephyr/build.sh、ci_build.sh |
Zephyr 工作区位置,默认 <SDK>/zephyr-workspace |
build_freertos.sh¶
动作可以串联,依次执行;任一动作失败即停止。未指定动作时执行 build。这是 bash 脚本,在 macOS 与 Linux 上运行。
| 动作 | 说明 |
|---|---|
build |
执行 make -C <应用>,日志写入 <构建目录>/build.log,成功时打印 .bin 路径与大小;失败时打印日志的最后 30 行 |
clean |
删除构建目录 |
flash |
以应用的控制台波特率发送 reboot_dl,等待 2 秒,再用 IntelProCube 工具烧录:--chipname ipro7 --chip-variant <自动> --baudrate 921600,有 -P 时加上 --pt。以输出中的 [All Success] 判定成功。不会先构建 |
monitor |
以应用的控制台波特率打开 serial_monitor.py,先发送 reboot,-t 秒后退出 |
size |
对 ELF 执行 size 与 size -A(列出段信息的前 30 行) |
test |
构建、烧录,再发送 reboot 并等待 ALL TESTS PASSED 或 SOME TESTS FAILED;退出码 0 表示通过、1 表示失败、2 表示超时 |
控制台波特率取自所用配置文件中的 CONFIG_PLATFORM_UART_BAUDRATE,未设置时为 115200。
| 选项 | 说明 | 默认值 |
|---|---|---|
-p, --port PORT |
串口 | $IPRO_SERIAL_PORT,否则为唯一的 USB 串口 |
-t, --timeout SEC |
monitor、test 的秒数 |
30 |
-w, --wait-for PAT |
monitor 等待的正则表达式 |
— |
-d, --defconfig FILE |
改用应用目录中的替代配置文件,构建到 build_<名称>/(defconfig_reef → build_reef/) |
— |
-c, --chip-variant V |
烧录的 --chip-variant:IPRO7 或 IPRO7AI |
$IPRO_CHIP_VARIANT;否则配置文件中有 CONFIG_IPRO7AI_REEF=y 或 CONFIG_IPRO7AI_EVK=y 时为 IPRO7AI,其余为 IPRO7 |
-P, --pt TABLE |
烧录的分区表:.toml 路径(转为绝对路径后传给工具),或工具 chips/ipro7/partition/ 下的表名 |
$IPRO_FLASH_PT,否则不传 |
-j, --jobs N |
外层 make 的并行任务数;内层 CMake 构建固定为 -j4 |
— |
-v, --verbose |
显示完整构建输出 | — |
-l, --list |
按分类列出 apps/ 下全部 40 个项目 |
— |
-h, --help |
帮助 | — |
<项目> 可以写应用名称(ipro7ai_reef_demo),或 apps/ 下的路径(platform/ipro7ai_reef_demo)。名称不唯一或找不到时,会列出候选名称。-l 的说明栏取自 .config 第一行注释,部分应用会显示为空。
在 Reef 上一次完成构建、烧录并打开控制台(首次烧录前,板上还没有能响应 reboot_dl 的 SDK 固件,请先按进入下载模式手动进入):
export IPRO_FLASH_TOOL=<IntelProCube>/ipro_iot_tool_macos
./build_freertos.sh -p /dev/cu.usbserial-XXXX \
-P <IntelProCube>/chips/ipro7/partition/partition_cfg_2M.toml \
build flash monitor ipro7ai_reef_demo
依次输出:
→ Entering download mode...
→ Flashing ipro7ai_reef_demo_IPRO7.bin (--chip-variant IPRO7AI, --pt <IntelProCube>/chips/ipro7/partition/partition_cfg_2M.toml)...
...
✓ Flash succeeded (…)
→ Opening serial monitor on /dev/cu.usbserial-XXXX at 115200...
其他 Reef 配置用 -d 选择,例如:
./build_freertos.sh -d defconfig_reef build ipro_ble_remote # 输出在 build_reef/build_out/
./build_freertos.sh -d defconfig_reef_ov5640 build flash ipro7_uvc_cam
./build_freertos.sh -l # 列出 40 个项目
./build_freertos.sh size ipro7ai_reef_demo
产物位于 <应用>/build/build_out/(使用 -d 时为 build_<名称>/build_out/):<应用>_<芯片>.bin、.elf、.map,芯片取自 CONFIG_CHIP(IPRO7 应用为 _IPRO7,IPRO6S 应用为 _IPRO6)。
build_freertos.sh 的限制
flash固定传--chipname ipro7:IPRO6S 应用(例如 FIN 卡固件ipro6_if_wifi)请直接用 IntelProCube 的--chipname ipro6烧录。- 无法传
--boot2、--mfg或--skip-ota:ipro_ble_remote的首次烧录(boot2 + A/B 分区表)与ipro_reef_teach(自带分区表与mfg内容)请直接使用 IntelProCube 工具。 - 没有
BOARD=选项;config_<板子>文件可用-d config_evk指定,输出在build_config_evk/。 - 烧录工具在当前工作目录下运行;
-P请给出.toml的完整路径。 size固定使用/opt/toolchain/riscv_ipro7/bin/riscv64-unknown-elf-size,不读取CROSS_COMPILE。
make 目标¶
每个应用的 Makefile 都转而调用 SDK 根目录的 project.build(CMake 以 Unix Makefiles 生成器配置,再以 make -j4 构建)。
| 命令 | 说明 |
|---|---|
make -C apps/<分类>/<应用> |
以 .config 构建到 build/ |
make -C apps/<分类>/<应用> clean |
删除构建目录(加 DEFCONFIG= 时删除对应的 build_<名称>/) |
make -C apps/<分类>/<应用> DEFCONFIG=defconfig_<名称> |
以替代配置构建到 build_<名称>/,不改动 .config |
make -C apps/<分类>/<应用> CROSS_COMPILE=<路径>/bin/riscv64-unknown-elf- |
指定工具链前缀,优先于 .config 的 CONFIG_CROSS_COMPILE |
make -C apps/multimedia/ipro_agora_sentino BOARD=evk |
只有 ipro_agora_sentino(默认 reef=.config)与 ipro_pdm_mic_demo(默认 evb)支持 BOARD=:改用 config_<板子>,构建到 build_config_<板子>/ |
- CMake:优先使用
PATH上的cmake,找不到时才用tools/cmake/(Linux x86-64);两者都没有时停在No cmake found。 - 每次构建后,
compile_commands.json会复制到 SDK 根目录,供编辑器使用。 make menuconfig需要未随附的tools/kconfig/menuconfig.py;部分Makefile的defconfig、list-defconfigs目标会到未随附的configs/目录中查找。请直接编辑.config,或另存为defconfig_<名称>再以DEFCONFIG=构建。
IntelProCube 烧录工具¶
烧录使用 IntelProCube 的命令行工具。它未包含在 V2.2.1 中,从 GitHub 下载 0.7.0.1,安装方法见准备开发环境。工具从自己的 chips/ 目录读取芯片文件,请在 IntelProCube 目录下运行。下表根据 SDK 内的 README 与脚本整理,完整选项以工具本身为准。
| 选项 | 说明 |
|---|---|
--chipname ipro7 |
IPRO7/IPRO7AI(Reef)。IPRO6S(例如 FIN 卡)用 --chipname ipro6 |
--chip-variant IPRO7AI |
Flash 引脚配置:IPRO7AI(Reef、QFN56)用 IPRO7AI(0x9),IPRO7 EVB 用 IPRO7(0x2)。工具会把它写入自己的 chips/ipro7/eflash_loader/eflash_loader_cfg.ini,更换开发板时务必重新指定 |
--port |
串口:USB 转 UART 线,或 IPRO Debug Probe 名称以 02 结尾的端口 |
--baudrate 921600 |
烧录波特率,与应用的控制台波特率无关 |
--firmware |
要烧录的 .bin |
--pt |
分区表(.toml):工具目录下的相对路径(例如 chips/ipro7/partition/partition_cfg_2M.toml)或完整路径。未指定时使用工具的默认分区表 |
--boot2 |
同时烧录 boot2 镜像(例如工具内的 chips/ipro7/builtin_imgs/boot2_v0.6.0/ipro_boot2_IPRO7_v0.6.0.bin);ipro_ble_remote 的 Reef OTA 需要 |
--mfg |
写入 mfg 分区的文件(AI 模型、ipro_reef_teach 的模式与声纹模型) |
--skip-ota |
配合应用自带的分区表使用,例如 ipro_reef_teach |
--build |
只生成合并镜像 chips/ipro7/img_create_iot/whole_img.bin,不烧录;供 create_ota.py 使用 |
Reef 出厂固件的烧录(先让开发板进入下载模式):
cd <IntelProCube>
./ipro_iot_tool_macos --chipname ipro7 --chip-variant IPRO7AI \
--port /dev/cu.usbserial-XXXX --baudrate 921600 \
--pt chips/ipro7/partition/partition_cfg_2M.toml \
--firmware <SDK>/apps/platform/ipro7ai_reef_demo/build/build_out/ipro7ai_reef_demo_IPRO7.bin
成功时输出末尾有 [All Success]。工具即使失败也以 0 退出,请以这一行判断结果。Linux 用 ./ipro_iot_tool_linux,Windows 用 ipro_iot_tool.exe 与 COM5 这类端口名。各 Reef 应用需要的分区表与 --boot2、--mfg 见 IPRO7AI Reef EVK。
serial_monitor.py¶
python3 tools/serial_monitor.py <串口> [--baud 115200] [--timeout 30]
[--send CMD] [--wait-for PATTERN] [--log FILE]
以 Python 标准库的 termios 打开串口,不需要 pyserial;可在 macOS 与 Linux 上运行,不适用于 Windows。它只读取输出(可在开始时发送一行命令),不是交互式终端;要逐行输入命令,请用 screen、minicom 或其他串口终端程序。
| 选项 | 说明 | 默认值 |
|---|---|---|
--baud |
波特率;macOS 与 Linux 都可使用 921600、2000000 等高波特率 | 115200 |
--timeout |
监视秒数;0 表示一直运行到按下 Ctrl-C |
30 |
--send |
开始监视前发送的一行命令,例如 reboot、reboot_dl、reef selftest |
— |
--wait-for |
正则表达式;匹配成功即退出 | — |
--log |
把原始输出另存为文件 | — |
| 退出码 | 含义 |
|---|---|
| 0 | 匹配成功,且匹配到的字符串含 PASSED |
| 1 | 匹配成功,但匹配到的字符串不含 PASSED |
| 2 | 超时,未匹配到 |
| 3 | 无法打开串口或发送命令 |
| 130 | 按 Ctrl-C 中止 |
# Reef 控制台(115200),发送自检命令,10 秒后退出
python3 tools/serial_monitor.py /dev/cu.usbserial-XXXX --send "reef selftest" --timeout 10
# ipro7_jpeg_decode 的 Reef 配置(921600),持续监视并保存到文件
python3 tools/serial_monitor.py /dev/cu.usbserial-XXXX --baud 921600 --timeout 0 --log console.log
# 让运行中的固件重启并进入下载模式(输出 reboot to download mode)
python3 tools/serial_monitor.py /dev/cu.usbserial-XXXX --send reboot_dl --timeout 2
macOS 请使用 /dev/cu.*,/dev/tty.* 会等待载波检测而卡住。烧录前先退出监视,释放串口。
create_ota.py¶
把 IntelProCube 生成的合并镜像打包成 boot2 OTA 包:默认以 XZ 压缩并输出 <输入文件名>.xz.ota,加 --raw 则不压缩并输出 <输入文件名>.ota。输入必须是以 IPNP 开头、含启动头的合并镜像(工具的 chips/ipro7/img_create_iot/whole_img.bin),而不是 SDK 构建出的 .bin;格式不符时脚本会停止。
| 选项 | 说明 |
|---|---|
--raw |
不压缩 |
-o, --output |
输出文件 |
--hw-ver |
写入头部的硬件版本字符串;请明确指定,不要依赖默认值 |
--fw-ver |
写入头部的固件版本字符串(默认 OTA_V1.0.0) |
--sign-key、--product 等签名选项 |
需要未随附的 ota_products.py,V2.2.1 中无法使用 |
在 Reef 上,ipro_ble_remote 的 make_reef_ota.sh 会代为调用工具的 --build 与本脚本,见 Reef 应用的主机端工具。OTA 的整体流程见 OTA 更新。
Reef 应用的主机端工具¶
浏览器版图像 Teach:tools/teach_web¶
无需安装 IPRO AI Studio,在 Chrome 或 Edge 中为 Reef 的摄像头采集图像、训练分类器并通过 USB 部署。开发板需烧录 ipro_reef_teach 并处于 image 模式;主机需要 Python 3.8 及以上版本。
-
启动网页服务器
在浏览器中打开
http://localhost:8780(默认浏览器不是 Chrome/Edge 时,把网址粘贴到其中之一)。 -
连接开发板:允许摄像头权限;点击 Connect… 或第一次点击 Deploy 时,串口选择 IPRO7 UVC Cam。
-
离线电脑:先在联网时执行一次
python3 tools/teach_web/serve.py --fetch-runtime,把约 22 MB 的 LiteRT.js 下载到本机。
ipro_reef_teach 的 mfg 内容:mfg_payload.py¶
首次烧录 ipro_reef_teach 时,--mfg 写入的内容包含启动模式与声纹模型:
python3 apps/ai/ipro_reef_teach/mfg_payload.py \
--voice apps/ai/ipro_reef_teach/model/model_b.spkb --mode image -o reef_teach_mfg.bin
--mode 可为 image、voice 或 sensor。生成的 reef_teach_mfg.bin 以 --mfg 交给 IntelProCube,烧录命令见示例页面;只更新固件时不要带 --mfg。
ipro_ble_remote 的 Reef OTA 工具¶
| 工具 | 命令 | 结果 |
|---|---|---|
make_reef_ota.sh |
IPRO_FLASH_TOOL=<IntelProCube>/ipro_iot_tool_macos sh apps/bluetooth/ble/ipro_ble_remote/tools/make_reef_ota.sh |
先以 DEFCONFIG=defconfig_reef 构建;生成 build_reef/build_out/ipro_ble_remote_reef.xz.ota(约 345 KB)。boot2 使用 IntelProCube 文件夹里最新的版本,或 IPRO_BOOT2 指定的文件 |
reef_ota.py |
.venv/bin/python apps/bluetooth/ble/ipro_ble_remote/tools/reef_ota.py <升级包.xz.ota> |
通过 BLE(bleak)把升级包传给名为 IPRO-Remote 的开发板,打印进度与状态 |
reef_ble_test.py |
.venv/bin/python apps/bluetooth/ble/ipro_ble_remote/tools/reef_ble_test.py |
以 bleak 作为 central 测试 Reef 的 GATT 服务(info led env sound tone img;keys、motion 需要有人操作),拍摄的 JPEG 保存在脚本所在目录 |
ipro_remote_demo.apk |
安装到 Android 手机 | ipro_ble_remote 的演示 App,可推送 .xz.ota 升级包 |
两个 Python 脚本需要 bleak:python3 -m venv .venv && .venv/bin/pip install bleak。OTA 只适用于以 boot2 与 partition_cfg_2M_remote_ab.toml 烧录过的开发板;不要在 Reef 上以标准 partition_cfg_2M.toml 做 OTA。
其他 Reef 应用的工具¶
| 工具 | 用途 |
|---|---|
apps/multimedia/ipro7_jpeg_decode/host/jpeg_check.py photo.jpg [--fix out.jpg] |
在电脑上检查 JPEG 能否在 IPRO7 上解码,必要时转换格式 |
apps/multimedia/ipro7_jpeg_decode/host/jdec_host.py -p <端口> upload photo.jpg --go 565 |
通过控制台把 JPEG 发送给开发板解码,并可取回结果进行比对 |
apps/multimedia/ipro7_jpeg_decode/host/run_host_tests.py |
在电脑上以 libjpeg 对照验证解码器(需要 cc、djpeg) |
apps/multimedia/ipro_agora_sentino/setup_ncm_nat.sh |
在 macOS 上为 USB-NCM 连接配置 NAT |
Zephyr 脚本¶
tools/zephyr/(bootstrap.sh、build.sh、flash.sh、monitor.sh、ci_build.sh)用于 Zephyr 的 ipro7_evb 与 ipro7ai_evk 板型;本版本没有 Reef 的 Zephyr 板型。用法见 Zephyr RTOS。
大小与内存分析¶
| 方法 | 命令或位置 | 内容 |
|---|---|---|
| 链接器内存报告 | 每次构建的最后几行(build_freertos.sh 写入 build.log) |
各内存区段(flash、ocram,启用时另有 psram)的使用量与百分比 |
size 动作 |
./build_freertos.sh size <应用> |
text/data/bss 总计与各段大小 |
| Map 文件 | <构建目录>/build_out/<应用>_IPRO7.map |
每个目标文件与库占用的地址与大小 |
| 符号排序 | riscv64-unknown-elf-nm --size-sort -S <ELF> |
按大小列出符号,找出最大的函数与变量 |
| 反汇编 | 在 .config 中设置 CONFIG_GENERATE_ASM=y |
构建时另外生成 <应用>_IPRO7.asm |
./build_freertos.sh size ipro7ai_reef_demo
/opt/toolchain/riscv_ipro7/bin/riscv64-unknown-elf-nm --size-sort -S \
apps/platform/ipro7ai_reef_demo/build/build_out/ipro7ai_reef_demo_IPRO7.elf | tail -20
同时启用 CONFIG_AI_SUPPORT 与 CONFIG_MM_SUPPORT 时,链接器脚本会把 OCRAM 区段缩小为 64 KB(CONFIG_EM_SIZE 为 0)或 48 KB(CONFIG_EM_SIZE 大于 0),CMake 配置阶段会打印 AI+MM …: OCRAM=…。内存地址分布见 IPRO7,OCRAM 预算见构建系统与配置。
自动测试¶
./build_freertos.sh test ipro_unit_test 会构建、烧录并等待 ALL TESTS PASSED 或 SOME TESTS FAILED;ipro_unit_test 需要 IPRO7 EVB。Reef 的板上自检是出厂固件的 reef selftest,见调试与故障排除。
其他工具¶
| 工具 | 说明 |
|---|---|
tools/script/parse_kconfig_dynamic.py Kconfig [PROJECT_SYMBOL] |
把 Kconfig 树输出为 JSON;需要 kconfiglib。构建由 cmake/generate_autoconf.cmake 直接读取 .config 生成 autoconf.h,不使用此脚本 |
components/audio/tools/gen_asrc_coef.py |
生成音频采样率转换系数 |
*/test_host/run.sh |
在电脑上运行的单元测试,例如 components/audio/test_host/run.sh、apps/ai/ipro_reef_teach/sensor/test_host/run.sh |
| 其他开发板的工具 | IPRO7AI EVK 示例的 flash.sh、enter_dl.py,ipro6_fmac 的 tools/mkimg.py(IPRO6S EVK),tools/android/IproMicDemo/(ipro_pdm_mic_demo):需要对应的开发板 |
开发流程¶
在 Reef 上修改、构建、烧录并检查控制台的一轮循环,见构建与烧录流程;创建自己的应用见创建第一个自己的应用。调试与常见错误见调试与故障排除。