Аварийная прошивка OpenWrt через консоль Breed для роутеров с разметкой NAND-flash от Xiaomi Mi Router 3G

Аварийная прошивка OpenWrt через консоль Breed для роутеров с разметкой NAND-flash от Xiaomi Mi Router 3G

inflabz

Канал https://t.me/inflabz_channel

1. Скачиваем nginx с https://nginx.org/ru/download.html

Распаковываем архив в C:\nginx\

В порт LAN1 роутера подключить компьютер (скорость UART 115200, если используете терминал)

Зажать на роутере Reset 5-10 сек. и подключить питание к роутеру.

В браузере (в режиме инкогнито) открываем http://192.168.1.1/index.html и проверяем вход в Breed

Запускаем PuTTY

IP 192.168.1.1

Telnet, порт 23

и подключаемся к Breed:

Breed for Beeline SmartBox GIGA
Starting breed built-in shell
breed>

Запускаем nginx из C:\nginx\nginx.exe

Смотрим в сетевых подключения IP-адрес компьютера (обычно Breed выдает 192.168.1.2 или 192.168.1.3 и т.п.)
Также можно назначить адрес вручую (например 192.168.1.10/24 шлюз 192.168.1.1)

Проверяем работу nginx открыв в браузере этот адрес

Проверка работы nginx


В директорию c:\nginx\html\ помещаем файлы вашего роутера (пример для SmartBox GIGA)

*initramfs-kernel.bin

*squashfs-kernel1.bin

*squashfs-rootfs0.bin

для GIGA это будут

openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin

openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin

openwrt-ramips-mt7621-beeline_smartbox-giga-initramfs-kernel.bin


Внимание!
а) метод прошивки с помощью initramfs начинается с п.6 (для обхода бэдблоков на NAND или неудачном обновлении прошивки)


б) метод прошивки с помощью breed продолжается в п.2


2. в PuTTY выполняем команды:

wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin

вывод будет примерно таким

breed> wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin
wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin
Connecting to 192.168.1.2:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15335424/0xea0000 (14MB) [application/octet-stream]
Saving to address 0x80001000
[========================================================================] 100%
Transmission completed in 3.1s.

Если файл не скачивается, дальше не продолжаем !!!



3. Для 128 Мб флешки (GIGA, TURBO+ и оригинальный MIR3G)

Стираем флешь:

flash erase 0x200000 0x7e00000

breed> flash erase 0x200000 0x7e00000
flash erase 0x200000 0x7e00000
Erasing flash bank 0 from 200000h , size 7e00000h
[====================>                                                  ] 30% mt7621-nfi.0: 1 error bit(s) corrected in page 20928
[======================================================================> ] 99% mt7621-nfi.0: Skipping protected block 1023 (offset 0x07fe0000)
[========================================================================] 100%
Succeeded

В логе видно что сбойный блок NAND флеши скорректирован. Неисправные блоки невозможно скорректировать (только заменять флешь)

4. Записываем файловою систему

flash write 0xA00000 0x80001000 15335424

где 15335424 это размер файла *squashfs-rootfs0.bin из лога в п.2

breed> flash write 0xA00000 0x80001000 15335424
flash write 0xA00000 0x80001000 15335424
Writing flash bank 0 into a00000h from memory 80001000h, size ea0000h
[========================================================================] 100%
Succeeded


5. Записываем ядра

wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin

breed> wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin
wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin
Connecting to 192.168.1.2:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2365690/0x2418fa (2MB) [application/octet-stream]
Saving to address 0x80001000
[========================================================================] 100%
Transmission completed in 0.8s.

Записываем kernel0
flash write 0x200000 0x80001000 2365690

где 2365690 это размер файла *squashfs-kernel1.bin из лога в п.5

breed> flash write 0x200000 0x80001000 2365690
flash write 0x200000 0x80001000 2365690
Writing flash bank 0 into 200000h from memory 80001000h, size 2418fah
[========================================================================] 100%
Succeeded

Записываем kernel1

flash write 0x600000 0x80001000 2365690

где 2365690 это размер файла *squashfs-kernel1.bin из лога в п.5

breed> flash write 0x600000 0x80001000 2365690
flash write 0x600000 0x80001000 2365690
Writing flash bank 0 into 600000h from memory 80001000h, size 2418fah
[========================================================================] 100%
Succeeded


Если все прошло успешно перезагружаемся

reset

breed> reset


Настройки запуска ядра Breed

http://192.168.1.1/envedit.html

Стандартные переменные окружения (Environment) для Xiaomi Mi Router 3G (и роутеров на базе его разметки):

autoboot.command = boot flash 0x600000

stock_kernel = boot flash 0x200000

однако, если kernel1 не записалось в п.5 используйте специальную прошивку или попробуйте загрузиться из kernel0 указав в

autoboot.command = boot flash 0x200000

Однако в этом случае будут проблемы с обновлением через OpenWrt


6. Вариант №2, использование initramfs (Init RAM FS)

Выполняем пункт 1 (nginx, файлы)

Пример для SmartBox GIGA

wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-initramfs-kernel.bin; boot mem 0x80001000

вывод будет примерно таким

breed> wget http://192.168.1.2/openwrt-ramips-mt7621-beeline_smartbox-giga-initramfs-kernel.bin; boot mem 0x80001000
Connecting to 192.168.1.2:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15335424/0xea0000 (14MB) [application/octet-stream]
Saving to address 0x80001000
[========================================================================] 100%
Transmission completed in 3.1s.
Trying to boot firmware from 0x80001000 ...
U-Boot firmware image header detected.
   Image Name:  MIPS OpenWrt Linux-5.4.108
   Data Size:   15335424 Bytes
   Load Address: 80001000
   Entry Point: 80001000

Произойдёт разрыв соединения TELNET (в UART вывод информации, естественно продолжится)

Заморгает синий светодиод, затем будет светить зеленый светодиод и ПК получит IP-адрес (если этого не произошло, перезагружаем роутер и повторяем попытку)


Запускаем PuTTY

IP 192.168.1.1

SSH, порт 22

смотрим ip-адрес выданный компьютеру роутером и подключаемся к OpenWrt и в SSH консоли набираем команды:

cd /tmp
wget http://192.168.1.*/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin
wget http://192.168.1.*/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin

либо закиньте файлы *squashfs-rootfs0.bin и *squashfs-kernel1.bin в роутер в директорию /tmp любым другим способом

mtd write /tmp/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin "kernel"
mtd write /tmp/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin "ubi"

вывод будет примерно таким

mtd write /tmp/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin "kernel"
Unlocking kernel...
Writing from /tmp/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-kernel1.bin to kernel
mtd write /tmp/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin "ubi"
Unlocking ubi...
Writing from /tmp/openwrt-ramips-mt7621-beeline_smartbox-giga-squashfs-rootfs0.bin to ubi

Выполнить перезагрузку роутера

reboot

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