我們在進行 S32V 環境開發時,常常會需要額外從 VSDK 那邊再 build 出 3rd party 的 lib 然後 copy 至板端的 rootfs 裡面,過程上其實也不難,但趕時間的時候還是會覺得細節惱人,以下提供一個方法來簡化這段流程。
1. 先準備好 OpenCV,ffmpeg,kernel module 等 .so & .ko 檔案:
2. 建立複製 OpenCV,ffmpeg,kernel module 等 .so & .ko 檔案的 recipe:
cd /sources/meta-alb
mkdir -p recipes-wpi && \
mkdir -p recipes-wpi/copy-so-ko-files && \
mkdir -p recipes-wpi/copy-so-ko-files/copy-so-ko-files
mkdir -p recipes-wpi/copy-so-ko-files/copy-so-ko-files/ffmpeg && \
mkdir -p recipes-wpi/copy-so-ko-files/copy-so-ko-files/opencv && \
mkdir -p recipes-wpi/copy-so-ko-files/copy-so-ko-files/s32v_lib
cd recipes-wpi/copy-so-ko-files/
touch copy-so-ko-files_1.0.bb,並將下列虛線內 recipe 檔案內容,用文字編輯器 (例如 VIM) 新增至 copy-so-ko-files_1.0.bb中,編輯完成後存檔。
--------------------------------------------------------------------------------------------------------------------------
DESCRIPTION = "Copy ko & so files into rootfs by WPI"
SECTION = "libs"
LICENSE = "CLOSED"
PACKAGE_ARCH = "${MACHINE_ARCH}"
SRC_URI += "\
file://s32v_lib/ \
file://ffmpeg/libavcodec.so \
file://ffmpeg/libavdevice.so \
file://ffmpeg/libavfilter.so \
file://ffmpeg/libavformat.so \
file://ffmpeg/libavutil.so \
file://ffmpeg/libswresample.so \
file://ffmpeg/libswscale.so \
file://opencv/libopencv_calib3d.so.3.1 \
file://opencv/libopencv_core.so.3.1 \
file://opencv/libopencv_features2d.so.3.1 \
file://opencv/libopencv_flann.so.3.1 \
file://opencv/libopencv_highgui.so.3.1 \
file://opencv/libopencv_imgcodecs.so.3.1 \
file://opencv/libopencv_imgproc.so.3.1 \
file://opencv/libopencv_ml.so.3.1 \
file://opencv/libopencv_objdetect.so.3.1 \
file://opencv/libopencv_photo.so.3.1 \
file://opencv/libopencv_shape.so.3.1 \
file://opencv/libopencv_stitching.so.3.1 \
file://opencv/libopencv_superres.so.3.1 \
file://opencv/libopencv_videoio.so.3.1 \
file://opencv/libopencv_video.so.3.1 \
file://opencv/libopencv_videostab.so.3.1 \
"
do_install () {
install -d ${D}/s32v234
install -d ${D}/${base_libdir}/
find ${WORKDIR}/s32v_lib/ -maxdepth 1 -mindepth 1 -not -name README \
-exec cp -fr '{}' ${D}/s32v234/ \;
install -m 755 ${WORKDIR}/ffmpeg/libavcodec.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/ffmpeg/libavdevice.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/ffmpeg/libavfilter.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/ffmpeg/libavformat.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/ffmpeg/libavutil.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/ffmpeg/libswresample.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/ffmpeg/libswscale.so ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_calib3d.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_core.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_features2d.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_flann.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_highgui.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_imgcodecs.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_imgproc.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_ml.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_objdetect.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_photo.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_shape.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_stitching.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_superres.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_videoio.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_video.so.3.1 ${D}${base_libdir}/
install -m 755 ${WORKDIR}/opencv/libopencv_videostab.so.3.1 ${D}${base_libdir}/
}
FILES_SOLIBSDEV = ""
FILES_${PN} += " \
/* \
${base_libdir}/*.so \
${base_libdir}/*.so.* \
"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_SYSROOT_STRIP = "1"
SOLIBS = ".so"
INSANE_SKIP_${PN} = "ldflags"
INSANE_SKIP_${PN} += "already-stripped"
INSANE_SKIP_${PN} += "dev-so"
#For dev packages only
INSANE_SKIP_${PN}-dev = "ldflags"
COMPATIBLE_MACHINE = "(s32v234evb)"
--------------------------------------------------------------------------------------------------------------------------
cd /sources/meta-alb/recipes-fsl/images/
請用文字編輯器 (例如 VIM) 編輯 fsl-image-auto.bb,並在 IMAGE_INSTALL 區段內新增以下虛線內程式碼:
--------------------------------------------------------------------------------------------------------------------------
copy-so-ko-files \
--------------------------------------------------------------------------------------------------------------------------
編輯完成後存檔。
3. 複製 OpenCV,ffmpeg,kernel module 等 .so & .ko 檔案至 recipe 資料夾:
Copy ffmpeg library:
cp -rv /s32v234_sdk/3rdparty/ffmpeg/linux-arm64/lib/*.so Project>/sources/meta-alb/recipes-wpi/copy-so-ko-files/copy-so-ko-files/ffmpeg/
Copy opencv library:
cp -rv /s32v234_sdk/3rdparty/ocv/cmake-v234ce-gnu-linux/lib/*.so.3.1* Project>/sources/meta-alb/recipes-wpi/copy-so-ko-files/copy-so-ko-files/opencv/
Copy kernel module:
cp -rv /s32v234_sdk/s32v_lib_temp/*.ko /sources/meta-alb/recipes-wpi/copy-so-ko-files/copy-so-ko-files/s32v_lib/
4. 重新編譯:
bitbake fsl-image-auto
確認檔案是否有包進rootfs,可到以下路徑做確認:
cd /build_s32v234evb/tmp/work/s32v234evb-fsl-linux/fsl-image-auto/1.0-r0/rootfs
即可確認完成 S32V Yocto BSP & VSDK 環境建置。