Bootloader: различия между версиями

Материал из Wiren Board
 
(не показано 8 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{DISPLAYTITLE:Загрузчик периферийных устройств Wiren Board}}
{{DISPLAYTITLE:Загрузчик периферийных устройств Wiren Board}}
== Описание ==
== Описание ==
{{YouTube
|link= https://youtu.be/d_olK15Xhkw
|text= Что такое загрузчик (28:27)
|start=1708
}}
В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.
В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.


Строка 23: Строка 28:
Важно: именно 12 регистров одним запросом, начиная с адреса 290.
Важно: именно 12 регистров одним запросом, начиная с адреса 290.


== Как обновить загрузчик? ==
== Список изменений ==
Изменения во всех версиях описаны на странице [[Bootloader_Changelog |Список изменений в загрузчике]].
 
== Обновление загрузчика ==
{{Anchor|update}}
{{Anchor|update}}


Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330:
Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью [[modbus_client]]:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t3 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
</syntaxhighlight>
</syntaxhighlight>


Есть несколько способов обновления загрузчика:
Есть несколько способов обновления загрузчика:


==== Рекомендуемый способ: утилита <code>wb-mcu-fw-updater</code> ====
=== С контроллера Wiren Board ===


Для использования этого способа нужен контроллер Wiren Board, подключенный к интернету.
Загрузчик обновляется из консоли контроллера Wiren Board утилитой [[wb-mcu-fw-updater]], которой для работы нужен доступ в интернет. Если интернета нет, используйте другой способ.


