Я пытаюсь придумать лучший способ выполнить обновление ПО до встроенной системы, над которой я работаю.Продукт, на котором работает система, может быть развернут в удаленных местах, поэтому он должен быть с некоторым механизмом для обработки сбоев в процедуре обновления программного обеспечения.
Я расскажу о первом этапе процесса загрузки.Я думаю, что хороший дизайн для этого этапа также актуален для следующих этапов.
Структура mmc выглядит следующим образом: система запускается с раздела, имеющего 4 копии «preloader» иU-boot на вершине.Система пытается проверить первый предварительный загрузчик, если он законно запускает его.Предварительный загрузчик выполняет некоторые калибровки для HW и переходит к предварительно определенному адресу, где находится U-boot.С этого момента u-boot берет на себя управление, и он отвечает за загрузку дизайна HW и ядра linux.
Как я уже говорил, в предзагрузчике есть механизм, разработанный производителем микросхем для проверки правильности и обработки ошибок (еслиповрежден первый прелоадер, попробуйте проверить следующий ...).
Мне нужен механизм для работы с поврежденной загрузкой.Чтобы быть более точным, полное обновление ПО включает в себя обновление U-boot, и если система внезапно выключается, когда копируется новый u-boot ... "Хьюстон, у нас проблема".
Я думалвозможно добавить заголовок и нижний колонтитул в U-boot.Верхний колонтитул будет содержать размер U-boot, а нижний колонтитул будет содержать некоторое слово проверки.Я также добавлю простой код, назовем его «код проверки», который читает заголовок u-boot и проверяет, содержит ли нижний колонтитул правильное слово проверки.Этот код никогда не меняется.Я также добавлю «аварийную загрузку» в раздел, который также никогда не менялся.
Новый поток будет следующим: предварительный загрузчик загружает следующий этап с того же адреса, что и раньше, но на этот раз он загружает новый «код проверки». Код проверки вычисляет местоположение нижнего колонтитула u-boot из заголовка.и проверьте слово проверки.Если все идет хорошо, начинайте загрузку u-boot, а если нет - загружайте «аварийный u-boot».
Я никогда не проектировал такой механизм, поэтому я не знаю, хорошая моя идея или очень плохаяодин.
спасибо.