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

 
 
> Обновление прошивки через эзернет, Как сделать удобнее для пользователя, какой протокол?
Сергей Борщ
сообщение Aug 26 2015, 09:25
Сообщение #1


Гуру
******

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



Приветствую всех.

Делаю устройство, у которого основным каналом общения с пользователем будет эзернет. Не могу определиться, как лучше сделать обновление программы в нем. В устройстве есть еще RS-485, CAN, можно даже подцепиться к UART, но подключение компа к этим интерфейсам для обновления прошивки требует каких-то специальных переходников. В моем же случае устройство берет в руки обычный пользователь, у которого никаких переходников нет да и вообще не хотелось бы для обновления делать какие-то дополнительные подключения. Считаем, что устройство установлено в месте, доступ к которому затруднен.
В предельном случае пользователь берет в руки устройство, в котором прошит только загрузчик, т.е. приложение в процессе обновления может и не участвовать (чуть ниже распишу). Оно может сохранить где-то свои сетевые настройки, при отсутствии которых загрузчик берет какой-то статический адрес по умолчанию, скажем 192.168.3.2 и я могу научить пользователя настроить свой комп для связи с этим адресом. А что дальше? Как красивее и удобнее организовать сам процесс обновления? Я делал множество устройств с обновлением через UART, RS-485 и USB (VCP), там у меня все давно отработано, но мне никогда не приходилось до этого делать обновления по эзернету. Вся имеющаяся у меня информация об обновлении через эзернет - это слухи с форумов. Поэтому надеюсь, что более опытные в этом вопросе коллеги направят меня в сторону нужного решения.

Начну с того, чего я не хочу:
1) я не хочу чтобы это устройство лазило куда-то за обновлениями само. Во-первых потому, что у меня нет сайта, куда я мог бы выкладывать обновления и я не имею желания такой сайт делать, поддерживать и содержать. Во-вторых, устройство может находиться в локальной сети не имеющей выхода в интернет. В-третьих - человек должен сам решать когда и, главное, на какую версию обновляться.
2) я не хочу, чтобы пользователю для обновления нужно было на свой компьютер устанавливать какой-то дополнительный сервер или программу-клиента, потому что неизвестно, какая ОС стоит у пользователя и найдется ли бесплатная программа под эту ОС. Тем более не хотелось бы писать никакую программу для компьютерной стороны. У всех есть браузер и хотелось бы ограничиться его возможностями.

Теперь чего хочу:
1) все это должно уместиться в первые сектора STM32F4xx, максимум 48К, поэтому полноценный сайт с апачем или полноценный ФТП-сервер развернуть там не удастся. Хотелось бы, чтобы пользователь попадал на страничку "бла-бла-бла, текущая версия такая-то, нажмите эту кнопку, чтобы выбрать у себя на компе файл обновления", а дальше как тут на форуме при прикреплении файлов к сообщению.

2) Запуск процесса обновления чаще всего будет происходить из работающего приложения, но при отсутсвии приложения (после сбоя обновления или сразу после производства) точно такой же запуск должен быть возможен и средствами самого загрузчика. Из этого вытекает, что загрузчик должен содержать весь минимально необходимый функционал, т.е. быть способным показать пользователю веб-страницу обновления.

3) Чтобы прошивка происходила в процессе передачи файла, то есть чтобы пользователь имел обратную связь и наблюдал на экране какую-то полосу с процентами. Поэтому не хочу, чтобы прошивка сначала сохранялась где-то, а потом загрузчик молча переписывал ее собствено в память контроллера.

4) Я пока очень смутно представляю, как работают веб-морды. Хочу разделить процесс выбора файла и процесс его передачи, т.е. чтобы вот эту страницу выбора файла мог показывать как загрузчик, так и приложение(пункт 1 хотелок), а после выбора файла посылался бы какой-то сигнал серверу, соединение бы закрывалось, контроллер сбрасывался, попадал в загрузчик в режим обновления и уже загрузчик ждал бы нового соединения от браузера с передачей собственно содержимого файла.

Вот такие вот у меня мысли. Странного ли я хочу? Какие еще варианты обновления вы встречали и находили удобными (мне очень хочется, чтобы процесс обновления был удобным). Что еще посоветуете, что раскритикуете?

