|
STM32: загрузка загрузчика, как обновить сам бутлоадер без программатора |
|
|
|
Jun 7 2016, 03:04
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(aaarrr @ Jun 7 2016, 04:50)  "Нижний" загрузчик пишется один раз и никогда не обновляется. Можно и без этого ограничения обойтись. Очевидно имеется в виду, что в составе устройства имеется некое устройство хранения (УХ) (файловая система или просто например SPI-флешка). Основной бутлоадер (ОБ) сканирует УХ: 1. Если обнаруживает новое рабочее ПО, записывает его в область рабочего ПО флешь программ. 2. Если обнаруживает новый ОБ, то ищет на этом же УХ вспомогательный бутлоадер (ВБ) (скомпилённый для выполнения в области рабочего ПО флешь программ). Записывает ВБ в область рабочего ПО флешь программ. Передаёт ему управление. ВБ сканирует УХ, обнаружив новый ОБ, записывает его в область ОБ флешь программ и передаёт ему управление. Единственный минус здесь - такое обновление ОБ небезопасно.
|
|
|
|
|
Jun 7 2016, 10:24
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Спасибо, буду думать. несрочно, так что еще и потестирую. Да, в системе есть SD-карточка, на которую файл прошивки попадает разными путями. Файл уже содержит необходимые чексуммы, то есть его валидность проверяется. И в системе есть резервное питание, то есть вероятность выключения питания во время такого обновления минимальна. Но таки да, процесс небезопасный, и хочется уменьшить вероятность сбоя. Я еще думал про второй (вспомогательный) бутлоадер, который просто является частью основной программы и используется только для обновления основного бутлоадера. Задача защиты от чтения не стоит, это не ширпотреб (пока что
|
|
|
|
|
Jun 7 2016, 13:35
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 13-09-12
Пользователь №: 73 530

|
Загрузчик может и сам себя обновить. Правда, возрастает риск, ведь при неудачном обновлении загрузчик сам себя и поломает же. Однако, у нас обновление загрузчика это чисто технологическая задача, не для конечных пользователей, поэтому мы спокойно используем именно этот вариант. Если даже что-то пойдет не так - то рядом будут специалисты, которые все восстановят. Пока сбоев не было.
|
|
|
|
|
Jun 7 2016, 17:41
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(menzoda @ Jun 7 2016, 16:35)  Загрузчик может и сам себя обновить. Правда, возрастает риск, ведь при неудачном обновлении загрузчик сам себя и поломает же. Однако, у нас обновление загрузчика это чисто технологическая задача, не для конечных пользователей, поэтому мы спокойно используем именно этот вариант. Если даже что-то пойдет не так - то рядом будут специалисты, которые все восстановят. Пока сбоев не было. Сам себя - это как? перемещается, например, в RAM (или, как писали выше, в зарезервированную область флэш), и исполняется отсюда, ну и пишет все что хочет в област загрузчика ? Сам себя обновить- несколько стремно, именно для удаленного обновления задумывается. Локально можно и программатор подключить (хотя и не так удабно). И нужно еще посмотреть почему такое "самопереписывание" считается менее надежным- не совсем понятно, какие дополнительно факторы действуют, по сравнению с вариантом "два загрузчика". Ну и, по-моему, абсолютно безопасного варианта не бывает, я за него и не борюсь.
|
|
|
|
|
Jun 8 2016, 04:18
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Ruslan1 @ Jun 7 2016, 23:41)  И нужно еще посмотреть почему такое "самопереписывание" считается менее надежным- не совсем понятно, какие дополнительно факторы действуют, по сравнению с вариантом "два загрузчика". Ну и, по-моему, абсолютно безопасного варианта не бывает, я за него и не борюсь. "самопереписывание" ненадёжно, потому что при этом по любому есть момент времени когда во флеш нет исправного загрузчика. А МК всегда стартует с одного и того же адреса. Абсолютно безопасный вариант - необновляемый загрузчик. При этом основное ПО будет обновляться абсолютно безопасно. Мы у себя в изделиях именно такой вариант и применяем, так как нам необходимо обновление ПО на объектах заказчика, без возможности демонтажа или подключения отладчика "на горячую". Цитата(Kabdim @ Jun 8 2016, 09:16)  Безопасный вариант уже был предложен - трёхуровневый(минимальный бутлоадер, полноценный, основная прошивка), но видимо всем лениво его делать ради фикса редкого шанса испортить загрузчиком сам загрузчик. Для себя я бы сделал, но вот лишней страницы во флеше уже нет. Какой смысл в этой 3х-уровневости? Всё равно остаётся необновляемый загрузчик. Зачем нужна ещё одна прослойка между первоначальным загрузчиком и основным ПО? Чтобы создать себе дополнительную работу? Достаточно одного необновляемого загрузчика и основного ПО.
|
|
|
|
|
Jun 8 2016, 06:16
|

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

|
QUOTE (ViKo @ Jun 8 2016, 08:43)  Поскольку функция загрузчика очевидна и однозначна, то дистанционно обновлять его не вижу необходимости. Он уже сделан и работает. На самом деле иногда (очень редко) такая необходимость возникает. У меня было дважды - первый раз придумали улучшение и для совместимости уже проданной аппаратуры с новыми прошивками пришлось постепенно отзывать проданное оборудование, второй раз сам был жутко удивлен, когда мой написанный в 2006 году загрузчик вдруг начал падать после смены компилятора (IAR->GCC) приложения. Да, в нем нашлась ошибка (отсутствие заглушки на spurious interrupt в LPC22xx), которая почему-то за 9 лет ни разу не вылезла с приложением, написанным под ИАРом, а его было выпущено более 40 версий. Зато с приложением, написанным под GCC - вылет в 100% случаев.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|