189 похожих чатов

Добрый день! Есть девайс на stm32 c эзернетом и SPI флешкой.

На флешке храниться контент web сервера.
Задача сделать обновление прошивки + контента.
Как я это вижу.
Половина SPI флеша под web контент, другая - обновления прошивки.
Прошивка - монолитный образ где содержится бинарь и контент для web сервера.
Загружаю по HTTP этот образ, дальше ребут в бутлоадер где он уже делает все полезную работу.
Вопросы:
Как собрать такую прошивку, что бы не изобретать велосипед. Может есть уже какой-то готовый формат. Собираем на хосте и просто парсим в бутлодере?
Может я не туда думаю и надо делать по другому?

18 ответов

7 просмотров

1. Собираешь как обычную, только в линкерном файле правишь смещения по которым эта прошивка должна лежать во Flash. 2. Лучше собрать бинарь на хосте (если принципиален размер - можешь сжать простеньким алгоритмом, т.к. в прошивке бывает много 0хFF). 3. По-хорошему bootloader должен проверять целостность прошивки (и опционально цифровую подпись если используешь криптографию). Примеры bootloader с проверкой цифровой подписи есть у STM в пакете Secure Boot. Просто bootloader'ы для STM на любой вкус есть на Github. Еще нередко делают возможность отката к последней стабильной версии прошивки (т.е. на флешке лучше зарезервировать место для пары образов).

Andrey S
Там разве не внешняя флеш?

Да, но из внешней нужно во внутреннюю память всё равно копировать. XIP (execute in place) поддерживается только совместно с OCTO-/QSPI в старших семействах STM-ок.

Неплохой пример как сделано обновление прошивки есть в esp-idf https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/ota.html

Alexander
Да, но из внешней нужно во внутреннюю память всё р...

Мне кстати тоже загрузчик писать скоро

Andrey S
Мне кстати тоже загрузчик писать скоро

Не думаю что это доставит какие-то серьёзные проблемы. Пример переноса вектора прерываний и исполнения кода из произвольного места у STM есть. А дальше нужно накрутить свой функционал. Мы, например, проверяли причину предыдущей перезагрузки. Если это был WD и в течение небольшого количества времени произошло несколько перезагрузок - откатывали к предыдущей стабильной.

всмысле как? собираешь в bin и отправляешь. можно и в hex собрать и отправить, только в какомто месте на хосте или контроллере придется в бин перекодировать.

Alexander-Che Автор вопроса
Alexander
1. Собираешь как обычную, только в линкерном файле...

Как собрать файл обновления при условии что внутри кроме основной прошивки буду много кастомных файлов? Логично использовать для этого какую простую файловую систему, что бы потом потом бутлоадрер смог распарсить все это. Может уже есть готовые легкие либы для этого? Собственно в этом основной вопрос

Alexander-Che Автор вопроса
hardegor
всмысле как? собираешь в bin и отправляешь. можно ...

Кроме прошивки внутри должна быть еще куча файлов, как это все собрать?

Alexander Che
Кроме прошивки внутри должна быть еще куча файлов,...

А что за HTTP сервер? Вроде как обычно для таких приложений весь контент собирается утилитой в один большой массив и прикомпиливается к основной прошивке.

Alexander Che
Как собрать файл обновления при условии что внутри...

На SPI флешке легко собрать FATFS. А часть флешки ты резервируешь под буфер прошивки, которую собираешь как обычно - без затей

Alexander Che
Кроме прошивки внутри должна быть еще куча файлов,...

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

Alexander-Che Автор вопроса
Serg
А что за HTTP сервер? Вроде как обычно для таких п...

LWIP Кроме большого массива поддерживает и чтение с файловых систем

Alexander-Che Автор вопроса
Alexander
На SPI флешке легко собрать FATFS. А часть флешки ...

Я правильно понял идею отравлять образ прошивки в формате FatFs? Т.е собираем FatFs на компе с добавлением всех файлов и отправляем. (пока вопрос безопасности не обсуждается)

Alexander-Che Автор вопроса
hardegor
Ок, как отправляешь файл? Своей программой - тогда...

Окружение такое: есть файл прошивки и есть контент web сервера. Web сервер, естественно, только подгружает файлы с флеша и все. Естественно он ничего заранее о файлах. Я хочу завернуть это в единый файл (например FatFs), отправить на контроллер (через HTTP), потом все распарсить в бутлодере записать бинарь во флеш контроллера, а файлы web сервера в другую половину SPI флешки . (В случае FatFs просто монтировать файловую систему) Возможно я плохо объясняю что хочу, сорри

Alexander Che
Я правильно понял идею отравлять образ прошивки в ...

Можно и так. Тогда в качестве прошивки у тебя будет .bin файл

Alexander Che
Окружение такое: есть файл прошивки и есть контент...

а кто программер прошивки, он должен все это знать

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
Подскажите, а есть vault lite или ченить такое?) А то нужен вольт для похода в вольт, но весит он ~500 мб) как-то многовато для парочки запросов ))
Alexandr Orloff
17
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Карта сайта