通过上一篇文章的实验我们对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 |
我们先来看一下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