Лучшие практики для сборки прошивок с использованием Yocto - PullRequest
0 голосов
/ 28 июня 2018

У меня есть работающая система сборки Yocto, основанная на ветке rocko, которая генерирует изображения для целевой платы на основе ARM. Одним из чипов на этой плате является небольшой микроконтроллер на базе ARM, который отделен от основного процессора. Он должен быть загружен образом прошивки, который я должен собрать.

Было бы легко составить рецепт для сборки микропрограммного обеспечения этого микроконтроллера. Требуется кросс-компилятор ARM, а затем некоторые специальные параметры компилятора для управления генерацией кода (для cortex-m4 + thumb и т. Д.). Проблема в том, что если я настрою нормальный рецепт, он будет предполагать, что я создаю что-то для целевой архитектуры ARM, которая представляет собой другой тип ARM, требующий разных вариантов генерации кода. Конечно, я могу сделать, чтобы Makefile прошивки переопределял среду кросс-компиляции, которая предоставляется для целевой системы, и чтобы Makefile просто создавал двоичный образ прошивки.

Но это приведет к пакету, который номинально подходит для целевой архитектуры ARM, но содержит двоичный двоичный объект, предназначенный для прошивки на чип на целевой плате.

Итак, мой вопрос: как мне сделать рецепт для прошивки, которая будет работать на архитектуре, полностью отличной от MACHINE, для которой в конечном итоге предназначена сборка yocto?

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

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Multiconfig может вам помочь. Одним из вариантов использования является то, что вы хотите создать образ для платы, которая состоит из ядра FPGA и ARM, это как-то похоже на ваш вариант использования.

Цитирование Примечания к выпуску Morty (2.2) , там было введено:

Базовая поддержка многоконфигурационных сборок. Например, это позволяет собирать более одной MACHINE за раз, что может быть полезно, если у вас есть плата с двумя отдельными SoC, каждая из которых имеет свою собственную ОС, но вы хотите использовать оба в одной сборке.

Я еще не пробовал, но документация для роко здесь: https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#platdev-building-targets-with-multiple-configurations

Вы в основном определяете два файла конфигурации машины, определяете их в переменной BBMULTICONFIG и запускаете битовый пакет с префиксом multiconfig:<configuration>: для цели, когда это необходимо.

0 голосов
/ 29 июня 2018

Вам необходимо создать bbclass , который изменит необходимые вам переменные и унаследует их в вашем рецепте. Давайте возьмем в качестве примера nativesdk.bbclass . Ваш файл newarch.bbclass будет выглядеть примерно так:

CLASSOVERRIDE = "class-newarch"
PACKAGE_ARCH = "newarch"
PACKAGE_ARCHS += "newarch"
TARGET_ARCH = "newarch"
TARGET_CC_ARCH = "newarch"
TARGET_LD_ARCH = "newarch"
TARGET_AS_ARCH = "newarch"
TARGET_CPPFLAGS = "..."
TARGET_CFLAGS = "..."
TARGET_CXXFLAGS = "..."
TARGET_LDFLAGS = "..."
CPPFLAGS = "..."
CFLAGS = "..."
CXXFLAGS = "..."
LDFLAGS = "..."
...