*********
На борту есть еще SD-карта. Можно было бы создать в ней отдельную директорию, в которую пользователь клал бы свежую прошивку. Класть можно как на компе со считываетем SD-карт, так и через веб-морду в основном приложении. И загрузчик вынимал бы версию прошивки из имен файлов в этой папке, находил самую свежую, сравнивал с текущей и при несовпадении переписывал бы приложение из этого файла. Откат на предыдущую версию сводится к удалению файла самой последней версии и перезагрузке.

Вроде все выглядит достаточно красиво и этот вариант был бы, наверное, гораздо проще в реализации, но мне он не нравится по следующим причинам:
1) В процессе обновления нет обратной связи. Допустим, не понравился чем-то файл обновления загрузчику, а сказать чем именно не понравился ему некуда.
2) Для записи самой первой прошивки на карточку надо иметь считыватель.

********
Спасибо форуму. Пока формулировал это сообщение, хотелки стали понятны самому.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_pv
сообщение Aug 26 2015, 13:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



я так понимаю основная проблема со статическим адресом, например 192.168.2.3, это то, что у пользователя может оказаться другая подсеть, например 10.0.0.0 или с нормальными адресами, соответственно при попытке обратиться к 192.168.2.3 пакеты будут отправлены не устройству, а в шлюз, который дальше их отправит хз куда.
но это вроде как лечится единственной командой route add без изменения каких-либо других настроек сети.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 26 2015, 16:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (_pv @ Aug 26 2015, 16:15) *
но это вроде как лечится единственной командой route add без изменения каких-либо других настроек сети.

Отроутить, конечно, можно куда угодно и соответственно в желаемый интерфейс улетит. Но вот обратно уже ничего не дойдет.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 26 2015, 19:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(zltigo @ Aug 26 2015, 23:00) *
Отроутить, конечно, можно куда угодно и соответственно в желаемый интерфейс улетит. Но вот обратно уже ничего не дойдет.

ну если уж у пользователя получилось отроутить "туда", то уж отроутить обратно при получении пакета из не своей подсети и не с мак адреса шлюза у Сергея думаю тем более получится.

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

хотя конечно не особо это упрощает по сравнению с тем чтобы заставлять пользователей настройки сети менять.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 26 2015, 20:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (_pv @ Aug 26 2015, 22:59) *
и роутить там собственно нечего - тупо отвечай туда откуда прилетело.

Только вот прилетит с IP, на который отправивший его не среагирует. Тупо НЕ его адрес. Вот такая печалька. Вот если-бы устройство могло ответить НЕ тупо, как Вы решили, а на реальный адрес отправившего, КАК НА РОУТЕР, тогда да. Но ведь адрес роутера, увы, у устройства другой - забитый от фонаря.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 27 2015, 07:14
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(zltigo @ Aug 27 2015, 03:10) *
Только вот прилетит с IP, на который отправивший его не среагирует. Тупо НЕ его адрес. Вот такая печалька. Вот если-бы устройство могло ответить НЕ тупо, как Вы решили, а на реальный адрес отправившего, КАК НА РОУТЕР, тогда да. Но ведь адрес роутера, увы, у устройства другой - забитый от фонаря.

есть железка с зашитым адресом 192.168.2.3, которую воткнули в локальную сеть 172.16.
ПК, после route add ..., будет слать пакеты для 192.168.2.3 непосредстренно ему, а не в шлюз.
если устройство временно, на время начального конфигурирования, забъёт на маршрутизацию, и получив пакет от ПК 172.16.100.100 ему же обратно и ответит, с dst mac адресом ПК, а не шлюза, ПК разве этот ответ проигнорирует? ip - его, mac - его, то что src ip немного странный - так вроде без разницы, тем более в таблице маршрутизации он есть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 27 2015, 08:46
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (_pv @ Aug 27 2015, 10:14) *
есть железка с зашитым адресом 192.168.2.3, которую воткнули в локальную сеть 172.16.
ПК, после route add ..., будет слать пакеты для 192.168.2.3 непосредстренно ему, а не в шлюз.

Да. Для определенности - если указать роутинг подсети 192.168.2.xxx на IP адрес своего интерфейса (только надо его узнать предварительно ), то действительно будет просто улетать на этот интерфейс.
QUOTE
если устройство временно, на время начального конфигурирования, забъёт на маршрутизацию

