#bitbake
#bitbake
Вопрос:
Мне нужно включить файл при сборке пакета, но сам файл вообще не требуется во время выполнения.
Мне сказали посмотреть, как это сделать с помощью do_
функции, но я не смог найти подходящую функцию ни в одной документации. Я бы предположил, что это можно сделать тривиально, просто указав, какой файл добавить.
Опять же, я не ищу способ добавить файлы в конечный образ. Это только для сборки.
Ответ №1:
Вот полная документация о задачах. Все они начинаются с do_
, поэтому вам было рекомендовано расширить один из них. Также (как написано в документах) пакеты могут иметь дополнительные задачи, которые поступают из классов — файлов .bbclass
, которые применяются к рецепту вашего пакета с inherit
ключевым словом. Чтобы получить полный список задач вашего пакета, используйте command
bitbake -c listtasks <your package name>
На самом деле таким образом вы просто вызываете task do_listtasks
своего пакета, do_listtasks
это тоже … задача)
Итак.. сначала вам нужно понять, к какой задаче вам нужно добавить ваш файл. У задач довольно простые имена, поэтому, чтобы использовать ваш файл во время компиляции, вам нужна задача do_compile
и так далее.
Теперь неясно, как вы собираетесь на самом деле добавлять свой файл в сборку, но, похоже, также каким-то образом по рецепту вашего пакета. Это означает, что вы должны поместить свой файл в папку files
(есть варианты именования этой папки) рядом с вашим рецептом, а не добавлять файл в переменную SRC_URI
, подобную этой:
SRC_URI = "
.....
file://your-file-in-folder-files.ext
.....
"
Делая это, вы указываете bitbake добавить этот файл в WORKDIR во do_unpack
время выполнения задачи. Подробнее об этом здесь, особенно в 3.3.5.
Теперь собственно к вашему вопросу)) Предположим, вам нужно использовать ваш файл во do_compile
время выполнения задачи, но перед фактическими действиями компиляции. Чем в вашем рецепте, расширяйте do_compile следующим образом:
do_compile_prepend() {
cp ${WORKDIR}/your-file-in-folder-files.ext ${S}/some/subpath/inside/sources
}
Аналогично, чтобы сделать что-то с вашим файлом после некоторых реальных действий задачи, создайте функцию с _append
суффиксом. Например, do_configure_append
или do_compile_append
.
Здесь WORKDIR — это некоторая папка в build
каталоге Yocto, где находится все содержимое вашего пакета, необходимое для сборки вашего пакета, S — это специальная папка с загруженным и распакованным исходным кодом под WORKDIR
и do_compile_prepend
(и другие) — это просто bash-скрипт.
Также рассмотрите папку D (она также находится под WORKDIR
). Он содержит файлы, которые фактически должны входить в результирующее изображение при создании изображения. Поэтому, если каким-то образом ваш файл найдет путь к результирующему изображению, удалите его прямо из D
этого:
do_install_append() {
rm -f ${D}/path/to/your/file/in/resulting/rootfs/your-file-in-folder-files.ext
}
Ну … это скорее обзор, чем точный ответ, но надеюсь, это поможет!