Ничто не приводит к ошибке - добавление нового слоя Yocto и новой машины

У меня возник вопрос о добавлении новой машины в Yocto.

Я пытаюсь добавить и новый слой в Yocto, и новую машину. Машина основана на оценочной плате Atmels SAMA5D27-SOM1-EK-SD. Я хочу включить еще один UART для этой платы.

Я клонировал исходный код ядра для этой платы (linux-at91) и добавил еще один файл DTS, основанный на файле at91sama5d27-som1-ek-sd.dts. Я внес изменения, чтобы включить UART0. Затем я добавил этот новый файл DTS в Makefile в linux-at91/arch/arm/boot/dts . Я сделал патч, чтобы сохранить эти изменения.

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

Я определил еще один слой, который будет действовать как новый слой Yocto, определяющий мою собственную машину. Я добавил несколько файлов.bbappend в recipes-kernel, чтобы добавить патч (который добавляет новый файл dts в исходный код ядра linux at91) и добавить нашу собственную машину в качестве совместимой. Насколько я понимаю, мы могли бы продолжать использовать определения в слое мета-атмосферы, но добавить файлы.bbappend в слое мета-аксона по тому же пути, и это применит те изменения, которые мы хотим.

Я проделал то же самое с каталогом recipes-bsp. На уровне мета-аксона все файлы.bbappend в recipes-bsp добавляют только нашу настраиваемую машину в список совместимых машин. Однако когда я продолжаю сборку, я получаю такую ​​ошибку:

NOTE: Resolving any missing task queue dependencies ERROR: Nothing PROVIDES 'at91bootstrap-sam-ba' at91bootstrap-sam-ba was skipped: incompatible with machine axon-ft3-sp-machine (not in COMPATIBLE_MACHINE)

Я сбит с толку, потому что в файле рецептов, который определяет at91bootstrap-sam-ba в meta-atmel, не упоминаются какие-либо совместимые машины, поэтому я хотел бы использовать его из уровня meta-atmel, не меняя его вообще. (отредактировано)

1 ответ

В нем действительно упоминаются совместимые машины.

В рецепте at91bootstrap-sam-ba [1] вы можете найти следующую строку:

require at91bootstrap_${PV}.bb

Тогда давайте посмотрим на этот рецепт [2]:

COMPATIBLE_MACHINE = '(sama5d3xek|sama5d3-xplained|sama5d3-xplained-sd|at91sam9x5ek|at91sam9rlek|at91sam9m10g45ek|sama5d4ek|sama5d4-xplained|sama5d4-xplained-sd|sama5d2-xplained|sama5d2-xplained-sd|sama5d2-xplained-emmc|sama5d2-ptc-ek|sama5d2-ptc-ek-sd|sama5d27-som1-ek|sama5d27-som1-ek-sd|sama5d2-icp-sd|sam9x60ek|sam9x60ek-sd|sama5d27-wlsom1-ek-sd)'

С помощью bitbake at91bootstrap-sam-ba -e покажет вам, что действительно COMPATIBLE_MACHINE установлен, и даже скажет вам, где он был установлен.

PS: В некоторых случаях для вашей пользовательской машины может быть хорошей идеей потребовать исходную машину, на которой она основана (например, sama5d27-som1-ek-sd) и сделайте название оригинальной машины частью MACHINE_OVERRIDES так что вам не нужно добавлять bbappend для каждого рецепта с COMPATIBLE_MACHINE. Будьте осторожны с порядком вMACHINE_OVERRIDES, он оценивается справа налево с крайним правым OVERRIDESимеет высший приоритет. (Используйтеbitbake -e <recipe> чтобы убедиться, что он установлен правильно).

[1] https://github.com/linux4sam/meta-atmel/blob/master/recipes-bsp/at91bootstrap/at91bootstrap-sam-ba_3.9.2.bb

[2] https://github.com/linux4sam/meta-atmel/blob/master/recipes-bsp/at91bootstrap/at91bootstrap_3.9.2.bb

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