Вопрос или проблема
У меня есть проблема в моем проекте yocto на kirkstone. В версии systemd 250.4 есть ошибка, которую я хочу исправить, вернув систему из scarthgap. Scarthgap предоставляет версию systemd 255.4, которая содержит необходимое исправление.
Я скачал код с помощью git clone https://git.openembedded.org/openembedded-core
и переключился на ветку scarthgap
. Это недавняя версия, и точный хэш, на который я переключился, – 3d8948
. Цель состоит в том, чтобы включить этот PR
Затем я добавил в свой проект yocto пользовательский слой под названием meta-scarthgap-backports
и скопировал каталог systemd из клона openembedded-core. Моя структура файлов выглядит следующим образом.
layers/meta-scarthgap-backports/
├── conf
│ └── layer.conf
└── recipes-core
└── systemd
└── ... все файлы из ~/openembedded-core/meta/recipes-core/systemd
Я добавил этот новый слой в свою директорию BBLAYERS
, и когда я запускаю bitbake systemd
, он только собирает версию 250.4, которая является версией kirkstone.
Я пытался добавить PREFERRED_VERSION_systemd = "255.4"
в файл local.conf моего проекта, но перед тем, как он продолжает собирать старую версию, я получаю следующее предупреждение. Я также пробовал PREFERRED_VERSION_systemd_forcevariable
, и результат был тем же.
WARNING: preferred version 255.4 of systemd not available (for item systemd)
WARNING: versions of systemd available: 1:250.4
Что мне делать, чтобы мой проект собрал версию systemd, которую я добавил в слой backports?
Ответ или решение
Для того чтобы успешно выполнить бэкапрование systemd с ветки scarthgap в вашу сборку Yocto с веткой kirkstone, вам нужно учесть несколько шагов и настроек. Давайте рассмотрим этот процесс более подробно.
Шаги для бэпортирования systemd
-
Клонирование репозитория и создание директории:
Вы уже сделали это правильно, склонировав репозиторийopenembedded-core
и создав новый слойmeta-scarthgap-backports
. -
Копирование необходимых файлов:
Убедитесь, что вы скопировали все необходимые файлыsystemd
изopenembedded-core/meta/recipes-core/systemd
в ваш слой. Это включает в себя.bb
файлы и любые связанные с ними файлы. -
Настройка
layer.conf
:
Убедитесь, что вашlayer.conf
файл корректно прописан и содержит все нужные зависимости. -
Изменение
PREFERRED_VERSION
:
В вашемlocal.conf
добавьте следующую строку:PREFERRED_VERSION_systemd = "255.4" PREFERRED_PROVIDER_virtual/systemd = "systemd"
-
Установка переменной
BBFILES
:
В вашемlayer.conf
убедитесь, что вы указали путь к вашим изменениям. Это важно для того, чтобы BitBake знал, что существует новая версия:BBFILES += "${LAYERS_DIR}/meta-scarthgap-backports/recipes-core/systemd/*.bb"
-
Обновление зависимостей:
Убедитесь, что все зависимости, которые могут требоваться для новой версии systemd, также обновлены. Это включает библиотеки и любые мета-зависимости, которые могли измениться. -
Очистка кэша и сборки:
После выполнения всех изменений обязательно выполните очистку кэша:bitbake -c cleanall systemd
Затем попробуйте заново отразить сборку:
bitbake systemd
-
Проверка наличия ошибок:
Если сборка все еще использует старую версию или вы получаете предупреждения, проверьте наличие других слоев, которые могут переопределять вашу настройкуPREFERRED_VERSION
. В каждом слое может быть свой набор переменных с префиксомPREFERRED_VERSION
, и они могут конфликтовать друг с другом. -
Убедитесь в правильности формата:
Убедитесь, что формат метаданных в ваших.bb
файлах корректен. Например, важно правильно указывать версию и любые изменения, которые были сделаны.
Дополнительные шаги
Если после выполнения всех вышеуказанных шагов вам все равно не удается собрать необходимую версию systemd, вы можете сделать следующее:
- Проверьте
conf/packages.conf
: Убедитесь, что в этом файле не прописаны ограничения на версии systemd. - Логи сборки: Проверьте логи сборки, чтобы увидеть, какие именно ошибки возникают и какие зависимости могут быть недоступны.
- Обсудите на форумах: Если вы исчерпали все ресурсы, неплохо было бы обсудить вашу проблему на форумах Yocto или списках рассылки, так как другие разработчики могут иметь аналогичный опыт.
Следуя указанным шагам и рекомендациям, вы должны быть в состоянии успешно бэпортировать systemd с ветки scarthgap в вашу сборку kirkstone. Удачи!