MPSoC PYNQ框架集成VCU-3.分析gstreamer的recipes

版权声明:本文为博主原创文章,欢迎转载,但请注明出处 https://blog.csdn.net/lulugay/article/details/83541388

MPSoC PYNQ框架集成VCU-3.分析gstreamer的recipes

通过上一篇文章的实验我们对Petalinux用到的工具Bitbake有了一
我们先

Component Description Yocto Recipe Source
vcu-firmware ./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/vcu-firmware_git.bb https://github.com/Xilinx/vcu-firmware/tree/xilinx-v2018.2/1.0.0
kernel-module-vcu ./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/kernel-module-vcu_git.bb https://github.com/xilinx/vcu-modules.git
libvcu_xlnx ./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/libvcu-xlnx_git.bb https://github.com/Xilinx/vcu-ctrl-sw.git
libomxil_xlnx allegro OMX IL Libraries,test applications and headers for VCU ./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/libomxil-xlnx_git.bb https://github.com/Xilinx/vcu-omx-il
libomxil Bellagio OpenMAX Integration Layer (IL) ./core/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb ${SOURCEFORGE_MIRROR}/omxil/libomxil-bellagio-${PV}.tar.+patches (patch only for make procedure)
gstreamer-omx OpenMAX ILplugins for GStreamer ./core/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.12.2.bb ./core/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc ./meta-petalinux/recipes-multimedia/gstreamer/gstreamer1.0-omx_%.bbappend http://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.overwritten by git://github.com/xilinx/gst-omx.git gst-omx from xilinx github

从第一个简单的bb开始

我们先来看一下libvcu-xlnx_git.bb这个文件

SUMMARY = "Control Software for VCU"
DESCRIPTION = "Control software libraries, test applications and headers provider for VCU"
LICENSE = "Proprietary"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=03a7aef7e6f6a76a59fd9b8ba450b493"

BRANCH ?= "master"
REPO ?= "git://github.com/Xilinx/vcu-ctrl-sw.git;protocol=https"
SRCREV = "2975ba25430a221a3feaca4839f5a13424972a68"

BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
SRC_URI = "${REPO};${BRANCHARG}"

S  = "${WORKDIR}/git"

COMPATIBLE_MACHINE = "^$"
COMPATIBLE_MACHINE_zynqmp = "zynqmp"

PACKAGE_ARCH = "${SOC_FAMILY}"

RDEPENDS_${PN} = "kernel-module-vcu"

EXTRA_OEMAKE = "CC='${CC}' CXX='${CXX} ${CXXFLAGS}'"

do_install() {
    install -d ${D}${libdir}
    install -d ${D}${includedir}/vcu-ctrl-sw/include

    install -Dm 0755 ${S}/bin/AL_Encoder.exe ${D}/${bindir}/AL_Encoder.exe
    install -Dm 0755 ${S}/bin/AL_Decoder.exe ${D}/${bindir}/AL_Decoder.exe

    oe_runmake install_headers INSTALL_HDR_PATH=${D}${includedir}/vcu-ctrl-sw/include
    oe_libinstall -C ${S}/bin/ -so liballegro_decode ${D}/${libdir}/
    oe_libinstall -C ${S}/bin/ -so liballegro_encode ${D}/${libdir}/
}

# These libraries shouldn't get installed in world builds unless something
# explicitly depends upon them.

EXCLUDE_FROM_WORLD = "1"

下面解释比较重要信息

RDEPENDS_${PN} = "kernel-module-vcu"

这个库运行依赖kernel-module-vcu

REPO ?= "git://github.com/Xilinx/vcu-ctrl-sw.git;protocol=https"

vcu-ctrl-sw的源代码从哪里下载

do_install() {
    install -d ${D}${libdir}
    install -d ${D}${includedir}/vcu-ctrl-sw/include

    install -Dm 0755 ${S}/bin/AL_Encoder.exe ${D}/${bindir}/AL_Encoder.exe
    install -Dm 0755 ${S}/bin/AL_Decoder.exe ${D}/${bindir}/AL_Decoder.exe

    oe_runmake install_headers INSTALL_HDR_PATH=${D}${includedir}/vcu-ctrl-sw/include
    oe_libinstall -C ${S}/bin/ -so liballegro_decode ${D}/${libdir}/
    oe_libinstall -C ${S}/bin/ -so liballegro_encode ${D}/${libdir}/
}

