Bitbake не устанавливает мой файл в образе rootfs


Я создал рецепт битового теста, который скопировал бы 2 моих файла (двоичные файлы прошивки для VPU) в каталог /lib/firmware/ на корневой файловой системе целей.

Я перепробовал много вариантов, так что теперь я не уверен, что в моем рецепте является ненужным / избыточным, а что нужно. Я думаю, что FILESEXTRAPATHS.., SRC_URI.. и do_install.. должно быть достаточно, но это не работает только с этим и ни со всеми другими вещами.

DESCRIPTION = "VPU libraries provided by fsl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"

PACKAGE_ARCH = "all"
ALLOW_EMPTY_${PN} = "1"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
    file://vpu_fw_imx6d.bin \
    file://vpu_fw_imx6q.bin \
"

INSANE_SKIP_${PN} += "installed-vs-shipped"

do_install () {
    install -d ${D}${base_libdir}/firmware/
    cp ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
    cp ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
    chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin
    chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin
}
PACKAGES = "${PN}"
FILES_${PN} += " \
        ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin \
        ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin \
"

Не могли бы вы указать мне, что я делаю неправильно?

РЕДАКТИРОВАТЬ:
Ответ Андерса действительно помог и решил проблему.

Я публикую "исправленный" рецепт на тот случай, если кто-то посчитает его полезным.

DESCRIPTION = "VPU libraries provided by fsl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"

PACKAGE_ARCH = "all"

SRC_URI += " \
    file://vpu_fw_imx6d.bin \
    file://vpu_fw_imx6q.bin \
"

do_install () {
    install -d ${D}${base_libdir}/firmware/
    install -m 755 ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
    install -m 755 ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
}

FILES_${PN} += " \
        ${base_libdir}/firmware/vpu_fw_imx6d.bin \
        ${base_libdir}/firmware/vpu_fw_imx6q.bin \
"

1 ответ

Решение

Удалите все ненужные строки, просто чтобы быть в безопасности.

FILESEXTRAPATHS не обязательно; он используется только когда вы пишете .bbappend файл для изменения рецепта в другом слое.

ALLOW_EMPT_${PN} тоже не нужно. Он используется, чтобы позволить PN быть пустым, что полезно, только если вы создаете другие пакеты. В вашем случае вы записываете файлы прошивки в PN, поэтому лучше иметь ошибку bitbake при сборке вашего пакета, если файлы не могут быть установлены.

INSANE_SKIP_${PN} += "installed-vs-shipped" тоже не нужно. Требуется только если вы устанавливаете файлы в do_install что вы не кладете в пакет. Обычно рекомендуется не устанавливать их и не удалять файлы.

Ваш do_install() должно работать нормально; хотя я бы рекомендовал использовать install вместо cp а также chmod, Таким образом, вы также уверены, что владелец и группа будут правильными. (Проверки для этого добавляются как новая проверка качества в Jethro).

PACKAGES = "${PN}" не нужен

Удалить ${D} от тебя FILES_${PN} определение. Пути в FILES должен быть путь к цели (т.е. не включая D-directory).

Это должно заставить вас работать.

Спасибо, хорошая отправная точка. Наконец, я сделал это для установки двух сценариев.sh.

Я создал эту файловую структуру (имя папки "files" автоматически известно Yocto, и его лучше всего оставить как есть):

    > bitbake-layers create-layer meta-mylayer
    > cp -r meta-mylayer ../sources/yocto/meta-layers/
    > cat >> conf/bblayers.conf << EOF
    > ${BSPDIR}/sources/meta-mynetworklayer \
    > EOF
    > pwd
    /yocto/meta-layers/meta-mylayer/recipes-tools/somename
    > tree .
    .
    ├── files
    │   ├── somescript1.sh
    │   └── somescript2.sh
    └── somename.bb

Я добавил ссылку на "somename" в local.conf:

IMAGE_INSTALL_append = " somename"

А файл somename.bb выглядит так:

DESCRIPTION = "Some description"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI += " file://somescript1.sh \
             file://somescript2.sh \
           "

inherit allarch
do_compile[noexec] = "1"

do_install() {
    install -d ${D}${bindir}
    install -m 0770 ${WORKDIR}/somescript*.sh ${D}/${bindir}
}

Yocto автоматически найдет файлы в папке "files", скопирует их во временную папку ${WORKDIR}, а вторая строка "install" гарантирует, что оба файла в конечном итоге будут присутствовать в папке /usr/bin.. Поскольку ${bindir} (например, /usr/bin) используется в качестве цели копирования, в этом случае ФАЙЛЫ _${PN} не нужны.

inherit externalsrc package

DESCRIPTION = "telephony demo"
LICENSE = "MediaTekProprietary"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
DEPENDS = "platform-libs audio-mixer-ctrl libvendorril libpal gstreamer1.0 glib-2.0 dtmf libapn"
inherit workonsrc
WORKONSRC = "${TOPDIR}/../meta/meta-mediatek-ivt/recipes-telephony/telephony/files"

SCRIPT_CC_API = "scripts/CC_API"
SCRIPT_DATA_API = "scripts/Data_API"
SCRIPT_ECALL_API = "scripts/ECALL_API"
SCRIPT_NETWORK_API = "scripts/Network_API"
SCRIPT_SIM_API = "scripts/SIM_API"
SCRIPT_SM_API = "scripts/SM_API"
SCRIPT_SMS_API = "scripts/SMS_API"
SCRIPT_SS_API = "scripts/SS_API"
SCRIPT_STK_API = "scripts/STK_API"

do_compile () {
    if test "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" || test "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4"; then
        oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -mhard-float"
    else
        oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST}"
    fi
}

do_install() {
    install -d ${D}${bindir}/
    install -m 0755 ${S}/telephony ${D}${bindir}/

    install -d ${D}${bindir}/${SCRIPT_CC_API}
    install -m 0755 ${S}/${SCRIPT_CC_API}/* ${D}${bindir}/${SCRIPT_CC_API}

    install -d ${D}${bindir}/${SCRIPT_DATA_API}
    install -m 0755 ${S}/${SCRIPT_DATA_API}/* ${D}${bindir}/${SCRIPT_DATA_API}

    install -d ${D}${bindir}/${SCRIPT_ECALL_API}
    install -m 0755 ${S}/${SCRIPT_ECALL_API}/* ${D}${bindir}/${SCRIPT_ECALL_API}

    install -d ${D}${bindir}/${SCRIPT_NETWORK_API}
    install -m 0755 ${S}/${SCRIPT_NETWORK_API}/* ${D}${bindir}/${SCRIPT_NETWORK_API}

    install -d ${D}${bindir}/${SCRIPT_SIM_API}
    install -m 0755 ${S}/${SCRIPT_SIM_API}/* ${D}${bindir}/${SCRIPT_SIM_API}

    install -d ${D}${bindir}/${SCRIPT_SM_API}
    install -m 0755 ${S}/${SCRIPT_SM_API}/* ${D}${bindir}/${SCRIPT_SM_API}

    install -d ${D}${bindir}/${SCRIPT_SMS_API}
    install -m 0755 ${S}/${SCRIPT_SMS_API}/* ${D}${bindir}/${SCRIPT_SMS_API}

    install -d ${D}${bindir}/${SCRIPT_SS_API}
    install -m 0755 ${S}/${SCRIPT_SS_API}/* ${D}${bindir}/${SCRIPT_SS_API}

    install -d ${D}${bindir}/${SCRIPT_STK_API}
    install -m 0755 ${S}/${SCRIPT_STK_API}/* ${D}${bindir}/${SCRIPT_STK_API}
}

Пожалуйста, используйте ref для примера кода выше, и он работает на плате MTK, и все файлы оболочки будут скопированы в /usr/bin.

Другие вопросы по тегам