Yocto: перестроить часть проекта

У меня есть проект, который использует yocto для создания библиотек, включая gstreamer. Я узнал, что мне нужно исправить какой-то элемент gstreamer, создав новый рецепт bitbake с патчем.

Я обычно запускаю bitbake с именем изображения в качестве параметра, который перестраивает весь yocto (который довольно длинный):

MACHINE=some_machine nice bitbake yocto-etc-etc

Как мне перестроить только ту часть, которая мне нужна, а не весь yocto? Я слышал о devtool, но я не уверен, как это использовать.

6 ответов

Решение

Конечно, это легко сделать. Просто укажите рецепт, который вы хотите создать, вместо имени образа, например, если это был основной рецепт gstreamer, который вы изменили (который по крайней мере в текущих версиях называется gstreamer1.0):

MACHINE=some-machine bitbake gstreamer1.0

Обратите внимание, что имя, ожидаемое в командной строке, всегда является именем рецепта или чем-то из PROVIDES в рецепте, а не именем пакета времени выполнения.

Что касается devtool, он, безусловно, может поставить вас в среду, в которой вам будет проще вносить изменения в исходный код рецепта и генерировать из него патчи, но фактическая часть сборки, которую мы здесь обсуждаем, на самом деле не меняется. Вы можете найти больше информации о том, как использовать devtool в Руководстве по разработке проектов Yocto.

Вы можете передать разные команды битбейку в зависимости от того, что вам нужно.

Чтобы удалить темп:

bitbake -c clean gstreamer

Чтобы удалить кеш temp и sstate (я использую это чаще всего):

bitbake -c cleansstate gstreamer

Чтобы удалить загрузку, и давайте начнем сборку, начиная с do_fetch и все

bitbake -c cleanall gstreamer

Как только вы закончите с любым из этих чистых, которые вам когда-либо подходят, вы можете просто дать команду сборки для указанного:

bitbake gstreamer

Вы также можете

clean: удаляет все выходные файлы для целевой цели. cleanall: удаляет все выходные файлы, общий кэш состояния и загруженные исходные файлы для цели в зависимости от изменений.

bitbake -c clean task 
bitbake -c cleanall task

Сначала вы можете создать патч на gstreamer, используя quilt или diff и т. Д.

Поместите патч в свой метаслой и включите его в,SRC_URI += "file://xxxx.patch".

Убедитесь, что вы добавили переменную FILESEXTRAPATHS_PREPEND в файл рецепта bbappend.

Затем выполните чистку упаковки.

bitabake gstreamer** -c cleansstate

Затем выполните операцию do_patch и проверьте, правильно ли применен наш патч.

bitabake gstreamer*** -c patch

Затем выполните полную сборку компонента, а затем построите конечную цель.

Вы также можете запустить интересующие вас задачи, например:

Если вы хотите применить только патч, вы можете сделать что-то вроде:

# Apply the patch you have located and sourced in SRC_URI variable previously
MACHINE=some_machine nice bitbake -c patch gstreamer
# Compile the recipe 
MACHINE=some_machine nice bitbake -c compile gstreamer

# In case there are more necessary tasks, launch them as previous

Теперь вы можете получить сгенерированный пакет и передать его на свою доску (например, через ssh/serial(zmodem)), протестировать его и повторять до тех пор, пока вам не понравится результат, а затем восстановить изображение, выполнив:

for i in clean cleanall cleansstate;do bitbake -c ${i} gstreamer;done
MACHINE=some_machine nice bitbake yocto-etc-etc

вы можете создать любой конкретный рецепт, указав имя рецепта вместе с командой bitbake

Например, если вы хотите собрать gstreamer

      poky/meta/recipes-multimedia/gstreamer1.0_1.16.3.bb

вы можете использовать следующую команду

      MACHINE=<your-machine-name> bitbake gstreamer1.0

Обратите внимание, что значение PROVIDES будет проанализировано из имени файла .bb, исключая символы после подчеркивания.

Дополнительные предложения

Если вы хотите внести некоторые экспериментальные изменения в свой исходный код и хотите скомпилировать каждое минималистичное изменение, вы можете сделать это, перейдя в рабочий каталог.

      cd build/tmp/work/armv5e-poky-linux-gnueabi/gstreamer1.0/1.16.3-r0/

здесь вы можете применить свои изменения вsrcкаталог, и вы можете использовать./temp/run.do_compileдля компиляции, что займет гораздо меньше времени по сравнению со всем временем сборки.

Другие вопросы по тегам