2、环境搭建:掌握BM1684开发板的硬件组成、操作系统安装、SDK部署以及交叉编译环境的配置方法

BM1684是算能科技推出的第三代AI计算芯片,专注于边缘视频分析场景,集成16核ARM Cortex-A53处理器和TPU(Tensor Processing Unit)计算引擎,算力高达17.6 TOPS(INT8)。在多路摄像头检测和告警联动项目中,环境搭建是后续算法开发、模型部署和系统调试的基础。本章围绕BM1684开发板的硬件组成、操作系统安装、SDK部署和交叉编译环境配置四个核心环节展开,帮助学员建立完整的开发环境认知,并掌握从裸机到可运行AI推理程序的完整链路搭建方法。

BM1684开发板环境搭建链路图 硬件组成 • BM1684 SoC(16核A53+TPU) • 内存:DDR4 8GB/16GB • 存储:eMMC 32GB + NVMe SSD • 网络:双千兆以太网口 • 视频:HDMI/DP + MIPI-CSI • 扩展:PCIe 3.0 x4, USB 3.0 操作系统安装 • 官方Ubuntu 20.04镜像 • 烧录工具:balenaEtcher • 启动方式:eMMC/SD卡 • 内核版本:Linux 4.9 • 文件系统:ext4 • 串口调试:115200-8-N-1 SDK部署 • tpu-mlir:模型转换工具链 • sophon-sail:Python/C++推理SDK • bmcv:图像处理库 • bmrt:运行时推理引擎 • ffmpeg:视频解码组件 • opencv:图像算法库 交叉编译环境配置 • 宿主机:x86_64 Ubuntu 20.04 • 工具链:gcc-linaro-7.5.0-aarch64-linux-gnu • CMake + Makefile 构建系统 验证流程 硬件上电 → 系统启动 → SDK环境变量 → 编译测试程序 → 运行AI推理demo

2.1 BM1684开发板硬件组成与核心模块

BM1684开发板采用核心板+底板的分体式设计,核心板集成SoC、内存和存储,底板提供丰富的对外接口。从视频分析项目的角度,需要重点关注以下硬件模块:

  • 计算核心:BM1684 SoC集成16核ARM Cortex-A53处理器(最高1.8GHz)和TPU引擎,TPU支持INT8/FP32/FP16混合精度计算,峰值算力17.6 TOPS(INT8)。在视频分析场景中,TPU负责神经网络推理,ARM核负责视频解码、图像预处理和业务逻辑。
  • 内存与存储:板载DDR4内存(8GB/16GB可选),带宽达51.2GB/s,满足多路视频帧缓冲需求。存储方面,eMMC 32GB用于存放操作系统和SDK,NVMe SSD接口可扩展大容量存储,用于保存视频片段和日志。
  • 视频输入接口:支持4路MIPI-CSI摄像头输入和HDMI/DP视频输入,通过PCIe可扩展视频采集卡。对于多路摄像头场景,通常采用RTSP网络摄像头,通过双千兆以太网口接入。
  • 网络接口:双千兆以太网口(RJ45),支持网口绑定(bonding)提升带宽,或分别连接摄像头网段和业务网段。
  • 调试接口:UART串口(3.3V TTL电平,默认波特率115200)、JTAG接口、USB 3.0 Type-C(用于烧录和ADB调试)。
硬件选型建议:对于8路1080p@25fps视频分析项目,建议选择16GB内存版本,并配置NVMe SSD(至少512GB)用于存储告警截图和视频片段。网络方面,若摄像头数量超过8路,建议使用千兆交换机汇聚后再接入开发板,避免单网口带宽瓶颈。

2.2 操作系统安装与启动配置

BM1684开发板支持从eMMC、SD卡和NVMe SSD三种介质启动操作系统。官方提供基于Ubuntu 20.04的定制镜像,已预装必要的内核模块和驱动。安装流程如下:

  1. 获取镜像:从算能科技官网下载BM1684开发板专用Ubuntu 20.04镜像(文件名通常为BM1684_Ubuntu20.04_xxx.img),同时下载烧录工具balenaEtcher(跨平台)或Win32DiskImager(Windows)。
  2. 烧录eMMC:使用USB Type-C线连接开发板与PC,开发板进入烧录模式(按住BOOT键再上电),使用烧录工具将镜像写入eMMC。烧录完成后,断开USB,重新上电启动。
  3. 首次启动配置:通过串口(连接UART调试口,使用USB转串口模块,参数115200-8-N-1)或HDMI连接显示器,进入系统后执行sudo passwd root设置root密码,并配置网络:
# 配置静态IP(示例)
sudo vi /etc/netplan/01-netcfg.yaml
# 内容示例
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]
sudo netplan apply
注意事项:烧录eMMC会覆盖原有系统,操作前务必确认已备份数据。若开发板无法从eMMC启动,可尝试从SD卡启动:将镜像烧录至SD卡(≥16GB),插入卡槽后上电,系统会优先从SD卡启动。部分批次开发板需要修改启动拨码开关。

2.3 SDK部署与依赖组件安装

BM1684的SDK包含模型转换工具链、推理运行时和算法库三大类组件。部署SDK前,先确认系统依赖已安装:

# 安装基础依赖
sudo apt update
sudo apt install -y build-essential cmake git python3-pip \
  libopencv-dev libssl-dev libsqlite3-dev \
  libgflags-dev libgoogle-glog-dev libboost-all-dev \
  ffmpeg libavcodec-dev libavformat-dev libavutil-dev \
  libswscale-dev libavdevice-dev

# 安装Python依赖
pip3 install numpy opencv-python pillow

