Указание предпочтительных версий пакета

Когда bitbake начинает сборку пакета и доступно несколько его версий, выбирается версия с наивысшим номером (номер версии определён в переменной PV).

Например, если bitbake начал собирать procps и доступны пакеты:

~/oe%> ls recipes/procps 
procps-3.1.15/    procps-3.2.1/    procps-3.2.5/    procps-3.2.7/    procps.inc
procps_3.1.15.bb  procps_3.2.1.bb  procps_3.2.5.bb  procps_3.2.7.bb
~/oe%>
	

то для сборки будет выбрана версия 3.2.7.

Такое поведение не всегда подходит. Может случиться, что вы добавили новую версию пакета, но она еще не работает, или новая версия пакета пока не поддерживает целевую машину. В bitbake предусмотрена такая ситуация и при выборе рецепта для сборки учитываются не только номера версий, но и "предпочтительность" каждой из версий, указанная в переменной DEFAULT_PREFERENCE в рецепте.

По умолчанию DEFAULT_PREFERENCE равна 0. Bitbake ведет поиск наивысшего значения, а затем среди рецептов одинакового уровня "предпочтительности" выбирает рецепт с самой новой версией. В общем случае это означает, что положительная DEFAULT_PREFERENCE сделает пакет более предпочтительным, а отрицательная фактически запретит сборку этого рецепта.

Представим, что вы хотите добавить procps версии 4.0.0, однако он еще не совсем работает. Вы можете удалить или переименовать новый рецепт чтобы собрать рабочий образ, однако правильный путь состоит в запрете сборки новой версии указанием

DEFAULT_PREFERENCE = "-1"

в рецепте. Bitbake проигнорирует версию 4.0.0 так как все остальные версии имеют "предпочтительность" 0. Обратите внимание, что вы всё ещё можете напрямую вызвать сборку новой версии:

bitbake -b recipes/procps/procps_4.0.0.bb

Это позволяет проверить и поправить пакет, и при этом новая версия не будет автоматически выбираться пока вы не исправите DEFAULT_PREFERENCE

Используя эту возможность совместно с overrides позволяет запрещать (или выбирать) некоторые версии пакетов. Пример из glibc показывает запрет сборки рецепта для архитектуры sh3 по причине отстутствия поддержки. В этом случае bitbake попытается выбрать другую версию glibc:

	recipes/glibc/glibc_2.3.2+cvs20040726.bb:DEFAULT_PREFERENCE_sh3 = "-99"