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

 
 
> Обновление прошивки через эзернет, Как сделать удобнее для пользователя, какой протокол?
Сергей Борщ
сообщение 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
Ответов
Quasar
сообщение Aug 26 2015, 18:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Что-то вы тут все усложняете со своими IP адресами. Железка до обновления на каком-то IP уже сидела? И, наверное, работала? Вот на нем пусть и обновляется. Первый запуск и первая прошивка она всегда с каким-то статическим заводским IP, и шьется на производстве специальным человеком. Задача как я понимаю обновить уже где-то работающую железку.
У меня все железки обновляются по ethernet'у. Там, где ресурсов мало, я использую загрузчик на uIP с TCP и http. http используется только как протокол передачи, а в качестве интерфейса обновления использовал самописную программу на Java. То есть, пользователь запускает программу обновления, вбивает в ней IP железки, которую хочет обновить и ждет секунд 30, прогресс бар в программе пишет сколько процентов загрузилось. Поскольку программа обновления написана на Java, она полностью кроссплатформенная, запускается на Win, Lin и Mac. Кто-то скажет, что у Java есть недостаток в виде java машины, но сейчас у многих производителей ПО Java популярна, и Java машина у многих пользователей уже есть, если же её нет, то не проблема её поставить в эпоху мегабитов и мегабайтов :-)
Второй вариант, который я использую, на жирных железках (с embedded linux), это использования Web морды, то есть, пользователь заходит на веб-морду, загружает через Web интерфейс прошивку, получив фаил прошивки, железка его расшифровывает, разархивирует, обновляет rootfs, обновляет ядро (если оно есть в прошивки), обновляет uboot (если оно есть в прошивки). При этом флеш разделена на две равные части, Раздел 1 и Раздел 2, если сейчас все ПО запущено с Раздела 1, то обновляется ПО на разделе 2 и наоборот. При перезагрузке, просто переключается загрузочный раздел со старого на вновь обновленный. Соответственно, если в процессе обновления произошел сбой, ничего не поломается, так как с текущим разделом никто, ничего не делал, железка как запускалась с него, так и будет это делать дальше.

Естественно, все прошивки я шифрую во избежание их модификации супостатами, но это уже другая тема :-)

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
- - _pv   я так понимаю основная проблема со статическим адр...   Aug 26 2015, 13:15
|- - zltigo   QUOTE (_pv @ Aug 26 2015, 16:15) но это в...   Aug 26 2015, 16:00
|- - _pv   Цитата(zltigo @ Aug 26 2015, 23:00) Отроу...   Aug 26 2015, 19:59
|- - zltigo   QUOTE (_pv @ Aug 26 2015, 22:59) и роутит...   Aug 26 2015, 20:10
|- - _pv   Цитата(zltigo @ Aug 27 2015, 03:10) Тольк...   Aug 27 2015, 07:14
|- - zltigo   QUOTE (_pv @ Aug 27 2015, 10:14) есть жел...   Aug 27 2015, 08:46
|- - Сергей Борщ   Цитата(zltigo @ Aug 27 2015, 11:46) А вот...   Aug 27 2015, 09:43
|- - zltigo   QUOTE (Сергей Борщ @ Aug 27 2015, 12:43) ...   Aug 27 2015, 09:57
|- - _Pasha   Цитата(Сергей Борщ @ Aug 27 2015, 12:43) ...   Oct 21 2015, 12:18
|- - Сергей Борщ   Цитата(_Pasha @ Oct 21 2015, 15:18) Белый...   Oct 21 2015, 12:23
|- - 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 Текстовая версия Сейчас: 20th August 2025 - 03:39
Рейтинг@Mail.ru


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