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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Обновление прошивки
data_stack
сообщение Jan 21 2016, 13:42
Сообщение #1


Участник
*

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



Делаю бут, который будет обновлять прошивку с sd карты. Возникло пару вопросов, поэтому рассуждения вслух. Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. Собственно, читаю с карты этот бинарник, записал во флеш, хорошо бы его проверить, думаю использовать CRC. Еще хорошо бы знать отличается ли версия залитой прошивки, от той что на карте. Теперь, внимание вопрос, как вы бы делали это? Пока единственное решение - написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2016, 13:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(data_stack @ Jan 21 2016, 16:42) *
Пока единственное решение - написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает.

Я, например, именно так и делаю. Просто и удобно.
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 21 2016, 13:52
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



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


Это все как бы само собой разумеется:
1) бин хоть какого размера, лишь бы во флеху вошел biggrin.gif Бут вы не переписываете, обновление с сд-карты, т.е. человеком. Если даже некорректно прочитается или запишется - оператор просто повторит перепрошивку.

2) CRC конечно надо, у меня была еще шифровка, поэтому и контрольная сумма уже подразумевалась.

3) проверить версию прошивки - пишите ее в начало заголовка, где CRC файла и пр...

4)"написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает." - кто это сказал??? wacko.gif
Go to the top of the page
 
+Quote Post
data_stack
сообщение Jan 21 2016, 13:57
Сообщение #4


Участник
*

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



Просто столкнулся с этой проблемой впервые, поэтому и не знаю как сделать так чтобы не наступать на грабли. По правде смутила плата Nucleo, ей кидаешь bin на флешку без всяких оберток и вроде как все работает. Хотя конечно это не показатель.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 21 2016, 14:14
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 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 штук).
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 21 2016, 14:37
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(data_stack @ Jan 21 2016, 19:42) *
Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. Собственно, читаю с карты этот бинарник, записал во флеш, хорошо бы его проверить, думаю использовать CRC.

Непонятно зачем прошивку переписывать куда-то если она лежит на SD-карте? Бутлоадер может в любой момент считать с SD-карты любую её часть и, при необходимости, повторить процесс обновления, если по какой-то причине прошлый раз не удался.
Или Вы боретесь с диким юзером, который выдёргивает карту во время прошивки? :-)
Насчёт CRC - IAR прекрасно умеет считать CRC образа прошивки, зачем изобретать велосипед? Мы именно так и контролируем валидность прошивок.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2016, 15:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Jan 21 2016, 17:37) *
Непонятно зачем прошивку переписывать куда-то если она лежит на SD-карте?

Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу.

Цитата(jcxz @ Jan 21 2016, 17:37) *
Насчёт CRC - IAR прекрасно умеет считать CRC образа прошивки, зачем изобретать велосипед? Мы именно так и контролируем валидность прошивок.

А номер и дату сборки он умеет вставлять?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 21 2016, 15:29
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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_. Номер сборки, похоже, только вручную...


--------------------
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 21 2016, 15:34
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(prottoss @ Jan 21 2016, 18:29) *
Номер сборки, похоже, только вручную...

Номер сборки - это из каменного века, когда первобытные люди ещё не придумали системы контроля версий.
Ну и "вручную" - это же жесть. Такие дела автоматизируются. Makefile, скрипты там всякие...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2016, 15:44
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(prottoss @ Jan 21 2016, 18:29) *
Дату сборки в IAR, ровно как и в других компиляторах, можно вычислить по макросам _DATE_ и _TIME_.

А ежели я её захочу в unix time?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 21 2016, 16:00
Сообщение #11


Гуру
******

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



Цитата(aaarrr @ Jan 21 2016, 21:44) *
А ежели я её захочу в unix time?
Я ежели я захочу на лыжах с горки и на луну прямиком? ;-)


Цитата(scifi @ Jan 21 2016, 21:34) *
Номер сборки - это из каменного века, когда первобытные люди ещё не придумали системы контроля версий.
Ну и "вручную" - это же жесть. Такие дела автоматизируются. Makefile, скрипты там всякие...
Наверное Вы правы - я из каменного века sm.gif не пользуюсь этим. Архивирую рабочие версии с простым текстовым фалом где добавляю дату, что добавлено, что исправлено...


--------------------
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 21 2016, 16:01
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Jan 21 2016, 21:04) *
Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу.

Это да, мы так у себя и делаем. Только автор писал, что у него бутлоадер читает SD-карту. Почему так сделано - другой вопрос, только в этом случае нет необходимости её куда-то переписывать - можно писать напрямую во флешь программ.

Цитата(aaarrr @ Jan 21 2016, 21:04) *
А номер и дату сборки он умеет вставлять?

Про дату/номер Вам уже ответили, а номер сборки - ну хотя-бы формировать его bat-файлом, запускаемым из prebuild.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2016, 16:20
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Jan 21 2016, 19:01) *
Про дату/номер Вам уже ответили

Нет, я же написал, что хочу дату в unix time. Законное желание, как мне кажется.

Тут, на мой взгляд, дело такое: можно реализовать желания скриптами и внешним "велосипедом" (сторонним софтом), а можно накидать пару сотен строк своего.
Скажем, программка, занимающаяся добавлением в прошивку CRC, времени и номера сборки с автоинкрементом (номер хранится в ini-файле), занимает менее 300 строк на "C" и без проблем собирается на любой системе.
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 23 2016, 13:20
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Jan 21 2016, 18:04) *
Так загрузчику и не надо будет знать ничего о SD-карте - его дело проверить и скопировать прошивку из одной части флеш в другую. Получается очень простой и компактный бут без привязки к какому-либо внешнему железу.


А номер и дату сборки он умеет вставлять?


Че-то непонятно вообще, вы откуда грузить бинарь будете, с сд-карты, правильно? Тогда что значит "не надо будет знать ничего о SD-карте"??
А если копировать сначала в какую-то область флеш, а затем снова из нее в другую область? Какая-то дурь из разряда, если делать нечего, то...
Так делают только для обновлений по сети, удаленно, на случай критического обрыва связи, у вас-то это зачем? wacko.gif
ЗЫ. Если уж есть такая большая вероятность, что зальют непойми, что, то делайте бэкап копию старой прошивки на карту, а потом прошивайте.

Сообщение отредактировал mantech - Jan 23 2016, 13:22
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 23 2016, 13:31
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mantech @ Jan 23 2016, 16:20) *
Так делают только для обновлений по сети, удаленно, на случай критического обрыва связи, у вас-то это зачем? wacko.gif

Ну так я как раз по сети и обновляюсь. Вот только нужно это не "на случай критического обрыва связи", а чтобы загрузчик в сетевые дела не лез - не его ума это дело.
С SD-картой проще, но зачем плодить сущности? Основное приложение умеет работать с картой, вот пусть оно и отдувается.
Go to the top of the page
 
+Quote Post

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

 


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


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