1. 环境准备
VisionFive 2支持多种操作系统,例如OpenWRT,Fedora,Ubuntu, Debian等,在这里本文选用官方提供的Debian12作为主开发系统。
下载系统镜像,将镜像烧录至SD卡,插卡,上电开机。
检查系统版本
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
BUILD_ID=24
BUILD_DATE=T2024-05-06检查cpu核心
$ lscpu
Architecture: riscv64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3 1.1 下载交叉编译器
交叉编译器的版本视板子运行的系统为准,一般而言,如果使用官方提供的`Debian12`,GCC版本为12.2,GLIBCXX最高支持版本3.4.30
$ strings /lib/riscv64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_DEBUG_MESSAGE_LENGTH由于GCC版本与支持的GLIBCXX版本有关,
因此需要的下载GCC交叉编译器版本 < 12.2,在此首先从[RISCV-GNU-toolchain](https://github.com/riscv-collab/riscv-gnu-toolchain/releases)页面
下载`riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz`
1.2 配置工具链
解压工具链
$ tar -xzvf riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz将`bin`添加到环境变量中
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin查看交叉编译器版本
$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/allwinner/Documents/riscv/bin/../libexec/gcc/riscv64-unknown-linux-gnu/12.2.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /home/runner/work/riscv-gnu-toolchain/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/opt/riscv --with-sysroot=/opt/riscv/sysroot --with-pkgversion= --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.2.0 ()交叉编译器已安装完成。
2. 交叉编译 OpenCV
OpenCV ,是一个使用`Apache License 2.0`开源许可证的计算机视觉库。虽然官方已经提供了OpenCV-deb安装包,然而由于
版本较低,并缺少cmake配置文件,使用开发不便,在这里本文重新使用交叉工具链编译新版本的OpenCV-4.10。
1. 设置编译器
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++2. 获取opencv源码
$ git clone --depth=1 https://gitcode.net/mirrors/opencv/opencv.git 3. 配置并编译
OpenCV组件众多,然后在实际使用中我们并不会都使用,因此为了加快编译速度,取消一些组件的编译,最终的配置如下
$ cmake -Bbuild -S. \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_objc=OFF \
-D BUILD_opencv_js=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_dnn=OFF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_ml=ON \
-D BUILD_opencv_world=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF\
-DCMAKE_BUILD_TYPE=Release编译安装
$ cmake --build build
$ sudo cmake --install build 将`install/bin`目录的opencv_version,传输到板子,运行验证,成功的话,opencv_version将在控制台打印opencv版本
$ chmod +x opencv_version
$ opencv_version
4.10.03. 交叉编译 MNN
[MNN](https://www.mnn.zone/m/0.3/)是阿里巴巴开发的一款速度超快的轻量级深度学习框架,支持OpenCL,Vulkan加速,可以充分发挥VisionFive 2
搭载的高性能GPU的实力。
3.1 下载MNN
使用git将MNN代码块复制到本地
$ git clone --recursive https://github.com/alibaba/MNN.git3.2 交叉编译MNN
1. 设置编译器
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++2. 编译配置
由于VisionFive 2支持OPENCL以及VULKAN,我们将MNN的OPENCL以及VULKAN支持打开。
$ cmake -Bbuild -S. \
-DMNN_SEP_BUILD=OFF \
-DMNN_BUILD_TOOLS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DMNN_BUILD_SHARED_LIBS=OFF \
-DMNN_OPENCL=ON \
-DMNN_VULKAN=ON \
-DMNN_BUILD_TEST=ON\
-DMNN_BUILD_BENCHMARK=ON
-- Use Threadpool, forbid openmp
-- >>>>>>>>>>>>>
-- MNN BUILD INFO:
-- System: Linux
-- Processor: riscv64
-- Version: 2.9.3
-- Metal: OFF
-- OpenCL: ON
-- OpenGL: OFF
-- Vulkan: ON
-- ARM82: OFF
-- oneDNN: OFF
-- TensorRT: OFF
-- CoreML: OFF
-- NNAPI: OFF
-- CUDA: OFF
-- OpenMP: OFF
-- BF16: OFF
-- ThreadPool: ON
-- Hidden: TRUE
-- Build Path: /home/VisionFive/MNN-2.9.0/build
-- CUDA PROFILE: OFF
-- WIN_USE_ASM:
-- Configuring done (0.1s)
-- Generating done (0.2s)3. 编译
$ cmake --build build将`build`目录的*.out,传输到板子,运行验证
$ chmod +x run_test.out
$ sudo ./run_test.out
验证mnn推理性能
$ chmod +x benchmark.out
$ sudo ./benchmark.out ${MODEL_PATH} 10 


