Мы используем Платформа Variscite VAR-SOM-AM33 для нашего проекта, а программная платформа основана на OpenEmbedded / Yocto.

Чтобы оборудование работало с текущим программным обеспечением, устройства подключены к Интернету. До сих пор мы следовали рецептам оригинального оборудования и генерировали ipk и применяли обновления программного обеспечения через opkg.

Однако процесс неудовлетворителен, так как некоторые рецепты написаны плохо (не удается удалить / установить в процессе обновления). Какие надежные методики / решения доступны для систем на базе OE / Yocto?

Заранее спасибо.

2
Charles 13 Май 2016 в 04:14

6 ответов

Лучший ответ

Я работаю над уровнем метаданных для интеграции Software Updater (swupd) из Clear Linux с Yocto Project / OpenEmbedded Core.

Swupd выполняет все обновления ОС, а не обновления на основе пакетов, используя двоичные дельты, чтобы обновлять только те файлы, которые изменяются, и делать это эффективно.

Недавно я написал некоторую документацию (в файле docs / Guide.md в репозитории meta-swupd) об использовании «Clear Linux Way» для использования meta-swupd из дистрибутива на основе OE / YP. Викифицированная версия этого руководства, включая ссылку на репозиторий слоев git, доступна в вики проекта Yocto: https://wiki.yoctoproject.org/wiki/Meta-swupd

У меня также есть образец слоя на Github, который демонстрирует использование слоя (это также уровень дистрибутива, с которым я тестирую большую часть мета-swupd): https://github.com/incandescant/meta-myhouse

5
joshuagl 13 Май 2016 в 08:02

Я хотел бы добавить SWUpdate в список пакетов, которые вам следует рассмотреть. Это было рекомендовано Консулко в статье 2016 г. Группа для автомобильной версии Linux. В этом документе упоминается несколько других вариантов и представлен анализ различных инструментов, так что, вероятно, стоит прочитать. Цитата из статьи:

Мы рекомендуем использовать в эталонной стратегии обновления программного обеспечения AGL SWUpdate в конфигурации с двумя копиями и интегрировать поддержку OSTree. Это позволяет выполнить восстановление из поврежденного раздела в исключительном случае, но также оптимизирует общий случай, когда небольшие инкрементные обновления можно быстро применить или откатить по мере необходимости, чтобы [соответствовать] политике OEM.

Я не полностью согласен с бумагой. Например, они списали Mender.io, потому что ему не хватает поддержки сообщества, но IMO группа Linux автомобильного уровня достаточно влиятельна, чтобы создать популярность с нуля. Тем не менее, это хорошая статья, и то, что они остановились на SWUpdate, меня заинтересовало. Я уже склонялся к этому, потому что автор, sbabic, участвует в разработке программного обеспечения U-Boot, и мы используем U -Загрузка для записи новых изображений в наше устройство.

На данный момент меня не устраивают все текущие параметры, но в основном потому, что мне нужны дополнительные функции. Я, вероятно, остановлюсь на индивидуальной системе, которая включает один или несколько из вышеупомянутых пакетов. К сожалению, это не тот однозначный ответ, который предпочитает SO, но я надеюсь, что он был полезен.

6
William Dye 14 Апр 2017 в 23:14

Что касается mender.io, я недавно говорил с ними об их обновлении с открытым исходным кодом.

В настоящее время они уже разработали свою клиентскую часть и работают на стороне сервера. Они используют HTTP и JSON. Это их git, на данный момент он поддерживает только Beaglebone и QEMU.

Mender.io работает следующим образом: у них будут одни данные о сохранении и uboot. и 2 rootfs (активный и резервный) для обновления. Итак, когда на сервере есть обновление, пользователи будут уведомлены о необходимости его загрузить. Дайте команду обновления mender -rootfs image. И если обновление прошло успешно, пользователь дает еще одну команду mender -commit. Если mender -commit нет, rootfs будет откат к предыдущим rootfs при следующей перезагрузке. Mender в настоящее время поддерживает только обновление ядра и rootfs.

Основная роль mender.io заключается в обеспечении возможности восстановления процесса массового распределенного обновления образов после ошибок. Что касается сервера, то mender.io разработал сервер управления для массово распределенных устройств с использованием UUID.

Не рекламировать, но попробуйте mender.io и оставьте отзыв, чтобы программное обеспечение стало более зрелым.

Mender Введение pdf

5
Charles C. 13 Май 2016 в 21:23

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

Альтернативой является использование обновлений на основе образов. Либо с полными изображениями, см., Например, обсуждение на Stackoverflow: Embedded Механизм Linux для развертывания обновлений прошивки или swupd

Примечание: я отвлекся, когда писал этот ответ, поэтому посмотрите ответ от joshuagi; он объясняет намного больше swupd.

3
Community 23 Май 2017 в 12:02

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

Кроме того, есть обновления изображений, такие как swupd (упомянутый выше и swupdate, описанный по адресу: https: // sbabic. github.io/swupdate/swupdate.html

3
balister 13 Май 2016 в 12:23

мета-обновление обеспечивает поддержку OSTree - обновления систем OE.

OSTree интересен тем, что обеспечивает промежуточное звено между обновлениями полного образа (которые большие и их сложно правильно обработать) и обновлениями на основе пакетов (которые сложно сделать надежными). Он имеет объектное представление корневой файловой системы, похожее на git, и использует chroot и жесткие ссылки для атомарного переключения между образами файловой системы.

(Раскрытие информации: я участвую в мета-обновлении)

0
Phil 12 Сен 2017 в 11:35