|
Обновление прошивки |
|
|
|
Jan 21 2016, 13:42
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891

|
Делаю бут, который будет обновлять прошивку с sd карты. Возникло пару вопросов, поэтому рассуждения вслух. Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. Собственно, читаю с карты этот бинарник, записал во флеш, хорошо бы его проверить, думаю использовать CRC. Еще хорошо бы знать отличается ли версия залитой прошивки, от той что на карте. Теперь, внимание вопрос, как вы бы делали это? Пока единственное решение - написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает.
|
|
|
|
|
Jan 21 2016, 13:52
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(data_stack @ Jan 21 2016, 16:42)  Делаю бут, который будет обновлять прошивку с sd карты. Возникло пару вопросов, поэтому рассуждения вслух. Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. Собственно, читаю с карты этот бинарник, записал во флеш, хорошо бы его проверить, думаю использовать CRC. Еще хорошо бы знать отличается ли версия залитой прошивки, от той что на карте. Теперь, внимание вопрос, как вы бы делали это? Пока единственное решение - написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает. Это все как бы само собой разумеется: 1) бин хоть какого размера, лишь бы во флеху вошел  Бут вы не переписываете, обновление с сд-карты, т.е. человеком. Если даже некорректно прочитается или запишется - оператор просто повторит перепрошивку. 2) CRC конечно надо, у меня была еще шифровка, поэтому и контрольная сумма уже подразумевалась. 3) проверить версию прошивки - пишите ее в начало заголовка, где CRC файла и пр... 4)"написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает." - кто это сказал???
|
|
|
|
|
Jan 21 2016, 13:57
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891

|
Просто столкнулся с этой проблемой впервые, поэтому и не знаю как сделать так чтобы не наступать на грабли. По правде смутила плата Nucleo, ей кидаешь bin на флешку без всяких оберток и вроде как все работает. Хотя конечно это не показатель.
|
|
|
|
|
Jan 21 2016, 14:14
|

Профессионал
    
Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143

|
Цитата(data_stack @ Jan 21 2016, 17:42)  Делаю бут, который будет обновлять прошивку с sd карты. ... Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. аналогичный проект: RTOS, SD+FatFS, AES-crypt, Heap заняло на LPC1778 34 878 bytes of readonly code memory 6 498 bytes of readonly data memory 12 769 bytes of readwrite data memory (+ 13 absolute) Цитата(data_stack @ Jan 21 2016, 17:42)  Еще хорошо бы знать отличается ли версия залитой прошивки, от той что на карте. Теперь, внимание вопрос, как вы бы делали это? Пока единственное решение - написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией почти что так. Утилита для ПК шифровала прошивку и генерировала CRC и на фтп выкладывалась прошивка и файл описания fw_uc.ini[uc] ver="2" file="fw151023.bin" crc32="12AB56EF"
--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
|
|
|
|
|
Jan 21 2016, 14:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(data_stack @ Jan 21 2016, 19:42)  Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. Собственно, читаю с карты этот бинарник, записал во флеш, хорошо бы его проверить, думаю использовать CRC. Непонятно зачем прошивку переписывать куда-то если она лежит на SD-карте? Бутлоадер может в любой момент считать с SD-карты любую её часть и, при необходимости, повторить процесс обновления, если по какой-то причине прошлый раз не удался. Или Вы боретесь с диким юзером, который выдёргивает карту во время прошивки? :-) Насчёт CRC - IAR прекрасно умеет считать CRC образа прошивки, зачем изобретать велосипед? Мы именно так и контролируем валидность прошивок.
|
|
|
|
|
Jan 21 2016, 15:04
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(jcxz @ Jan 21 2016, 17:37)  Непонятно зачем прошивку переписывать куда-то если она лежит на SD-карте? Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу. Цитата(jcxz @ Jan 21 2016, 17:37)  Насчёт CRC - IAR прекрасно умеет считать CRC образа прошивки, зачем изобретать велосипед? Мы именно так и контролируем валидность прошивок. А номер и дату сборки он умеет вставлять?
|
|
|
|
|
Jan 21 2016, 15:29
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(aaarrr @ Jan 21 2016, 21:04)  Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу. +1. То же так же делаю. Загрузчик работает только с сегментами памяти - он знает где лежит приложение, где лежит новая версия, где лежит резервная версия. Про всякие карты-интерфейсы он ничего не ведает. Умеет считать CRC, знает где расположена версия, дата и прочие атрибуты приложения. Цитата(aaarrr @ Jan 21 2016, 21:04)  А номер и дату сборки он умеет вставлять? Дату сборки в IAR, ровно как и в других компиляторах, можно вычислить по макросам _DATE_ и _TIME_. Номер сборки, похоже, только вручную...
--------------------
|
|
|
|
|
Jan 21 2016, 16:01
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(aaarrr @ Jan 21 2016, 21:04)  Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу. Это да, мы так у себя и делаем. Только автор писал, что у него бутлоадер читает SD-карту. Почему так сделано - другой вопрос, только в этом случае нет необходимости её куда-то переписывать - можно писать напрямую во флешь программ. Цитата(aaarrr @ Jan 21 2016, 21:04)  А номер и дату сборки он умеет вставлять? Про дату/номер Вам уже ответили, а номер сборки - ну хотя-бы формировать его bat-файлом, запускаемым из prebuild.
|
|
|
|
|
Jan 21 2016, 16:20
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(jcxz @ Jan 21 2016, 19:01)  Про дату/номер Вам уже ответили Нет, я же написал, что хочу дату в unix time. Законное желание, как мне кажется. Тут, на мой взгляд, дело такое: можно реализовать желания скриптами и внешним "велосипедом" (сторонним софтом), а можно накидать пару сотен строк своего. Скажем, программка, занимающаяся добавлением в прошивку CRC, времени и номера сборки с автоинкрементом (номер хранится в ini-файле), занимает менее 300 строк на "C" и без проблем собирается на любой системе.
|
|
|
|
|
Jan 23 2016, 13:20
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(aaarrr @ Jan 21 2016, 18:04)  Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу.
А номер и дату сборки он умеет вставлять? Че-то непонятно вообще, вы откуда грузить бинарь будете, с сд-карты, правильно? Тогда что значит "не надо будет знать ничего о SD-карте"?? А если копировать сначала в какую-то область флеш, а затем снова из нее в другую область? Какая-то дурь из разряда, если делать нечего, то... Так делают только для обновлений по сети, удаленно, на случай критического обрыва связи, у вас-то это зачем?  ЗЫ. Если уж есть такая большая вероятность, что зальют непойми, что, то делайте бэкап копию старой прошивки на карту, а потом прошивайте.
Сообщение отредактировал mantech - Jan 23 2016, 13:22
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|