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

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


В [[Documentation | документации]] на каждое устройство есть раздел «Обновление прошивки», где есть ссылки на инструкцию по обновлению и список изменений. В это статье мы рассмотрим только обновление загрузчика.
[[Bootloader_MOD|Режим загрузчика Modbus-устройств Wiren Board]]
 
== Обновление ==
==Переход устройств в режим загрузчика ==
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]]
Устройство находится в режиме загрузчика в следующих случаях:
* первые 2 секунды после включения питания, если на устройстве есть корректная прошивка;
* постоянно, если на устройстве нет корректной прошивки, например, был сбой при обновлении прошивки;
* при записи <code>1</code> в holding-регистр <code>129(0x81)</code> в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения <code>9600N2</code>. Этот режим можно активировать запустив утилиту [[wb-mcu-fw-flasher]] с ключем <code>-j</code>.
*при записи <code>1</code> в holding-регистр <code>131(0x83)</code> в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения, '''установленными в настройках устройства'''. Это может быть полезно для обновления устройств за шлюзами без перенастройки параметров шлюза.
*:Перейти в этот режим можно в [[wb-mcu-fw-flasher]] начиная с версии '''1.3.0''' запустив его с ключем <code>-J</code>. Кроме того для запуска режима необходима поддержка со стороны загрузчика (версия 1.3.0 и выше) и со стороны прошивки (см. changelog прошивки).
 
В режиме загрузчика индикатор '''Status''' устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
 
Восстановление прошивки описано в статье [[WB_Modbus_Devices_Firmware_Update#fw-recovery | Обновление прошивки Modbus-устройств Wiren Board]].
 
===Проверка связи с устройством в режиме загрузчика===
Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду
<code>modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12</code>
Важно: именно 12 регистров одним запросом, начиная с адреса 290.
 
== Список изменений ==
Изменения во всех версиях описаны на странице [[Bootloader_Changelog |Список изменений в загрузчике]].
 
== Обновление загрузчика ==
{{Anchor|update}}
{{Anchor|update}}
Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью [[modbus_client]]:
<syntaxhighlight lang="bash">
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>


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


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


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


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


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


Пример:
Пример:
<syntaxhighlight lang="console">
 
# wb-mcu-fw-updater update-all
<syntaxhighlight lang="bash">
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)...
Строка 82: Строка 39:
</syntaxhighlight>
</syntaxhighlight>


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


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


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


Более подробно про ручное обновление прошивки читайте в статье [[ WB_Modbus_Devices_Firmware_Update#Ручное_обновление | Обновление прошивки Modbus-устройств Wiren Board ]]
Обратите внимание, что ключа <code>-j</code> (переход в загрузчик) нет, т.к. устройство уже в загрузчике. Описание параметров утилиты <code>wb-mcu-fw-flasher</code> можно увидеть, запустив её без параметров.
 
 
== Список изменений в загрузчике ==
 
[[Bootloader_Changelog| Список изменений в загрузчике]]


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


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

Версия 10:19, 3 апреля 2024

Описание

Bootloader — загрузчик устройств Wiren Board.

Режим загрузчика Modbus-устройств Wiren Board

Обновление

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

Рекомендуемый способ: утилита wb-mcu-fw-updater

Для использования этого способа нужен контроллер Wiren Board, подключенный к интернету.

Рекомендуется обновить пакеты для получения актуальной версии wb-mcu-fw-updater: apt update; apt upgrade

Для запуска обновления загрузчика одного устройства нужно ввести команду (подставить нужный порт и адрес):

wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1

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

Также в утилите wb-mcu-fw-updater есть автоматический режим обновления прошивок всех устройств.

Начиная с версии 1.10.8 в этом режиме перед началом процесса обновления прошивки утилита проверяет необходимость обновления загрузчика и выводит на экран предложение обновить загрузчик, на которое можно ответить 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]

Ручное обновление: утилита wb-mcu-fw-flasher

Утилита позволяет обновлять прошивки и загрузчики Modbus-устройств в ручном режиме. При этом обновление может быть запущено как с контроллера Wiren Board, так и с ПК. Для работы утилиты не требуется доступ в интернет, однако нужно скачать файл обновления прошивки или загрузчика любым удобным способом.

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

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. Если вам необходима конкретная версия прошивки, можно скачать именно её.

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

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

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 mwac0__1.21.1_main_ac00010.wbfw

Обратите внимание, что ключа -j (переход в загрузчик) нет, т.к. устройство уже в загрузчике. Описание параметров утилиты wb-mcu-fw-flasher можно увидеть, запустив её без параметров.


Список изменений в загрузчике

Список изменений в загрузчике

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

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