准备交叉编译环境
安装SDK前需确保已编译过工程,执行以下命令生成SDK:
petalinux-build
petalinux-package --sysroot
petalinux-package --sdk
生成的安装包位于./images/linux/sdk.sh
,安装命令示例:
./images/linux/sdk.sh -d ~/petalinux_sdk_2020.2
下载OpenCV源码
创建构建目录并下载指定版本源码:
mkdir ~/opencv4_build && cd ~/opencv4_build
wget https://github.com/opencv/opencv/archive/4.1.0.zip
wget https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
unzip 4.1.0.zip && unzip 4.1.0.zip.1
mv opencv-4.1.0 opencv
mv opencv_contrib-4.1.0 opencv_contrib
配置交叉编译工具链
创建或修改aarch64-gnu.toolchain.cmake
文件,确保包含以下关键配置:
cmake
# aarch64-gnu.toolchain.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR aarch64)
# 指定交叉编译器
SET(CMAKE_C_COMPILER /opt/petalinux/2020.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gcc)
SET(CMAKE_CXX_COMPILER /opt/petalinux/2020.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-g++)
# 指定 sysroot
SET(CMAKE_FIND_ROOT_PATH /opt/petalinux/2020.2/sysroots/aarch64-xilinx-linux)
# 指定 sysroot
SET(CMAKE_SYSROOT /opt/petalinux/2020.2/sysroots/aarch64-xilinx-linux)
# 搜索规则
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
生成CMake构建配置
执行CMake时需指定关键参数:
bash
cmake ../opencv \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/aarch64-gnu.toolchain.cmake \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DWITH_TBB=OFF \
-DWITH_GSTREAMER=ON \
-DWITH_FFMPEG=ON \
-DWITH_OPENCL=OFF \
-DWITH_V4L=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DENABLE_NEON=ON \
-DENABLE_VFPV3=OFF \
-DBUILD_opencv_xfeatures2d=OFF
执行编译与安装
使用多线程编译并指定安装目录:
bash
make -j$(nproc)
make install DESTDIR=~/opencv4_build/install
关键配置说明
- 编译器路径:必须指向PetaLinux SDK中的交叉编译器
- 模块控制:禁用Python绑定和非必要模块可减少编译体积
- NEON加速:针对ZynqMP的Cortex-A53内核启用NEON指令集
- 安装目录 :通过
DESTDIR
参数控制部署文件的输出位置
常见问题处理
若遇到依赖缺失错误,需在PetaLinux环境中安装对应开发包:
bash
petalinux-config -c rootfs
在菜单中启用packagegroup-petalinux-opencv
相关选项后重新构建系统镜像。