Failed firmware update –> reboot loop

Greetings!

After a few years of my WB 7.2’s flawless operation, I’ve run into a major issue and need your help, please.

The problem began when I was trying to install zigbee2mqtt which failed due to low space on rootfs (~10%). I was already running wb-2602 but for some reason, rootfs wasn’t expanded to 2 GB; it was still only 1 GB. As far as I understood, another firmware update to the same version was necessary.

I performed this firmware update via the web UI using 202604220822_wb-2602_bullseye_wb7x.fit. Debug output:

Received good update FIT /mnt/data/.wb-update/202604220822_wb-2602_bullseye_wb7x.fit, starting update
===============================================================================
Sat 25 Apr 2026 11:27:40 PM UTC: started update from /mnt/data/.wb-update/202604220822_wb-2602_bullseye_wb7x.fit
===============================================================================
Description:         WirenBoard firmware update
Compatible device:   wirenboard,wirenboard-720
Firmware version:    202604220822
Firmware compatible: +extended-rootfs +single-rootfs +fit-factory-reset +force-repartition +repartition-ramsize-fix +fit-immutable-support +wb8-debug-network-update-fix +wrong-ab-layout-fix +uboot-dynamic-env +update-from-cloud
Release name:        wb-2602
Release suite:       stable
Release target:      wb7/bullseye
Release repo prefix:
Time of creation:    Wed 22 Apr 2026 08:23:08 AM UTC
===============================================================================

>>> Checking SHA1 hash of install
>>> SHA1 hash of install ok
32+0 records in
32+0 records out
16384 bytes (16 kB, 16 KiB) copied, 0.00457209 s, 3.6 MB/s
tar: stdout: write error
>>> Firmware seems to be compatible with this controller
>>> Extracting install script (install_update.sh) from FIT
>>> Running install script
>>> Using /etc/fw_env.config from rootfs
>>> Using flags from /mnt/data/.wb-update/install_update.web.flags: --force-repartition
>>> Console logging enabled; tempfile /tmp/tmp.dJeDNjCO4e, final file /mnt/data/.wb-update/wb-console.log will be written on exit
32+0 records in
32+0 records out
16384 bytes (16 kB, 16 KiB) copied, 0.00506431 s, 3.2 MB/s
tar: stdout: write error
>>> Firmware seems to be compatible with this controller
>>> Checking SHA1 hash of rootfs
>>> SHA1 hash of rootfs ok
>>> rootfs is valid, installing firmware update
>>> Checking, /tmp/tmp.pxl5l3p69X/.wb-restore/factoryreset.fit supports features: single-rootfs wb8-debug-network-update-fix wrong-ab-layout-fix uboot-dynamic-env
>>> Storing this update as factory FIT to use as bootlet (supports single-rootfs wb8-debug-network-update-fix wrong-ab-layout-fix uboot-dynamic-env)
>>> Old factory FIT will be kept as factoryreset.original.fit and will still be used to restore firmware
>>> Copying /mnt/data/.wb-update/202604220822_wb-2602_bullseye_wb7x.fit to factory default location as requested
>>> Flashed U-boot version is too old, updating it before reboot
Das U-Boot installer for Wiren Board
You are about to install U-boot image '/usr/lib/u-boot/sun8i_wirenboard7/u-boot-sunxi-with-spl.bin' on '/dev/mmcblk0' (platform wb7)
Force installation requested
Writing U-boot image '/usr/lib/u-boot/sun8i_wirenboard7/u-boot-sunxi-with-spl.bin' on '/dev/mmcblk0' (options 'bs=1024 seek=8')
449+1 records in
449+1 records out
459940 bytes (460 kB, 449 KiB) copied, 0.587828 s, 782 kB/s
Syncing device
>>> Watch logs in the debug console, or in /mnt/data/.wb-update/state/update.log
>>> Rebooting system to install update
>>> Waiting for Wiren Board to boot again...
>>> Reboot system

However, the UI wasn’t coming back online. The MQTT broker didn’t initialise and the web UI failed to connect to WB. Failure to connect to ws://…

