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

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

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

18 ответов

10 просмотров

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
Окружение такое: есть файл прошивки и есть контент...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта