Аварийная прошивка 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 открыв в браузере этот адрес
В директорию 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
если все прошло удачно, прошивка загрузится.