Due to the – as I’ve now realised – fragile setup, I could not ssh into the WB either. I had been doing that via Tailscale + ssh key but after the firmware update, Tailscale was apparently wiped out or otherwise failed to work, and perhaps its networking messed up the LAN connection. When I tried to ssh into the WB using the LAN IP address, the password was getting rejected and the ssh key wasn’t being used.

I tried to get in via the Debug Console port using screen on macOS but when I logged in, I got immediately logged out because the default shell for the root user was set to /usr/bin/zsh and that was apparently no longer present either. I couldn’t find any way to stay logged in.

I tried some desperate passwd editing by first doing

setenv optargs ro rootwait fixrtc single init=/bin/sh
run bootcmd
mount -o remount,rw /

and then changing the login shell to /bin/bash but to no avail. It still tried to load zsh after login.

Desperate, after a couple of hours, I opted to reset the entire device (factory reset).

I followed the procedure by pressing the FW button and then holding it for 4 seconds on prompt, but it appears that the entire process failed too.

Now I’m stuck in a reboot loop which ends with the following:

Environment size: 43/131068 bytes

Resetting to default environment

Info: input data size = 43 = 0x2B

Net:   No ethernet found.
Hit  key to stop autoboot in  1s

Info: input data size = 4540 = 0x11BC

switch to partitions #0, OK
mmc1(part 0) is current device
eMMC found on device 1
Press FW button to enter firmware update mode
…
Failed to load ‘/boot/uEnv.txt’
Running default loadzimage …
Failed to load ‘/boot/zImage’

Here it waits a little and reboots every time.

Please, how can I reset the device to factory settings? :frowning: If you need any more debug information, please, let me know. Thank you!

Здравствуйте! Я автоматический помощник техподдержки Wiren Board. Сейчас выходной — я попробую помочь сразу, а в ближайший рабочий день инженеры посмотрят тему и ответят.
Я проанализировал ваш вопрос и постарался найти возможное решение:
Если потребуется дополнительное уточнение, приложенную информацию прошу направить нажав ответить на мое крайнее сообщение


Судя по описанию, у вас контроллер Wiren Board 7.2 с прошивкой wb-2602 (Bullseye), и сейчас он застрял в цикле перезагрузки на стадии U‑Boot: не находит uEnv.txt и zImage на eMMC и не загружается с внутренней памяти.

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


1. Что важно понимать сейчас

  • U‑Boot работает (видно по логам и сообщениям Press FW button to enter firmware update mode).
  • Основной rootfs/eMMC в неконсистентном состоянии (отсюда отсутствие ядра и конфигов).
  • Задача: загрузиться с внешнего носителя (SD) и затем перепрошить eMMC штатным образом (через wb-recovery / wb-update).

В вашем случае заводской Factory FIT, судя по логам обновления, мог быть перезаписан повреждённым состоянием, поэтому «заводской» сброс через FW-кнопку не сработал.


2. Вариант A: Восстановление с помощью карты microSD (рекомендуемый)

2.1. Подготовить образ и карту

  1. Скачайте образ recovery / установочный образ для WB7 с Wiki (для прошивки wb-2602, Bullseye).
    Используйте актуальный образ отсюда[^1].

  2. Подготовьте карту microSD на 4–16 ГБ:

    • На Linux / macOS — через dd или balenaEtcher / Rufus:
      # пример для Linux, ОСТОРОЖНО с именем устройства!
      sudo dd if=wb7_recovery_image.img of=/dev/sdX bs=4M conv=fsync
      
    • Для macOS удобнее balenaEtcher (GUI) — выбрать образ и карту и записать.
  3. По окончании записи без форматирования вытащите карту и вставьте её в WB7 в слот microSD.


2.2. Загрузка WB7 с карты microSD

  1. Подключите Debug Console (UART) к ПК (как вы уже делали) через screen:
    screen /dev/tty.usbserial-XXX 115200
    
  2. Обесточьте WB7, вставьте карту microSD, включите питание.
  3. Наблюдайте вывод U‑Boot. На WB7 загрузка с SD обычно происходит автоматически, если на SD есть корректный загрузчик/образ:
    • В логах вы должны увидеть, что текущим устройством становится mmc0 (SD), а не mmc1.
  4. Если контроллер не пытается стартовать с SD:
    • Во время отсчёта Hit any key to stop autoboot in 1s нажмите любую клавишу.
    • В консоли U‑Boot выполните:
      setenv boot_targets mmc0
      saveenv
      boot
      
    • Это укажет U‑Boot попытаться загрузиться с карты (mmc0).

