Как мне добавить файл в корневую файловую систему сборки?

#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
}
 

Ну … это скорее обзор, чем точный ответ, но надеюсь, это поможет!