реклама на сайте
подробности

 
 
> Обновление прошивки в МК, Безопасное обновления программы МК.
owl
сообщение Sep 13 2013, 12:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 7-08-06
Из: Смоленск
Пользователь №: 19 370



Мысли в слух. Кто чего может прделожить интересного.
Имеем однокристалльный МК - как частность АРМ.
Программа МК содержит самописный загрузчик и собственно основную программу.
Собсвенно сами интересности:
1. Куча разнообразного железа, имеющего по сути дела одинаковый загрузчик.
2. Куча версий основных программ предназначенных для разных версий изделий, которые могут быть несовместимы с железом. (Более поздняя версия железа не подходит для старой прошивки и наоборот)
Ну и как следствие проблемы:
Залита не та версия программы - не в ту железку.

Если на своем рабочем месте - это легко исправимо. Загрузчик - защищает сам себя от перезаписи и все легко можно откатить.
А если где-то удаленно? И это делает человек очень далекий от железа и приборов перепрошивается много?
А если после выпуска прибора прошло пару лет?

Т.е. система должна быть дубовой и надежной))))

Дорогие форумчане, что можете предложить? Проблема ведь типовая?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Sep 13 2013, 12:44
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
owl
сообщение Sep 13 2013, 14:00
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 7-08-06
Из: Смоленск
Пользователь №: 19 370



Цитата(Сергей Борщ @ Sep 13 2013, 15:44) *
Если прошивку обновляет клиент - она должна быть криптована. Соответственно для несовместимых версий железа используются разные ключи криптования и "неправильная" прошивка не будет расшифрована и, следовательно, будет отвергнута загрузчиком. Другое дело, если основной функционал прошивок для разных модификаций железа сильно схож - тогда может иметь смысл хранить в области загрузчика идентификатор версии железа и в одной глобальной прошивке предусмотреть поддержку всех вариантов железа с ветвлением по прочитанному из загрузчика идентификатору. В этом случае загрузчик может в начале обновления получать информацию о версии прошивки и сравнивая с минимально допустимой версией отвергать либо принимать ее. Причем идентификатор версии имеет смысл заложить изначально, даже если не планируете ветвление по нему. Со временем захочется прийти к объединенному варианту прошивок, а все необходимое для поддержки такого варианта у вас уже будет даже в старых приборах.

Криптование прошивок пока не предуматривается.
Вопрос каким образом хранится ID железа? Загрузчик в МК имеет какую то версию и ID - или тип прибора . Т.е. - это по сути ID железа?
Загрузчик верхнего уровня - читает этот ID. - т.е. знает тип железа и модификацию загручика.
Остается записать файл основной программы. Причем сам файл по себе должен нести информацию о допустимости записи в тот или иной прибор.
Выбор типа файла как правило bin или hex???? -
Т.е. должны иметь служебные поля, позволяющие верхнему загрузчику по файлу определить тип железа для которого он предназначен. (ID, номер билда и т.п.)
И версии поддерживаемого железа????

Также возникает вопрос о функционале загручика нижнего уровня.
Его роль в защите от записи неправильной версии прошивки сводится лишь к выдаче собственного ID?
И уже загрузчик верхнего уровня принимает решение о продолжении работы.
Т.е. имеем набор загрузчиков под каждую уникальную версию железа.
Или как вариант - служебное поле во флеше загручика - но это лишние операции при начальном программировании загрузчика.

Цитата(mempfis_ @ Sep 13 2013, 16:22) *
При загрузке обновления загружались первые 1024 байта, расшифровывались и по определённой позиции читался идентификатор устройства. Если Идентификатор совпадал, то загрузка обновления

Т.е. программа верхнего уровня "парсила" заливаемую прошивку? (Как вариант искала текстовое описание устройства в прошивке)
Ну и разумеется заменила более ранюю версию у клиента?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 23:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016