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

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

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

ComponentDescriptionYocto RecipeSource
vcu-firmware./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/vcu-firmware_git.bbhttps://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.bbhttps://github.com/xilinx/vcu-modules.git
libvcu_xlnx./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/libvcu-xlnx_git.bbhttps://github.com/Xilinx/vcu-ctrl-sw.git
libomxil_xlnxallegro OMX IL Libraries,test applications and headers for VCU./meta-xilinx/meta-xilinx-bsp/recipes-multimedia/vcu/libomxil-xlnx_git.bbhttps://github.com/Xilinx/vcu-omx-il
libomxilBellagio 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-omxOpenMAX 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_%.bbappendhttp://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

验证

推进

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值