2.3. Дальнейшие действия из recovery-системы

После успешной загрузки с SD вы получите доступ к оболочке Linux (через ту же debug-консоль).

Дальше возможны два пути (в зависимости от вида образа):

  1. Если образ — полноценный установочный / recovery WB7:

    • Обычно при загрузке есть утилита или скрипт wb-recovery / установщик прошивки, который позволяет переписать eMMC из образа.
    • Далее:
      wb-recovery      # или соответствующий скрипт, будет в документации к образу
      
    • Следуйте подсказкам: выбрать eMMC (/dev/mmcblk1) как целевой диск.
  2. Если образ — стандартная система WB7, а не спец‑recovery:

    • Образ загружен с SD, на eMMC вы сможете добраться как к блочному устройству /dev/mmcblk1.
    • Вариант:
      1. Скачайте нужный .fit-файл прошивки прямо в эту систему (если есть сеть) в /mnt/data/.wb-update/ или другое место.
      2. Используйте штатный wb-update для прошивки eMMC:
        wb-update install /path/to/202604220822_wb-2602_bullseye_wb7x.fit
        
      3. Дождитесь завершения, далее перезагрузите без SD-карты.

Документация по загрузке и восстановлению WB7 с SD описана на Wiki[^1][^2].


3. Важный момент: проблема с оболочкой /root и входом по UART

Вы писали, что у вас в /etc/passwd у root указан /usr/bin/zsh, и это мешает войти. После восстановления системы (или при работе с SD-образом) имеет смысл:

  1. Временный однопользовательский режим (если загрузка с SD в обычный Debian):

    • В U‑Boot передать ядру параметр:
      setenv optargs 'rw init=/bin/sh'
      saveenv
      boot
      
    • Внутри системы:
      mount -o remount,rw /
      sed -i 's|^root:.*:/usr/bin/zsh$|root:x:0:0:root:/root:/bin/bash|' /etc/passwd
      sync
      
    • После этого можно вернуть обычную загрузку (убрать init=/bin/sh).
  2. После «чистой» перепрошивки eMMC root-шелл по умолчанию будет /bin/bash, так что проблема с авто-logout уйдёт.


4. Если загрузка с microSD вообще не получается

В таком случае инженерам будет важно:

  1. Полный лог с debug-консоли с момента подачи питания до перезагрузки (один цикл).
  2. Вывод U‑Boot после остановки автозагрузки и команд:
    printenv
    mmc list
    mmc dev 0
    mmc dev

Thanks a lot, Weekend Engineer Bot! Your advice helped me find the correct documentation page and perform what appears to be a clean firmware restoration via a USB drive, however now I’m facing a network issue.

  1. I followed these instructions.
  2. The controller booted up correctly and I was log in successfully via the Debug Console.
  3. However, the web UI as well as ssh remained unavailable. I tried ping 8.8.8.8 but the response was ping: connect: Network is unreachable. The Ethernet port status LEDs are inactive; there’s no indication of a physical link working.

Here’s some debug information I’ve tried:

ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether e8:eb:1b:40:09:55 brd ff:ff:ff:ff:ff:ff
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether e8:eb:1b:3f:bf:bd brd ff:ff:ff:ff:ff:ff
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether f0:c8:14:49:f1:18 brd ff:ff:ff:ff:ff:ff
6: wlan1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether f2:c8:14:49:f1:18 brd ff:ff:ff:ff:ff:ff
7: dbg0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 1a:55:89:a2:69:43 brd ff:ff:ff:ff:ff:ff