SDK部署的核心步骤包括:

  • tpu-mlir:模型转换工具链,用于将PyTorch/TensorFlow/ONNX模型转换为BM1684可执行的bmodel格式。安装时需设置环境变量TPU_MLIR_PATH和PATH。
  • sophon-sail:推理SDK,提供Python和C++两套API。Python版本通过pip安装,C++版本需编译安装。安装后需设置LD_LIBRARY_PATH指向sophon-sail的lib目录。
  • bmcv/bmrt:底层图像处理和运行时库,随SDK一并提供,通常位于/opt/sophon/libsophon-xxx/lib目录。
  • ffmpeg组件:用于RTSP拉流和视频解码,SDK中已包含针对BM1684优化的ffmpeg版本,支持硬件解码(VPU)。
环境变量配置示例:将以下内容添加到~/.bashrc中,实现SDK环境自动加载。
export PATH=/opt/sophon/tpu-mlir/bin:$PATH
export TPU_MLIR_PATH=/opt/sophon/tpu-mlir
export LD_LIBRARY_PATH=/opt/sophon/libsophon-current/lib:$LD_LIBRARY_PATH
export PYTHONPATH=/opt/sophon/sophon-sail/python:$PYTHONPATH

2.4 交叉编译环境配置与验证

由于BM1684的ARM架构与开发PC的x86架构不同,需要在x86宿主机上配置交叉编译工具链,编译ARM可执行程序。推荐使用官方提供的gcc-linaro-7.5.0-aarch64-linux-gnu工具链,配置步骤如下:

  1. 下载工具链:从算能官网或Linaro官网下载gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz,解压至/opt目录。
  2. 设置环境变量:在宿主机~/.bashrc中添加:
export CROSS_COMPILE=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export LD=${CROSS_COMPILE}ld
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
  1. 配置CMake交叉编译链:创建toolchain.cmake文件,内容如下:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH /opt/sophon/libsophon-current)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  1. 编译测试程序:编写简单的Hello World程序,使用交叉编译工具链编译,并通过scp拷贝至开发板运行,验证环境正确性。

2.5 实战案例:从零搭建8路摄像头分析环境

本案例以某园区安防项目为背景,需要在BM1684开发板上部署8路1080p摄像头的人形检测和告警联动系统。项目初期面临环境搭建的多个挑战:开发板系统版本不一致、SDK依赖冲突、交叉编译程序无法运行等。

初始状态与目标:开发板为全新出厂状态,需完成从硬件检查到可运行AI推理demo的全流程。目标是在4小时内完成环境搭建,并跑通官方提供的yolov5s人形检测demo。

关键操作步骤:

  • 硬件检查:上电前检查电源适配器(12V/3A)、串口连接、网线连接。上电后通过串口观察启动日志,确认内核版本为4.9,内存识别正常。
  • 系统安装:使用balenaEtcher将官方镜像烧录至eMMC,首次启动后配置静态IP为192.168.1.100,并测试与PC的连通性。
  • SDK部署:安装基础依赖时遇到OpenCV版本冲突(系统自带4.2,SDK需要4.1),通过pip3 install opencv-python==4.1.2.30解决。部署tpu-mlir时,发现Python版本需3.6-3.8,系统自带3.8,满足要求。
  • 交叉编译验证:在宿主机编译官方提供的yolov5s_demo,使用CMake工具链文件,编译过程中遇到缺少libbmrt.so链接错误,通过设置CMAKE_FIND_ROOT_PATH指向SDK安装目录解决。
  • 运行验证:将编译好的可执行文件和bmodel模型拷贝至开发板,执行./yolov5s_demo --input test.jpg,成功输出检测结果,耗时约15ms/帧。

结果与复盘:整个环境搭建耗时3.5小时,主要时间消耗在SDK依赖冲突排查和交叉编译链接配置上。经验总结:

  • SDK版本与系统镜像版本必须严格匹配,建议使用官方推荐组合。
  • 交叉编译时,务必确认CMAKE_FIND_ROOT_PATH指向开发板SDK的sysroot目录,否则会链接到宿主机x86库。
  • 建议在宿主机上编写自动化部署脚本(如deploy.sh),一键完成编译、打包、上传和远程执行,减少重复操作。

2.6 常见误区与总结复盘

常见误区 问题描述 正确做法
SDK版本混用 将不同版本的tpu-mlir和sophon-sail混合使用,导致模型转换失败或推理报错 统一使用官方发布的同一版本SDK包,记录版本号便于回溯
交叉编译链接错误 编译时链接到宿主机x86库,导致程序在开发板上无法运行 使用CMake工具链文件,设置CMAKE_FIND_ROOT_PATH指向目标SDK目录
忽略硬件解码 使用CPU软解8路视频,导致CPU占用率过高,推理延迟增大 使用SDK提供的ffmpeg硬件解码接口,将解码任务卸载到VPU
环境变量遗漏 重启后SDK命令找不到,动态库加载失败 将环境变量写入~/.bashrc或/etc/profile.d/,确保开机自动加载
风险提示:开发板eMMC烧录次数有限(约10万次),频繁烧录会缩短寿命。建议日常开发使用SD卡启动,仅在正式部署时烧录eMMC。同时,交叉编译环境应使用独立目录,避免与宿主机系统环境混淆。

环境搭建是BM1684视频分析项目的基石,硬件组成决定了系统能力边界,操作系统安装提供了运行基础,SDK部署赋予开发能力,交叉编译环境打通了开发与部署的链路。掌握本章内容后,学员应能独立完成开发板的上电调试、系统安装、SDK配置和交叉编译验证,为后续多路视频采集、AI推理和告警联动开发奠定坚实基础。建议学员在实操中记录每一步的日志和输出,形成自己的环境搭建checklist,提高部署效率。