2. 环境搭建
BM1684是算能科技推出的第三代AI计算芯片,专注于边缘视频分析场景,集成16核ARM Cortex-A53处理器和TPU(Tensor Processing Unit)计算引擎,算力高达17.6 TOPS(INT8)。在多路摄像头检测和告警联动项目中,环境搭建是后续算法开发、模型部署和系统调试的基础。本章围绕BM1684开发板的硬件组成、操作系统安装、SDK部署和交叉编译环境配置四个核心环节展开,帮助学员建立完整的开发环境认知,并掌握从裸机到可运行AI推理程序的完整链路搭建方法。
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调试)。
2.2 操作系统安装与启动配置
BM1684开发板支持从eMMC、SD卡和NVMe SSD三种介质启动操作系统。官方提供基于Ubuntu 20.04的定制镜像,已预装必要的内核模块和驱动。安装流程如下:
- 获取镜像:从算能科技官网下载BM1684开发板专用Ubuntu 20.04镜像(文件名通常为
BM1684_Ubuntu20.04_xxx.img),同时下载烧录工具balenaEtcher(跨平台)或Win32DiskImager(Windows)。 - 烧录eMMC:使用USB Type-C线连接开发板与PC,开发板进入烧录模式(按住BOOT键再上电),使用烧录工具将镜像写入eMMC。烧录完成后,断开USB,重新上电启动。
- 首次启动配置:通过串口(连接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
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工具链,配置步骤如下:
- 下载工具链:从算能官网或Linaro官网下载
gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz,解压至/opt目录。 - 设置环境变量:在宿主机
~/.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
- 配置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)
- 编译测试程序:编写简单的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/,确保开机自动加载 |
环境搭建是BM1684视频分析项目的基石,硬件组成决定了系统能力边界,操作系统安装提供了运行基础,SDK部署赋予开发能力,交叉编译环境打通了开发与部署的链路。掌握本章内容后,学员应能独立完成开发板的上电调试、系统安装、SDK配置和交叉编译验证,为后续多路视频采集、AI推理和告警联动开发奠定坚实基础。建议学员在实操中记录每一步的日志和输出,形成自己的环境搭建checklist,提高部署效率。