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.