А вот это уже дополнительное условие в Вами ранее озвученному sm.gif. Да, забить на маршрутизацию можно и даже легко - маска 0.0.0.0 и весь мир у твоих ног sm.gif. Тогда все будет работать, именно, как Вы описываете. Действительно самый минималистичный вариант вмешательства.
Остается только еще глянуть позволит-ли route поставить все, как хочется - в WIN постарше оно, помнится, капризное было sad.gif
QUOTE (Сергей Борщ @ Aug 27 2015, 10:11) *
Подключение к нему не сложнее подклюения к свежекупленному домашнему маршрутизатору. Любого пользователя можно отослать к инструкции от любого маршрутизатора. Все, на этом вопрос сетевых настроек предлагаю свернуть.

Ну вот, самое интерсное и полезное предложил похерить sad.gif. На самом деле все остальное (из скольки букв в имени протокол выбрать, ставить-ли для этого "линукс" sm.gif или обойтись портированием MQX sm.gif ...)уже есть рутинные детали реализации. А вот как НЕ выполнять дурацкие действия, пусть даже их "все выпоняют", это действительно интересно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 27 2015, 09:43
Сообщение #8


Гуру
******

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



Цитата(zltigo @ Aug 27 2015, 11:46) *
А вот как НЕ выполнять дурацкие действия, пусть даже их "все выпоняют", это действительно интересно.
Кому как. Мне проще сделать "как у всех", чем искать или писать и поддерживать еще какую-то хитрую утилиту. Причем обычный пользователь будет видеть это именно как "сделано черз Ж", потому что "не как у всех".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 21 2015, 12:18
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Aug 27 2015, 12:43) *
Кому как. Мне проще сделать "как у всех", чем искать или писать и поддерживать еще какую-то хитрую утилиту. Причем обычный пользователь будет видеть это именно как "сделано черз Ж", потому что "не как у всех".

Делал по UDP
Белый сервак плюс серые клиенты.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 21 2015, 12:23
Сообщение #10


Гуру
******

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



