LINUX.ORG.RU

Система для сборки прошивок для встройки

 , ,


1

1

Всех приветствую.

Хотел обсудить один вопрос. А именно система для сборки прошивок.

Есть много приборов где есть прошивка на базе линукса. У приборов есть архитектура проца (например 3 разных). Разные версии железа. Разный функционал. Есть варианты, когда один и тот же функционал может быть реализован на разном железе. А бывает что на одном железе делают разный функционал (да, это про fpga).

И вот, для всего этого зоопарка нужно нечто, что позволит быстро и без проблем собирать прошивки.

Как я себе это вижу.

Есть набор исходников разных версий: загрузчик, ядро, библиотеки, модули ядра, всякие программы обеспечивающие функционирование по назначению.

Есть некий прибор с заданной архитектурой, версией железа и потребным функционалом. Пишем некий конфиг, в котором указываем, какие компоненты нам нужны, каких версий и т.д. Из исходников собираются нужные бинарники нужных версии, конфигурации и архитектуры. Все это складывается в какие-то пакеты и хранятся в системе управления пакетами. Потом говорим, чтобы по вышеупомянутому конфигу собралась прошивка из указанных пакетов. Ну типа сделали образ рутфс, и туда все нужные пакеты развернулись (может даже с зависимостями).

Получается, что прошивка собирается из этих бинарных пакетов. Если надо что-то поменять в прошивке. Собираем новую версию какого-то пакета и потом заново прошивку.

Я не все потребности озвучил, но это пока самые главные.

Резюмирую немного главное:

  1. сборка из исходников с заданной версией, архитектурой, конфигом
  2. сборка из git репы, с заданным тегом, архитектурой, конфигом
  3. хранение в централизованном хранилище
  4. централизованное хранение конфигов для сборки прошивки из пакетов для железки и ее версии
  5. сборка любой версии прошивки в любой момент из пакетов

И вот теперь вопрос. А что в мире уже придумали на такой случай?

Что я уже видел-гуглил.

  • билдрут - простяцкая, быстрая, очень скудный функционал.
  • йокто - монструозная, нужно разбираться, но очень гибкая и в целом похоже то, что надо (концепция слоев, рецепты, метаданные и т.д.). Неясно насчет пакетирования и хранения.
★★★★★
Ответ на: комментарий от AlexVR

Вот именно что легаси. На ARM нормально приготовленные дистры 4-5 секунд стартуют.

steemandlinux ★★★★★
()
Ответ на: комментарий от yax123

Ну так и сделай слойку из контейнеров, потом в genimage их. Меняешь базовый образ, меняются все образы при пересборке. А если оставить плейсхолдеры на FROM, то ещё проще всё.

steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от aol

Ну то есть фактически «закат солнца в ручную».

Ну тоже вариант.

Хотя мне бы хотелось иметь вариант когда выкачал из репы все зависимости (какой лбраз из чего должен собираться), дальше одной командой build all. Выкачались все исходники нужных версий. Собрался весь тулинг, собрались все бинарные пакеты сложились в репу. Потом из этих бинарей собрались образы. И при повторном запуске собиралось и пересобиралось только то что прилетело по зависимостям.

Мне нужеа именно такая система. Я пишу правила, а она всё это компиляет и собирает. Без эталонных дистров и дублирования.

Yocto пока ближе всего как мне кажется, хотя и придется poky выкинуть.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

фактически «закат солнца в ручную».

в каком именно месте он «в ручную», хотелось бы полюбопытствовать?

компоненты собираются в сиае своих проектов, финальные образы - в release engineering пайплайнах.

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

Да, у нас разные каналы поставок и не всё идет в виде прошивок. Что-то ставится на деб-подобные дистры просто апт-ом.

Хотя мне бы хотелось иметь вариант когда выкачал из репы все зависимости (какой лбраз из чего должен собираться), дальше одной командой build all. Выкачались все исходники нужных версий. Собрался весь тулинг, собрались все бинарные пакеты сложились в репу.

Ну, кхе, это сиай называется. Кнопку «сделать всё за2.7бись» каждый пилит себе сам.

Без эталонных дистров

Не понимаю, о чем это. Мы собираем в целевых системах. Что-то кроссом, что-то нативно, так как не каждый вендор предоставляет кросс-компилятор, увы.

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)

Мне нравится pbuilder, но тут скорее всего не подойдет, задача немного другая. Может взять pbuilder за основу и написать свой велосипед для задачи как вариант. Но конечно сначала следует изучить как обычно решаются такие задачи для конкретного стака и железок, потому уже смотреть.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)
Ответ на: комментарий от yax123

Эммм а зачем выкачивать все из репы? Сборкой пусть специально обученые сервера занимаются (и всяким build all). И даже выкачивать образы не обязательно, пусть сразу на железку заливаются (ну а чо).

irton ★★★★★
()
Ответ на: комментарий от irton

Чего вы такие буквальные?

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

yax123 ★★★★★
() автор топика

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

Много лет работаю с ектой и моё мнение, что она больше проблем создаёт, чем решает, слишком уж она большая. Когда иногда возвращаюсь к старым железка с билдрутом - плачу от счастья, насколько же раньше все было просто, понятно, разумно

Мне кажется тебе надо использовать билдрут для сборок конечных прошивок и немного баш-магии для того чтоб реализовать именно то, что ты хочешь, а не подстраиваться под рамки готового.

Описанная задача звучит несложно, ты явно быстрее на баше накидаешь, чем с ектой просто разберёшься, это она только выглядит просто, там нюансов тысячи

pihter ★★★★★
()
Ответ на: комментарий от yax123

Есть ли возможность локально писать код, собирать и быстро проверять создавая прошивку и загружать ее в железо?

Да, там (в екте) есть воркспейсы для этого

При этом не копируя на локалхост миллиард файлов системы сборки.

Тут тебя ждёт ад)

pihter ★★★★★
()

В Yocto достаточно один разобраться и потом становится проще, в принципе все то же самое, как и при разработке обычного дистрибутива, разница только в том что он кросскомпилирует по умолчанию.

Buildroot же портянка из плохо читаемых мейкфайлов.

a1ba ★★★★
()
Ответ на: комментарий от yax123

прошу извинить, мой опыт небольшой в плане чтоб под сотню железок делать, но задача интересная.

irton ★★★★★
()
Ответ на: комментарий от irton

Можно не извиняться. Мы тут идеи фонтанируем, а не пытаемся всем понравится.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от AlexVR

Можно в 2-х словах, почему пример из yocto - poky for x86 занимает на диске 300гб?

yax123 ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.