SOPHGO算能科技SoC模式SDK交叉编译与C++推理demo实战指南
1. 环境准备与SDK获取在x86主机上搭建SOPHGO SoC模式的开发环境首先需要准备以下基础条件一台运行Ubuntu 18.04/20.04的x86主机建议内存≥8GB以及一张格式化为FAT32的SD卡用于SoC设备刷机。这里特别提醒如果用Windows格式化SD卡可能会产生隐藏分区导致刷机失败建议在Linux下用mkfs.vfat -I /dev/sdX命令彻底格式化。从算能官网下载的SDK大包通常命名为Release_日期-public.zip解压后会包含多个子目录sophon-imgSoC模式刷机包和运行库sophon-mw多媒体中间件如FFmpeg/OpenCV的加速版本tpu-mlir模型转换工具链注意如果之前安装过旧版BM1684驱动需先执行sudo ./remove_driver_pcie.sh彻底卸载避免版本冲突。2. 交叉编译环境搭建2.1 安装工具链SoC模式开发需要aarch64交叉编译工具链通过以下命令安装sudo apt-get update sudo apt-get install gcc-aarch64-linux-gnu g-aarch64-linux-gnu验证安装是否成功aarch64-linux-gnu-g --version # 应输出类似gcc version 9.3.0的信息2.2 提取库文件与头文件在SDK大包的sophon-img目录下解压libsophon的SoC版本包并拷贝到工作目录mkdir -p soc-sdk tar -zxf libsophon_soc_0.5.0_aarch64.tar.gz cp -drf libsophon_soc_0.5.0_aarch64/opt/sophon/libsophon-0.5.0/{lib,include} ./soc-sdk/接着处理多媒体中间件以FFmpeg和OpenCV为例tar -zxf sophon-mw-soc_0.7.3_aarch64.tar.gz cp -drf sophon-mw-soc_0.7.3_aarch64/opt/sophon/sophon-ffmpeg_0.7.3/{lib,include} ./soc-sdk/ cp -drf sophon-mw-soc_0.7.3_aarch64/opt/sophon/sophon-opencv_0.7.3/{lib,include} ./soc-sdk/2.3 环境变量配置创建env.sh文件设置交叉编译环境变量export PATH/usr/bin/aarch64-linux-gnu:$PATH export LD_LIBRARY_PATH$PWD/soc-sdk/lib:$LD_LIBRARY_PATH export C_INCLUDE_PATH$PWD/soc-sdk/include:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH$PWD/soc-sdk/include:$CPLUS_INCLUDE_PATH执行source env.sh激活环境。此时目录结构应如下soc-sdk/ ├── include/ │ ├── bmcv_api.h │ ├── opencv2/ │ └── libavcodec/ └── lib/ ├── libbmcv.so ├── libopencv_core.so └── libavcodec.so3. YOLOv5推理Demo实战3.1 获取Demo代码从GitHub克隆官方示例库git clone -b release https://github.com/sophgo/sophon-demo.git cd sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv3.2 工程结构适配将之前准备的soc-sdk中的头文件和库文件链接到工程中ln -s /path/to/soc-sdk/include ./include/thirdparty ln -s /path/to/soc-sdk/lib ./lib/thirdparty修改CMakeLists.txt关键配置set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g) include_directories( ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/include/thirdparty ) link_directories( ${PROJECT_SOURCE_DIR}/lib ${PROJECT_SOURCE_DIR}/lib/thirdparty )3.3 编译与部署执行编译mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make -j4生成的yolov5_bmcv.soc即为可执行文件。通过SD卡或scp将其拷贝到SoC设备中同时需要将以下文件一并部署模型文件yolov5s_1684_f32_sym.bmodel类别标签coco.names测试图片bus.jpg在SoC设备上执行./yolov5_bmcv.soc \ --bmodel yolov5s_1684_f32_sym.bmodel \ --input bus.jpg \ --classnames coco.names成功运行后会输出检测结果图像output.jpg并在终端打印类似以下信息[BMCPU] Load model success. [BMCV] Process 1 images, total time 12.34ms, avg time 12.34ms4. 常见问题排查4.1 库版本冲突若出现undefined reference to bmcv::xxx错误检查libbmcv.so的版本是否与头文件匹配readelf -Ws ./lib/thirdparty/libbmcv.so | grep bmcv_create_mat nm -D ./lib/thirdparty/libbmcv.so | grep bmcv_image_vpp_convert4.2 内存卡挂载异常SoC设备启动时若无法识别SD卡检查/dev/mmcblk*设备节点是否存在。必要时重新格式化sudo fdisk /dev/sdX # 删除所有分区 sudo mkfs.vfat -I /dev/sdX4.3 模型转换问题如果使用自定义模型建议通过tpu-mlir工具转换时添加--chip bm1684参数指定芯片型号。转换后的bmodel文件可通过model_tool --info model.bmodel验证是否包含正确的NPU指令集。通过Wireshark抓包分析RTSP流时发现关键帧间隔过大导致解码延迟。修改FFmpeg参数ffmpeg -i rtsp://example.com/stream -c copy -f flv -flvflags no_duration_filesize rtmp://localhost/live/stream