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
для компиляции, что займет гораздо меньше времени по сравнению со всем временем сборки.