Ошибка Yocto: "пакет без отладки содержит каталог .debug" с рецептом yocto
Я пытаюсь создать собственный рецепт yocto, который включает в себя компиляцию небольшой программы на C. Во время сборки -
$ bitbake -f interface-configuration
...
ERROR: QA Issue: non debug package contains .debug directory: interface-configuration path /work/cortexa9hf-vfp-poky-linux-gnueabi/interface-configuration/0.1-r0/packages-split/interface-configuration/etc/interfaces/bin/.debug/set
ERROR: QA run found fatal errors. Please consider fixing them.
ERROR: Function failed: do_package_qa
ERROR: Logfile of failure stored in: /home/git/poky/build-atmel/tmp/work/cortexa9hf-vfp-poky-linux-gnueabi/interface-configuration/0.1-r0/temp/log.do_package.28986
ERROR: Task 10 (/home/git/poky/meta-atmel/recipes-intelli/interface-configuration/interface-configuration_0.1.bb, do_package) failed with exit code '1'
Мне было интересно, может ли кто-нибудь здесь знать, как отключить информацию об отладке или удалить проверку QA. Поиск Google ошибки до сих пор оказался бесплодным.
Приветствия
Обновление с помощью interface-configuration.bb
DESCRIPTION = "Interface configuration files and tools"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
SRC_URI = "file://interface-configuration-0.1.tar.gz"
do_compile() {
install -vd ${D}/
${CC} -g0 set.c -o set
# CC is arm-poky-linux-gnueabi-gcc -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mtune=cortex-a9 --sysroot=/home/git/poky/build-atmel/tmp/sysroots/sama5d3xek
}
do_install() {
cp -r ${S}/etc ${D}/etc
install -vd ${D}/etc/interfaces/bin
install -vm 0755 set ${D}/etc/interfaces/bin/
}
do_install_append() {
# I added this to try to remove the error - it doesn't work
rm -rf ${D}/etc/interfaces/bin/.debug
}
FILES_${PN} += "/etc/interfaces/MANIFEST \
/etc/interfaces/conf/A \
/etc/interfaces/conf/B \
/etc/interfaces/conf/C \
/etc/interfaces/conf/D \
/etc/interfaces/template/A \
/etc/interfaces/template/B \
/etc/interfaces/template/C \
/etc/interfaces/template/D \
/set.c"
Ответы
Ответ 1
Yocto/OE создает каталог .debug
в каталоге, где размещается двоичный файл. Для двоичного файла используется нестандартный каталог (install -vm 0755 set ${D}/etc/interfaces/bin
). Вам нужно объявить, что .debug отправляется в пакет -dbg
.
Теперь у вас есть два варианта. Сначала используйте стандартный каталог, например ${D}/usr/bin
, или второй вы добавите .debug в dbg - пакеты, подобные этому:
FILES_${PN}-dbg += "/etc/interfaces/bin/.debug"
Вы можете удалить do_install_append
, потому что .debug
создается после do_install
.
Если вы используете второй вариант, вам нужно настроить gdb с опцией set debug-file-directory directories
в gdb, чтобы отладить ваш двоичный файл. Подробнее здесь
Ответ 2
Каталог .debug автоматически создается как часть функции split_and_strip_files
в meta/classes/package.bbclass
.
Эта функция принимает файлы, полученные в результате do_install
, и разбивает их на несколько пакетов: ${PN}
, содержащий базовые файлы и разделенные двоичные файлы, ${PN}-dbg
с символами отладки и т.д.
Вы можете подавить split_and_strip_files
, добавив следующее в ваш файл .bb
:
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
Я думаю, вы также хотите упростить список пакетов, созданных с вашего .bb
, чтобы:
PACKAGES = "${PN}"
Ответ 3
если вы хотите пропустить весь пакет рецептов
вы можете добавить строку ниже, чтобы пропустить проблему QA в файле ".bb".
для установленной проблемы с доставкой:
INSANE_SKIP_${PN} = "installed-vs-shipped"
для проблемы с чередованием пакетов:
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
надеюсь, что это сработает для вас.