Рекомендуется обновить пакеты для получения актуальной версии wb-mcu-fw-updater: <code>apt update; apt upgrade</code>
Учитывайте, что утилита учитывает [[ Wiren_Board_Software#Кратко_о_релизах | установленный на контроллер релиз ПО ]], то есть вы не сможете зашить тестовую версию загрузчика, если на контроллере стабильный релиз.


Для запуска обновления загрузчика одного устройства нужно ввести команду (подставить нужный порт и адрес):
Перед обновлением загрузчика, обновите прошивку контроллера через apt или другим способом по [[Wiren_Board_Software#update |инструкциям]].


<syntaxhighlight lang="bash">
==== Обновление загрузчика одного устройства ====
 
Процесс:
# Подключитесь к контроллеру по [[SSH]].
# Запустите команду, заменив в ней порт и адрес:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
</syntaxhighlight>
</syntaxhighlight>


В результате будет выполнена проверка наличия обновления загрузчика, скачивание нужного файла обновления, обновление загрузчика и установка актуальной версии прошивки в соответствии с [[ Wiren_Board_Software#Кратко_о_релизах | релизом ПО контроллера ]].
Утилита считает модель устройства, проверит наличие обновления прошивки загрузчика, скачает обновление и зашьёт его в устройство.


Также в утилите <code>wb-mcu-fw-updater</code> есть автоматический режим обновления прошивок всех устройств.
==== Обновление загрузчика всех устройств ====


Начиная с версии 1.10.8 в этом режиме перед началом процесса обновления прошивки утилита проверяет необходимость обновления загрузчика и выводит на экран предложение обновить загрузчик, на которое можно ответить <code>y</code> для обновления загрузчика.
Начиная с версии 1.10.8 утилита wb-mcu-fw-updater умеет в режиме обновление прошивок устройств проверять и версии загрузчика, а потом обновлять его:
# Подключитесь к контроллеру по [[SSH]].
# Запустите команду:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
</syntaxhighlight>
# Если есть новые версии загрузчика для устройств, утилита запросит подтверждение на обновление загрузчика, нужно ответить <code>y</code>. Если откажетесь, прошивка обновиться, но загрузчик останется старым.


Пример:
Пример:
 
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# wb-mcu-fw-updater update-all
wb-mcu-fw-updater update-all
2024-04-03 07:17:24,061 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-04-03 07:17:24,061 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-04-03 07:17:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)...
2024-04-03 07:17:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)...
Строка 64: Строка 82:
</syntaxhighlight>
</syntaxhighlight>


==== Ручное обновление: утилита <code>wb-mcu-fw-flasher</code> ====
=== С компьютера и других устройств ===
 
==== Установка утилиты ====
Утилита позволяет обновлять прошивки и загрузчики Modbus-устройств в ручном режиме. При этом обновление может быть запущено как с контроллера Wiren Board, так и с ПК. Для работы утилиты не требуется доступ в интернет, однако нужно скачать файл обновления прошивки или загрузчика любым удобным способом.
Если у вас нет контроллера Wiren Board или на нём нет интернета, можно обновить загрузчик в ручном режиме утилитой wb-mcu-fw-flasher, которую надо установить по [[wb-mcu-fw-flasher#install|инструкции]].


Чтобы выбрать подходящие файлы для обновления загрузчика и прошивки, нужно считать сигнатуру устройства (подставьте верный адрес устройства и порт):
==== Чтение сигнатуры ====
Для начала нам нужно считать сигнатуру устройства, чтобы понимать, какие загрузчик и прошивки нужны.


Сделать это можно прочитав 12 holding регистров с адреса 290, например, с помощью [[modbus_client]]:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
</syntaxhighlight>
</syntaxhighlight>


В результате на экран будет выведена строка вида <code>mwac0</code>
В результате на экран будет выведена строка вида <code>mwac0</code> — это и есть сигнатура.


Для скачивания файла обновления загрузчика нужно перейти по ссылке https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/. Далее выбрать соответствующую сигнатуру, раздел <code>main</code> и скачать файл <code>latest.wbfw</code>.
==== Скачивание файлов ====
Чтобы скачать файл с загрузчиком, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/ ,выберите папку с полученной выше сигнатурой, далее раздел <code>main</code> и скачайте файл <code>latest.wbfw</code>.


Файлы прошивок находятся по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. Нужный файл прошивки выбирается аналогично: <code>сигнатура/main/latest.wbfw</code>. Если вам необходима конкретная версия прошивки, можно скачать именно её.
Чтобы скачать прошивку, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. ,выберите папку с полученной выше сигнатурой, далее раздел <code>main</code> и скачайте файл <code>latest.wbfw</code>. Если вам необходима конкретная версия прошивки, можно скачать именно её.


Теперь, когда файлы обновления загрузчика и прошивки скачаны, можно приступить к процессу обновления.
==== Прошивка ====
 
Теперь, когда файлы обновления загрузчика и прошивки скачаны, их надо зашить в устройство:
Сначала нужно запустить обновление загрузчика:
# Запустите обновление загрузчика, замените порт <code>/dev/ttyRS485-1</code>, скорость <code>-b</code>, адрес <code>-a</code> и имя файла на свои:
 
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
</syntaxhighlight>
</syntaxhighlight>
 
#: утилита сотрёт прошивку и зашьёт новый загрузчик.
После завершения процесса обновления загрузчика прошивка из устройства будет удалена и устройство будет постоянно находиться в загрузчике. Теперь нужно вернуть прошивку:
# Запустите обновление прошивки, замените порт <code>/dev/ttyRS485-1</code>, скорость <code>-b</code>, адрес <code>-a</code> и имя файла на свои:
 
#: <syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
</syntaxhighlight>
</syntaxhighlight>
 
#: так как устройство со стёртой прошивкой находится в загрузчике, то в команде выше нет ключа <code>-j</code>.
Обратите внимание, что ключа <code>-j</code> (переход в загрузчик) нет, т.к. устройство уже в загрузчике. Описание параметров утилиты <code>wb-mcu-fw-flasher</code> можно увидеть, запустив её без параметров.


Более подробно про ручное обновление прошивки читайте в статье [[ WB_Modbus_Devices_Firmware_Update#Ручное_обновление | Обновление прошивки Modbus-устройств Wiren Board ]]
Более подробно про ручное обновление прошивки читайте в статье [[ WB_Modbus_Devices_Firmware_Update#Ручное_обновление | Обновление прошивки Modbus-устройств Wiren Board ]]
== Список изменений в загрузчике ==
[[Bootloader_Changelog| Список изменений в загрузчике]]


== Известные ошибки ==
== Известные ошибки ==


[[Bootloader: Errata | Список известных неисправностей]]
[[Bootloader: Errata | Список известных неисправностей]]

Текущая версия на 10:18, 13 апреля 2024

Описание

Что такое загрузчик (28:27)

В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.

В документации на каждое устройство есть раздел «Обновление прошивки», где есть ссылки на инструкцию по обновлению и список изменений. В это статье мы рассмотрим только обновление загрузчика.

Переход устройств в режим загрузчика

Индикация режима загрузчика

Устройство находится в режиме загрузчика в следующих случаях:

  • первые 2 секунды после включения питания, если на устройстве есть корректная прошивка;
  • постоянно, если на устройстве нет корректной прошивки, например, был сбой при обновлении прошивки;
  • при записи 1 в holding-регистр 129(0x81) в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения 9600N2. Этот режим можно активировать запустив утилиту wb-mcu-fw-flasher с ключем -j.
  • при записи 1 в holding-регистр 131(0x83) в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения, установленными в настройках устройства. Это может быть полезно для обновления устройств за шлюзами без перенастройки параметров шлюза.
    Перейти в этот режим можно в wb-mcu-fw-flasher начиная с версии 1.3.0 запустив его с ключем -J. Кроме того для запуска режима необходима поддержка со стороны загрузчика (версия 1.3.0 и выше) и со стороны прошивки (см. changelog прошивки).

В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.

Восстановление прошивки описано в статье Обновление прошивки Modbus-устройств Wiren Board.

Проверка связи с устройством в режиме загрузчика

Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 Важно: именно 12 регистров одним запросом, начиная с адреса 290.

Список изменений

Изменения во всех версиях описаны на странице Список изменений в загрузчике.

Обновление загрузчика

Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью modbus_client:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

Есть несколько способов обновления загрузчика:

С контроллера Wiren Board

Загрузчик обновляется из консоли контроллера Wiren Board утилитой wb-mcu-fw-updater, которой для работы нужен доступ в интернет. Если интернета нет, используйте другой способ.

Учитывайте, что утилита учитывает установленный на контроллер релиз ПО , то есть вы не сможете зашить тестовую версию загрузчика, если на контроллере стабильный релиз.

Перед обновлением загрузчика, обновите прошивку контроллера через apt или другим способом по инструкциям.

Обновление загрузчика одного устройства

Процесс:

  1. Подключитесь к контроллеру по SSH.
  2. Запустите команду, заменив в ней порт и адрес:
    wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
    

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

Обновление загрузчика всех устройств

Начиная с версии 1.10.8 утилита wb-mcu-fw-updater умеет в режиме обновление прошивок устройств проверять и версии загрузчика, а потом обновлять его:

  1. Подключитесь к контроллеру по SSH.
  2. Запустите команду:
    wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
    
  3. Если есть новые версии загрузчика для устройств, утилита запросит подтверждение на обновление загрузчика, нужно ответить y. Если откажетесь, прошивка обновиться, но загрузчик останется старым.

Пример:

# wb-mcu-fw-updater update-all
2024-04-03 07:17:24,061 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-04-03 07:17:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)...
2024-04-03 07:17:26,460 Update: 2.8.0-rc1 -> 2.8.1 (WB-MAP6S fw2 (26, /dev/ttyRS485-1))
2024-04-03 07:17:27,128 Flashing firmware to WB-MAP6S fw2 (26, /dev/ttyRS485-1)
2024-04-03 07:17:28,073 
2024-04-03 07:17:28,073 Bootloader update (v1.3.0 -> v1.4.1) for map6semG16 /dev/ttyRS485-1:26 is available! (bootloader updates are highly recommended to install) Do a bootloader update? [Y/N]

С компьютера и других устройств

Установка утилиты

Если у вас нет контроллера Wiren Board или на нём нет интернета, можно обновить загрузчик в ручном режиме утилитой wb-mcu-fw-flasher, которую надо установить по инструкции.

Чтение сигнатуры

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

Сделать это можно прочитав 12 holding регистров с адреса 290, например, с помощью modbus_client:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

В результате на экран будет выведена строка вида mwac0 — это и есть сигнатура.

Скачивание файлов

Чтобы скачать файл с загрузчиком, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/ ,выберите папку с полученной выше сигнатурой, далее раздел main и скачайте файл latest.wbfw.

Чтобы скачать прошивку, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. ,выберите папку с полученной выше сигнатурой, далее раздел main и скачайте файл latest.wbfw. Если вам необходима конкретная версия прошивки, можно скачать именно её.

Прошивка

Теперь, когда файлы обновления загрузчика и прошивки скачаны, их надо зашить в устройство:

  1. Запустите обновление загрузчика, замените порт /dev/ttyRS485-1, скорость -b, адрес -a и имя файла на свои:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
    
    утилита сотрёт прошивку и зашьёт новый загрузчик.
  2. Запустите обновление прошивки, замените порт /dev/ttyRS485-1, скорость -b, адрес -a и имя файла на свои:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
    
    так как устройство со стёртой прошивкой находится в загрузчике, то в команде выше нет ключа -j.

Более подробно про ручное обновление прошивки читайте в статье Обновление прошивки Modbus-устройств Wiren Board

Известные ошибки

Список известных неисправностей