Цитата(_Pasha @ Oct 21 2015, 15:18) *
Белый сервак плюс серые клиенты.
А теперь для особо одаренных раскройте эти термины, пожалуйста.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Сергей Борщ   Обновление прошивки через эзернет   Aug 26 2015, 09:25
- - Lotor   Цитата(Сергей Борщ @ Aug 26 2015, 12:25) ...   Aug 26 2015, 09:36
- - _pv   ни разу не знаток html но страничка с кнопкой доба...   Aug 26 2015, 09:53
- - AlexandrY   Цитата(Сергей Борщ @ Aug 26 2015, 12:25) ...   Aug 26 2015, 10:02
|- - zltigo   QUOTE (AlexandrY @ Aug 26 2015, 13:02) Эт...   Aug 26 2015, 10:39
|- - AlexandrY   Цитата(zltigo @ Aug 26 2015, 13:39) Незач...   Aug 26 2015, 10:43
|- - zltigo   QUOTE (AlexandrY @ Aug 26 2015, 13:43) Ис...   Aug 26 2015, 11:00
|- - AlexandrY   Цитата(zltigo @ Aug 26 2015, 14:00) Не сп...   Aug 26 2015, 11:05
- - SSerge   У ST есть пара примеров в обычном для них стиле: L...   Aug 26 2015, 10:16
- - Aner   48 К памяти хватит, ... сделано, работает. Проблем...   Aug 26 2015, 10:25
|- - AlexandrY   Цитата(Aner @ Aug 26 2015, 13:25) 48 К па...   Aug 26 2015, 10:35
- - zltigo   QUOTE (Сергей Борщ @ Aug 26 2015, 12:25) ...   Aug 26 2015, 10:28
|- - Aner   QUOTE (zltigo @ Aug 26 2015, 13:28) Самое...   Aug 26 2015, 11:10
|- - zltigo   QUOTE (Aner @ Aug 26 2015, 14:10) TFTP бе...   Aug 26 2015, 11:15
- - Сергей Борщ   не-не-не, не все так плохо. DHCP будет, но если у ...   Aug 26 2015, 11:33
|- - zltigo   QUOTE (Сергей Борщ @ Aug 26 2015, 14:27) ...   Aug 26 2015, 11:42
|- - AlexandrY   Цитата(Сергей Борщ @ Aug 26 2015, 14:27) ...   Aug 26 2015, 11:42
||- - zltigo   QUOTE (AlexandrY @ Aug 26 2015, 14:42) До...   Aug 26 2015, 12:01
|- - zltigo   QUOTE (Сергей Борщ @ Aug 26 2015, 14:33) ...   Aug 26 2015, 11:50
|- - AlexandrY   По нынешним временам проще Wi-Fi использовать. Уви...   Aug 26 2015, 11:59
|- - zltigo   QUOTE (Сергей Борщ @ Aug 27 2015, 12:43) ...   Aug 27 2015, 09:57
- - Quasar   Что-то вы тут все усложняете со своими IP адресами...   Aug 26 2015, 18:07
|- - zltigo   QUOTE (Quasar @ Aug 26 2015, 21:07) Что-т...   Aug 26 2015, 18:42
||- - Quasar   Цитата(zltigo @ Aug 26 2015, 21:42) Что-т...   Aug 26 2015, 20:26
||- - zltigo   QUOTE (Quasar @ Aug 26 2015, 23:26) Поэто...   Aug 26 2015, 20:40
|- - AlexandrY   Цитата(Quasar @ Aug 26 2015, 21:07) Поско...   Aug 27 2015, 04:37
|- - Quasar   Цитата(AlexandrY @ Aug 27 2015, 07:37) Да...   Aug 27 2015, 05:37
|- - AlexandrY   Цитата(Quasar @ Aug 27 2015, 08:37) Но эт...   Aug 27 2015, 05:59
||- - zltigo   QUOTE (AlexandrY @ Aug 27 2015, 08:59) Ко...   Aug 27 2015, 06:14
||- - Quasar   Цитата(AlexandrY @ Aug 27 2015, 08:59) А,...   Aug 27 2015, 06:33
|- - Aner   QUOTE (Quasar @ Aug 27 2015, 08:37) ... н...   Aug 27 2015, 07:17
- - HardEgor   Цитата(Сергей Борщ @ Aug 26 2015, 15:25) ...   Aug 27 2015, 03:24
|- - Сергей Борщ   Цитата(HardEgor @ Aug 27 2015, 06:24) У в...   Aug 27 2015, 07:11
|- - AlexandrY   Цитата(Сергей Борщ @ Aug 27 2015, 10:11) ...   Aug 27 2015, 07:43
||- - Quasar   Цитата(AlexandrY @ Aug 27 2015, 10:43) О,...   Aug 27 2015, 08:47
||- - AlexandrY   Цитата(Quasar @ Aug 27 2015, 11:47) То ес...   Aug 27 2015, 10:31
||- - Quasar   Цитата(AlexandrY @ Aug 27 2015, 13:31) По...   Aug 27 2015, 11:11
||- - AlexandrY   Цитата(Quasar @ Aug 27 2015, 14:11) Ну да...   Aug 27 2015, 11:21
||- - Quasar   Цитата(AlexandrY @ Aug 27 2015, 14:21) Эт...   Aug 27 2015, 11:51
||- - zltigo   QUOTE (AlexandrY @ Aug 27 2015, 14:21) Эт...   Aug 27 2015, 12:12
|- - HardEgor   Цитата(Сергей Борщ @ Aug 27 2015, 13:11) ...   Aug 27 2015, 10:42
|- - A. Fig Lee   Цитата(Сергей Борщ @ Aug 27 2015, 03:11) ...   Aug 27 2015, 12:38
- - Mahagam   делал подобное. только у меня лимит был в 64к кажи...   Aug 27 2015, 11:19
- - Quasar   Цитата(Сергей Борщ @ Aug 26 2015, 12:25) ...   Aug 27 2015, 13:01
|- - AlexandrY   Кста, только что сделал Telnet по WiFi вот для это...   Aug 27 2015, 14:05
|- - zltigo   QUOTE (AlexandrY @ Aug 27 2015, 17:05) Во...   Aug 27 2015, 14:22
- - _Pasha   Сервер обновлений с белым ip На нем присутствует д...   Oct 21 2015, 13:22
- - AlexandrY   Цитата(_Pasha @ Oct 21 2015, 16:22) Серве...   Oct 21 2015, 13:59
|- - _Pasha   Цитата(AlexandrY @ Oct 21 2015, 16:59) У....   Oct 21 2015, 14:03
- - Quasar   Цитата(_Pasha @ Oct 21 2015, 16:22) Поско...   Oct 25 2015, 21:23


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

 


RSS Текстовая версия Сейчас: 17th August 2025 - 11:39
Рейтинг@Mail.ru


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