在Yocto中为SAM9X60-EK安装OpenCV遇问题求助
解决Yocto中SAM9X60-EK添加OpenCV的问题
问题分析
自定义配方的核心错误
你自己编写的opencv_4.8.0.bb存在几个关键问题:
- 直接调用主机的
python3执行setup.py,而非使用Yocto提供的交叉编译Python环境,导致构建过程调用本地系统的skbuild/CMake工具,而非目标架构的交叉编译工具链。 - 手动实现
do_unpack属于冗余操作,Yocto会自动处理标准压缩包的解压。 - 安装路径和打包逻辑不符合Yocto规范,直接复制文件到
${bindir}会导致文件结构混乱。
meta-oe配方报错的常见原因
SAM9X60基于ARMv5架构,meta-oe的OpenCV默认配方未适配该架构编译需求:比如默认开启了ARMv5不支持的NEON/VFPv3指令集特性,或者依赖库配置缺失。
解决方案
方案1:修复自定义配方(不推荐,优先用官方层配方)
如果坚持自行编写配方,需严格遵循Yocto Python包构建规范:
SUMMARY = "OpenCV Python bindings" LICENSE = "BSD-3-Clause" LIC_FILES_CHKSUM = "file://LICENSE;md5=填写对应文件的md5值" SRC_URI = "file://opencv-python-4.8.0.76.tar.gz" S = "${WORKDIR}/opencv-python-4.8.0.76" # 继承Yocto Python打包和CMake类 inherit setuptools3 cmake # 添加交叉编译依赖 DEPENDS += "python3 python3-numpy cmake opencv-core" RDEPENDS:${PN} += "python3 python3-numpy" # 配置CMake适配ARMv5架构 EXTRA_OECMAKE += "\ -DCMAKE_TOOLCHAIN_FILE=${STAGING_DIR_HOST}/share/cmake/OEToolchainConfig.cmake \ -DOPENCV_ENABLE_NEON=OFF \ -DOPENCV_ENABLE_VFPV3=OFF \ " # 无需自定义do_unpack/do_install,inherit的类会自动处理
将opencv-python-4.8.0.76.tar.gz放在配方所在目录的files子文件夹下,再执行bitbake opencv。
方案2:正确使用meta-oe的OpenCV配方(推荐)
针对SAM9X60的ARMv5架构,修改meta-oe的OpenCV配置:
- 在自定义层中创建
recipes-support/opencv/opencv_%.bbappend文件,添加:
# 禁用ARMv5不支持的指令集特性 EXTRA_OECMAKE += "\ -DOPENCV_ENABLE_NEON=OFF \ -DOPENCV_ENABLE_VFPV3=OFF \ -DBUILD_opencv_python3=ON \ " # 补充依赖 DEPENDS += "python3-numpy" RDEPENDS:opencv-python += "python3 python3-numpy"
- 简化
core-image-sato.bbappend的安装项:
IMAGE_INSTALL:append = " python3 python3-numpy opencv opencv-python"
- 清理缓存后重新构建:
bitbake -c cleanall opencv bitbake core-image-sato
关键注意事项
- 禁止在Yocto构建步骤中直接调用主机的
python/cmake工具,必须通过inherit相关类(如setuptools3、cmake)使用交叉编译环境。 - ARMv5不支持NEON/VFPv3指令集,必须在CMake选项中禁用这些特性,否则会出现编译错误。
- 使用官方层配方是最优选择,自定义配方极易引入交叉编译适配问题。
内容的提问来源于stack exchange,提问作者Nishuthan S
相关产品推荐
相关产品推荐

