#yocto
#yocto
Вопрос:
Я пытаюсь установить файлы, извлеченные из tar-файла, но ни один из моих файлов не устанавливается в каталог usr / include на целевой плате, но я вижу свои файлы в каталоге temp/work/aarch64/recipedir/image/usr/include/mydir/ и include/myfile.h. Во время сборки я неесть какие-либо ошибки.
do_install() {
install -d ${D}${includedir}
mkdir -p ${D}${includedir}/mydir
install -m 0644 ${S}/include/myfile.h ${D}${includedir}
install -m 0644 ${S}/include/mydir/*.h ${D}${includedir}/mydir/
}
FILES_${PN} = "${includedir}/mydir
Ответ №1:
Все, что входит ${includedir}
, помещается ${PN}-dev
по умолчанию.
c.f.: https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n316
Вы должны помнить, что файл может быть только в одном пакете. Определить, в каком пакете будет находиться файл, довольно просто. Начиная с крайнего левого пакета PACKAGES
, первый пакет, в котором файл соответствует любому пути, FILES_<pkg>
будет иметь файл.
По умолчанию ${PN}-dev
отображается перед ${PN}
in PACKAGES
.
c.f.: http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n294
Вы можете проверить, в каком пакете находится ваш файл, без «обратного проектирования» всего этого, запустив oe-pkgdata-util find-path '/usr/include/mydir'
.
Если вы действительно хотите, чтобы этот заголовочный файл был в вашей системе (почему?), Вы можете либо добавить ${PN}-dev
его к своему изображению, либо взломать (удалить пакет -dev из PACKAGES
или переместить ${PN}
раньше ${PN}-dev
, Если у вас есть только один файл ${includedir}
и т. Д.).
Комментарии:
1. Спасибо за подробное объяснение. Я запустился
oe-pkgdata-util find-path '/usr/include/mydir'
, заменив фактическое имя каталога, но я получил сообщение об ошибке какERROR: Unable to find any package producing path /usr/include/mydir
. На самом деле я загрузил пакет tar, который содержит файлы .so и .h, которые необходимо скомпилировать с моим приложением, поэтому я успешно установил файл .so в libdir, но не файлы .h . В любом случае мне не нужны файлы .h во время выполнения, но я не уверен, как bitbake предоставляет путь во время компиляции. Итак, я решил установить заголовочные файлы во включаемый каталог.2. Я всегда использовал
oe-pkgdata-util find-path
с глобусом для файлов или полным путем, поэтому, возможно, так будет лучше (в основном, добавьте/*
в конце вашего пути). Однако вам не нужно очищать свой${TMPDIR}
между сборкой и выполнениемoe-pkgdata-util
.3. Для совместного использования файлов между рецептами в целях компиляции, любой файл, установленный в любой части каталога
SYSROOT_DIRS
(там уже есть нормальные значения по умолчанию, например${includedir}
, есть в нем), будет доступен для других рецептов, учитывая, что они добавили ваш оригинальный рецептDEPENDS
. Части исходных текстов вашего рецепта будут доступны в каталоге recipe-sysroot в${WORKDIR}
каталоге других рецептов. Системный корень передается в систему сборки рецептов через переменные Yocto, поэтому используйте их как можно чаще. c.f.: docs.yoctoproject.org/ref-manual /…4. Поправьте меня, если я ошибаюсь, я должен установить файлы .h в
${includedir}
to be part ofSYSROOT_DIRS
, чтобы при добавлении этого имени рецептаDEPENDS
в другой рецепт он мог совместно использовать все файлы.5.
temp/work/aarch64/recipedir/image
это${D}
ваш рецепт. Именно оттуда файлы разбиваются на пакеты, а также становятся доступными для других рецептов черезSYSROOT_DIRS
. c.f. docs.yoctoproject.org/ref-manual/variables.html#term-D Вы можете перепроверить, добавив свой рецепт вDEPENDS
другой рецепт, и проверитьtemp/work/aarch64/anotherrecipedir/recipe-sysroot
, есть ли там ваши заголовочные файлы. Если они здесь, но «другой рецепт» не удалось собрать, убедитесь, что исходный код использует переменные Yocto, которые определяют системный корень (напримерCC
, для программного обеспечения на C).