规定了编译好的库应该安装到哪些路径

我们先ssh到板卡

git clone https://github.com/Xilinx/vcu-ctrl-sw.git
cd vcu-ctrl-sw
make

编译后我们就要执行install步骤,do_install()里有很多变量,从bb文件中并不能看出来这些变量指向哪些路径,所以我们要想办法确定这些变量指向的路径。幸运的是,我们可以通过Petalinux编译好的rootfs来找到他们。
https://blog.csdn.net/lulugay/article/details/83240981
在Linux PC上cd到< path to plnx>/images/linux解压rootfs.tar.gz

mkdir rootfs
tar -xvf rootfs.tar.gz -C rootfs
cd rootfs

找到名为vcu-ctrl-sw的文件夹,

find . -name vcu-ctrl-sw -type d 

发现在/usr/include下(好像也不太可能在别的地方)
以此类推可以得到
${includedir}=/usr/include
${bindir}=/usr/bin
${libdir}=/usr/lib
所以do_install(){}里面的前四行指令可以用

	sudo install -d /usr/lib
	sudo install -d /usr/include/vcu-ctrl-sw/include
	sudo install -Dm 0755 bin/AL_Encoder.exe /usr/bin/AL_Encoder.exe
	sudo install -Dm 0755 bin/AL_Decoder.exe /usr/bin/AL_Decoder.exe

替代
oe_runmake从形式上看类似make,我们暂时用make替代oe_runmake
所以第五行指令用

sudo make install_headers INSTALL_HDR_PATH=/usr/include/vcu-ctrl-sw/include

替代
oe_libinstall在
https://github.com/openembedded/openembedded-core/blob/master/meta/classes/utils.bbclass
的第41行开始定义,在156行可以看到

__runcmd install -m 0755 $libfile $destpath/

所以暂时用install -m 0755代替,但是一般情况下还要在/usr/lib下建立软链接,因此最后两行指令用

sudo install -m 0755 bin/liballegro_encode.so.0.7.0  /usr/lib
sudo ln -s /usr/lib/liballegro_encode.so.0.7.0 /usr/lib/liballegro_encode.so.0
sudo ln -s /usr/lib/liballegro_encode.so.0.7.0  /usr/lib/liballegro_encode.so
	
sudo install -m 0755 bin/liballegro_decode.so.0.7.0  /usr/lib
sudo ln -s /usr/lib/liballegro_decode.so.0.7.0 /usr/lib/liballegro_decode.so.0
sudo ln -s /usr/lib/liballegro_decode.so.0.7.0  /usr/lib/liballegro_decode.so

代替
完整的替代如下

sudo install -d /usr/lib
sudo install -d /usr/include/vcu-ctrl-sw/include

sudo install -Dm 0755 bin/AL_Encoder.exe /usr/bin/AL_Encoder.exe
sudo install -Dm 0755 bin/AL_Decoder.exe /usr/bin/AL_Decoder.exe

sudo make install_headers INSTALL_HDR_PATH=/usr/include/vcu-ctrl-sw/include

sudo install -m 0755 bin/liballegro_encode.so.0.7.0  /usr/lib
sudo ln -s /usr/lib/liballegro_encode.so.0.7.0 /usr/lib/liballegro_encode.so.0
sudo ln -s /usr/lib/liballegro_encode.so.0.7.0  /usr/lib/liballegro_encode.so

sudo install -m 0755 bin/liballegro_decode.so.0.7.0  /usr/lib
sudo ln -s /usr/lib/liballegro_decode.so.0.7.0 /usr/lib/liballegro_decode.so.0
sudo ln -s /usr/lib/liballegro_decode.so.0.7.0  /usr/lib/liballegro_decode.so

验证

推进

猜你喜欢

转载自blog.csdn.net/lulugay/article/details/83541388