systemctl status NetworkManager

  NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendo>
     Drop-In: /etc/systemd/system/NetworkManager.service.d
              └─override.conf
     Active: active (running) since Sun 2026-04-26 11:28:26 UTC; 41min ago
        Docs: man:NetworkManager(8)
     Process: 343 ExecStartPre=/usr/lib/wb-configs/fix_nm_ap_ssid.sh (code=exite>
     Main PID: 508 (NetworkManager)
        Tasks: 4 (limit: 2354)
     Memory: 15.2M
        CPU: 33.054s
     CGroup: /system.slice/NetworkManager.service
              ├─ 508 /usr/sbin/NetworkManager --no-daemon
              └─1557 /usr/sbin/dnsmasq --conf-file=/dev/null --no-hosts --keep-i>

  Apr 26 12:05:51 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205151.02>
  Apr 26 12:05:51 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205151.16>
  Apr 26 12:06:53 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205213.03>
  Apr 26 12:06:53 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205213.18>
  Apr 26 12:07:55 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205275.10>
  Apr 26 12:07:55 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205275.24>
  Apr 26 12:08:57 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205337.11>
  Apr 26 12:08:57 wirenboard-AKZKPGB3 NetworkManager[508]: <info>  [1777205337.25>

nmcli device status

DEVICE         TYPE      STATE                   CONNECTION 
wlan0          wifi      connected               wb-ap      
lo             loopback  connected (externally)  lo         
wlan1          wifi      disconnected            --         
p2p-dev-wlan0  wifi-p2p  disconnected            --         
p2p-dev-wlan1  wifi-p2p  disconnected            --         
dbg0           ethernet  unavailable             --         
eth0           ethernet  unavailable             --         
eth1           ethernet  unavailable             --         
sit0           iptunnel  unmanaged               --         

I’ve tried to reboot twice, already without the USB drive, but to no avail. Networking doesn’t seem to be working.

Здравствуйте! Я автоматический помощник техподдержки Wiren Board. Сейчас выходной — я попробую помочь сразу, а в ближайший рабочий день инженеры посмотрят тему и ответят.
Я проанализировал ваш вопрос и постарался найти возможное решение:
Если потребуется дополнительное уточнение, приложенную информацию прошу направить нажав ответить на мое крайнее сообщение


Судя по выводу ip link / nmcli, у вас сейчас WB 7.2 с прошивкой wb-2602, контроллер загрузился с «чистой» системы, но:

  • оба проводных интерфейса eth0/eth1 в состоянии NO-CARRIER и unavailable;
  • NetworkManager активен, есть AP на wlan0 (wb-ap);
  • пинга «наружу» нет, т.к. нет ни проводного линка, ни клиентского Wi‑Fi‑подключения.

То есть сама ОС и сетевой стек живы, но нет физического линка по Ethernet и/или нет настройки выхода в Интернет.

Ниже — проверка и временное решение.


1. Уточнить, это точно проблема линка, а не только IP

  1. Подключите Ethernet‑кабель к другому порту на свитче/роутере и, по возможности, другим кабелем.
    У вас оба интерфейса eth0/eth1 показывают NO-CARRIER и на WB, и светодиоды на разъёме не горят — это очень похоже именно на отсутствие физического линка, а не только IP‑адреса.

  2. Сразу после смены порта/кабеля выполните в консоли WB:

    ip link show eth0
    ip link show eth1
    

    Если линк появился, вы увидите state UP и без NO-CARRIER.


2. Проверить, что Ethernet‑интерфейсы вообще поднимаются

Выполните:

nmcli device show eth0
nmcli device show eth1

и приложите вывод.

Параллельно можно попробовать принудительно поднять интерфейс:

sudo nmcli device set eth0 managed yes
sudo nmcli device connect eth0

sudo nmcli device set eth1 managed yes
sudo nmcli device connect eth1

После этого снова:

nmcli device status
ip a s eth0
ip a s eth1

Если после connect состояние останется unavailable и NO-CARRIER, это ещё раз подтвердит отсутствие физического соединения или аппаратную проблему.


3. Временно выйти в сеть через Wi‑Fi (WB как клиент)

Сейчас контроллер раздаёт AP wb-ap на wlan0, но к Интернету сам не подключён. Можно:

  1. Подключиться к точке wb-ap с ноутбука / телефона.
    Пароль по умолчанию — в документации для WB7[1] (если вы его не меняли).

  2. На самом контроллере (через Debug Console) добавить Wi‑Fi‑подключение к вашей домашней сети:

    nmcli dev wifi rescan
    nmcli dev wifi list
    

    Найдите SSID вашей сети и подключитесь:

    nmcli dev wifi connect "ВАШ_SSID" password "ВАШ_ПАРОЛЬ" ifname wlan0
    
  3. Проверить:

    nmcli device status
    ip a s wlan0
    ping 8.8.8.8 -c3
    ping google.com -c3
    

Если появится Интернет — значит, сетевой стек в порядке, а вопрос только в Ethernet‑линке.


4. Проверить, с чего именно сейчас грузится WB7

Иногда после восстановления с USB/SD можно ненароком остаться загруженным с внешнего носителя, а не с eMMC, и тогда поведение сети может отличаться от ожидаемого.

Проверьте:

mount | head -n 10
lsblk
cat /proc/cmdline

Нужно убедиться, что rootfs на /dev/mmcblk1p* (eMMC WB7), а не на /dev/mmcblk0* (SD/USB).


5. Что ещё важно прислать инженерам

Чтобы они могли понять, это:

  • ошибка конфигурации / прошивки,
  • или потенциальная аппаратная проблема PHY/разъёма,

пожалуйста, дополнительно приложите:

dmesg | grep -iE 'eth0|eth1|sunxi|phy'
journalctl -u NetworkManager --no-pager | tail -n 100
ethtool eth0
ethtool eth1

(если ethtool не установлен — сообщите, что команда не найдена).


6. Как это должно выглядеть в «норме»

На «чистом» WB7 с wb‑2602:

  • при подключённом кабеле хотя бы один из eth0/eth1 обычно показывает state UP и carrier;
  • nmcli device statusconnected/connecting для одного из ethX;
  • светодиоды порта мигают.

Если у вас при заведомо рабочем кабеле и порту роутера линк так и не появляется (и на роутере порт «молчит»), велика вероятность, что есть аппаратная проблема Ethernet (например, после ударов, перегрева, грозы и т.п.). Для такого случая инженеры могут дополнительно запросить серийный номер и фото/описание условий эксплуатации.


Пожалуйста, пришлите в ответ:

  1. Результаты с другим кабелем/портом (менялся ли статус NO-CARRIER / горят ли светодиоды).
  2. Вывод:
    • nmcli device show eth0
    • nmcli device show eth1
    • lsblk, mount | head -n 10, cat /proc/cmdline
    • dmesg | grep -iE 'eth0|eth1|sunxi|phy'
  3. Получилось ли выйти в Интернет через Wi‑Fi‑клиент (nmcli dev wifi connect ...).

Это сильно сузит круг причин и поможет поддержке предложить уже точное решение.

Примечание: Я — искусственный интеллект, а не сотрудник-человек. В моих ответах возможны неточности.


  1. Обновление прошивки контроллеров Wiren Board 7.2…7.3 — Wiren Board ↩︎

Oh no… I’m embarrassed to say that the physical connection (Ethernet cable) was in fact unplugged between the controller and the router. :see_no_evil_monkey: I do apologise for the confusion – I only checked the controller and router connections, having completely forgotten that I’ve been using WiFi since I was doing some testing many months ago.

Thank you very much for the support – quite a solid bot you’ve got here! General LLMs were sending me down wrong paths but yours nailed it.


If you care to investigate the original issue, I’d appreciate some feedback on why the original firmware update via web UI failed (the MQTT broker failed to initialise after the reboot) and what I should have done differently if that was my fault.

As for the other issues:

  • The ssh issue was likely due to Tailscale + possible misconfiguration on my part.
  • The non-standard login shell being wiped out during the firmware update and thus effectively disabling login via the Debug Console port is something that might benefit from being mentioned in your docs, in my opinion.
  • The failed factory reset was likely my fault, though I’m not sure what caused the corruption.
  • The fact that I didn’t know how to perform a clean one from a USB drive was merely bad research on my part. If I had searched in Russian rather than English, I think I would have found it.

Now I’m going to reconfigure everything from scratch, wish me luck. )) Thank you!

Good afternoon!
I am glad that you managed to solve the problem! If you have any problems, please always contact our technical support portal!