Исправлено 06.11.2020
Сегодня мы будем прошивать роутер Xiaomi Mi Wi-Fi Router Pro R3P по аналогии можно прошить и другие роутеры, все очень подробно изложено ниже.
Без преувеличения скажу, что это самая подробная статья о прошивке роутера с использованием Serial он же UART, он же COM- порта. Она в некоторой степени избыточна. Я описываю не только конкретные действия по прошивке, но и рассказываю почему так и что это значит, следовательно Вы сможете повторить все это и на других роутерах.
Это уже третья статья посвящённая OpenWrt (ссылки на статьи см. внизу)
Статья получилось очень объемной (опять мало будет дочиток), но и продолжение обязательно будет, мы прокачаем роутер по полной!
Но хватит слов, пора к делу!
Как прошить роутер, способы.
Прошить OpenWrt можно двумя способами "софтовым" и "железным" способом с разборкой и подпайкой к UART роутера.
Способы прошивки
- "Софтовый"
- "Железный" - с использование UART порта на плате
Всем хорош "софтовый" способ, разбирать роутер не надо, но (как всегда НО) очень много нужно всего сделать. Самое главное нужно получить доступ по SSH, а для этого нужно проделать ряд манипуляции с регистрацией на сайте Xiaomi и получение паролей. Я этим заниматься не хочу, очень это муторно. К тому же мы не будем светится на сайте Xiaomi (если там регистрироваться) кто их знает какую статистику они там собирают, а что они собирают статистку это точно. Можно использовать сторонние загрузчики и скрипты, но как Вы все понимает это тоже не очень хорошо, так как нам непонятно что там внутрях и что происходит. Поэтому буду рассматривать только способ с подпайкой к UART роутера, для меня так быстрее и тем более, возможно восстановление роутера из состояния кирпича (если не поврежден загрузчик U-boot), во время моих экспериментов с прошивкой роутер неоднократно становился кирпичом, но все это происходило незаметно и тут же излечивалось.
Итак будем рассматривать второй способ с разборкой и подпайкой к UART роутера
"Железный" способ с подпайкой к UART (Serial) порту роутера
Подготовка - запасемся нужными программами и прошивками.
Для этого нужно проделать ряд предварительных манипуляций и первое скачать программное обеспечение для прошивки роутера и работы с ним
Программное обеспечение
Очень известная программа Putty - официальный сайт
Это клиентская программа для работы с сетевыми протоколами Telnet, SSH, SCP, SFTP, для подключения по COM-порту
Программа tftpd64 (или tftpd32) - Официальный сайт http://www.tftpd64.com/ Интересно что при заходе на сайт пишет что сайт заблокирован и содержит вредоносное ПО
Поэтому программа tftpd64 на моем сайте
Эта программа включающая в себя простые в настройке DHCP, TFTP, SNTP и Syslog серверы, а также TFTP клиент, поддерживающий стандарт TFTPv2.
Прошивка
Сайт openwrt.org (https://openwrt.org) страничка на сайте посвящённая Xiaomi R3P Pro и кстати там совсем мало информации по прошивке роутера и она не правильная (объяснения ниже)
Файлы OpenWrt для нашего процессора версии 19.07.4 от 10 сентября 2020 года доступна по адресу:
Корневой каталог, см "xiaomi_mir3p-*": https://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/
Для поиска нужно помнить\знать какой у вашего роутера процессор, но я напомню, процессор - MT7621A и это нам будет важно для скачивания нашей прошивки. А так же нужно знать, что команда разработчиков называет себя "Ramips" вот в такой папке и нужно будет искать прошивку
Самый главный для нас это файл factory, затем файл sysupgrade
Файл для первичной установки системы OpenWrt он самый главный установочный файл (в папке переименован в factory):
http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-squashfs-factory.bin
Файл для апгрейда, если у Вас уже была установлена прошивка OpenWrt (в папке переименован в sysupgrade):
http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-squashfs-sysupgrade.bin
Файл для загрузки OpenWrt только в ОЗУ роутера (в папке переименован в initramfs): https://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-initramfs-kernel.bin
Файл "прошивки ядра" на всякий случай с (https://github.com/ITMO-lab/) сам файл: openwrt-ramips-mt7621-xiaomi_mir3p-initramfs-kernel.bin
Все это Вы можете скачать одной папкой с моего сайта.
На самом деле понадобится два файла - factory и sysupgrade их и качайте
Ниже будет указано какой файл для чего нужен и когда его применять
Дела железные - разборка и подпайка к UART роутера
Разбираем роутер. ничего сложного нет, но вот тут все рассказано в картинках: "Обзор на Xiaomi Mi Wi-Fi Router Pro R3P"
Ищем UART на плате, а вот он
Распиновка разъёма следующая:
- 1-VCC
- 2-RX
- 3-GND
- 4-TX
Впрочем на плате все подписано.
Помним что.
Уровни сигнала TX и RX должно быть 3.3 вольта
Подключать будем RX, TX и GND. Питание на 3.3 v не трогаем (конвертер у меня питается от USB порта через преобразователь на 3,3 вольта)
Помним что TX и RX подключаем перекрестно, TX к RX, RX к TX
Припаиваем колодку, я припаял типа мама для того что бы штырьки (типа папа) не замкнули на радиатор, он расположен рядом, загибать я их не хотел, так не красиво.
Вот так (листайте вправо и влево)
Берем переходник Serial - USB на 3,3 v (есть еще на 5 вольт, но он не подойдет или придется использовать конвертер уровней)
Я его чуть модифицировал, для прошивки ESP8266 у вас может быть другой, но смысл остается тот же - конвертер Serial-USB
И подключаем, помним про перекрестное соединение
На этом железная часть все.
Переходим к программному обеспечению и собственно прошивке
Дела программные - прошивка роутера
Качаем Putty
Что это?
PuTTY- свободно распространяемый клиент для различных протоколов удалённого доступа, включая SSH, Telnet, rlogin. Также имеется возможность работы через последовательный порт (COM-порт, Serial, UART)
Настраиваем его
Мы будем работать через наш шнурок, а значит через Serial порт
Serial порт у меня COM5, а у Вас, скорее всего будет другой
Скорость выставляем: 115200
И записываем все это вот так, естественно "Saved Session" - любое имя, какое вам по душе.
Производим ряд подключений
- Подключаем конвертер Serial-USB
- И подключаем сетевой кабель один конец в компьютер другой в сетевой порт-LAN (не WAN)
- Включаем соединение в Putty > "Open"
И включаем роутер в сеть (обязательно уже должен быть подключен адаптер USB-Serial и открыта консоль в Putty, иначе пока все будите включать пропустите U-boot)
Если все подключено правильно в терминале побегут разные циферки и буковки, разные надписи, дождёмся загрузки роутера и спокойно проанализируем что он там нам написал и вы то же сначала посмотрите какая у вас память, но потом придется включить и выключить роутер и уже зайти через U-boot для прошивки
Вот отдельно скопирован листинг после подключения по UART
Нам интересно какая память установлена, а она может быть двух типов
На роутер устанавливаются два типа памяти (NAND)
- Micron (идентификатор 0x2c)
- ESMT (идентификатор 0xc8)
Пользователи сообщали о проблемах с моделями, использующими микросхему Micron NAND, соответственно ESMT (идентификатор 0xc8) на сегодняшний момент лучше), у меня такая и оказалась и это есть хорошо (в листинге выделено жирным)
Смотрим память, в самом начале
И потом более подробно, явным образом.
Память посмотрели, перезагружаем роутер выдергиванием из сети и заходим в меню U-boot которое будет в само начале.
Переходим к меню U-boot
После включения ваш маршрутизатор остановится на примерно на 1 секунду в меню U-boot, вот как оно выглядит
Меню U-boot
1: Load system code to SDRAM via TFTP (Загрузить системный код в SDRAM через TFTP)
2: Load system code then write to Flash via TFTP (Загрузите системный код, затем запишите его во флэш-память через TFTP)
3: Boot system code via Flash (default) (Загрузите системный код через Flash (по умолчанию))
4: Entr boot command line interface (интерфейс командной строки)
7: Load Boot Loader code then write to Flash via Serial (Загрузите код загрузчика, затем запишите его во Flash через последовательный порт.) Это обновит U-boot через Serial
9: Load Boot Loader code then write to Flash via TFTP (Загрузите код загрузчика, затем запишите его во Flash через TFTP) Это обновит U-boot через TFTP
Через 1 секунд он сам начинает грузится по 3 пункту заливая код из флеша в ОЗУ роутера
Интересно, что на этом этапе мы видим что памяти выделяется 256МБ, а не 512МБ:
И потом, ядру Linux предоставляется только 256МБ: "Giving linux memsize in MB, 256 (Предоставление размера памяти linux в МБ, 256)"
И еще: "estimate memory size (оценить размер памяти)"
Но это отступление, вернемся к прошивке.
При появлении Меню U-boot, а возможно вам придётся еще несколько раз перезагрузить роутер что успеть нажать нужную циферку, а нажимать нужно цифру "2"
Нажимаем цифру 2 тем самым появляется надпись
2: System Load Linux Kernel then write to Flash via TFTP.
Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)
Система спросит вас согласны ли вы писать во Flash? (Да / Нет)
Отвечаем, конечно ДА! (Y) Помните переключатель клавиатуры должен быть переключен на английский, а то будет жать Y, а система будет воспринимать это как нет.
Отступление Можно не читать
На сайте OpenWrt написано, а именно на странице: "Xiaomi R3P Pro"
Очень маленькая инструкция и вот что там написано.
To boot to OpenWrt:
Download the *initramfs-kernel.bin file (hereafter “initramfs.bin”) for your router (from the “releases” page). And configure a tftpd server to serve up the “initramfs.bin” file. Make sure your router and your tftpd server computer are connected to the same subnet (direct ethernet works well).
After power-on, your router will pause for 5 seconds at the uboot menu. Pressing '1' will get you into the tftpboot menu. From there, enter in the router's IP address (arbitrary, in the subnet where your tftpd server is running), and the IP address of the machine running tftpd and the name of the file to boot (“initramfs.bin”).
You can fix things from there (ie, sysupgrade or mtd write to flash everything from scratch).
Перевод
Чтобы загрузить OpenWrt:
Загрузите файл * initramfs-kernel.bin (далее «initramfs.bin») для вашего маршрутизатора (со страницы «Выпуски»). И настройте сервер tftpd для обслуживания файла «initramfs.bin». Убедитесь, что ваш маршрутизатор и компьютер- сервер tftpd подключены к одной и той же подсети (прямой Ethernet работает хорошо).
После включения ваш маршрутизатор остановится на 5 секунд в меню uboot. Нажав «1», вы попадете в меню tftpboot. Оттуда введите IP- адрес маршрутизатора (произвольный в подсети, в которой работает ваш tftpd-сервер ), а также IP- адрес машины, на которой запущен tftpd, и имя файла для загрузки («initramfs.bin»).
Можно оттуда поправить (т.е. sysupgradeили mtd writeвсе прошить с нуля).
Так вот с файлом * initramfs-kernel.bin (далее «initramfs.bin») у меня ничего не получилось!
Сам файл загружается либо в оперативную память, цифра 1, либо во флэш - цифра 2 тут все нормально. НО! Потом невозможно произвести никаких действий т. е. тупо роутер ничего не запоминает, работа идет с оперативной памятью и при выдергивании роутера из розетки (именно выдергивании, а не перезагрузки) все "забывается" и опять начинается с "чистого листа", сети Wi-Fi при этом нет. Не возможно поставить OpenWrt она просто не ставится (не апгрейд, не полная установка)
На Githubе (https://github.com/ITMO-lab/) я нашел рекомендации по установке файла: openwrt-ramips-mt7621-xiaomi_mir3p-initramfs-kernel.bin в флэш память, цифра 2. И на самом деле с этим файлом все установилось, если применять затем файл sysupgrade http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-squashfs-sysupgrade.bin стандартно из усnановленной OpenWrt.
Сначала я подумал что все это происходит из за разных версий ядер (у этого файла это 4.14.132 , у последней OpenWrt -4.14.195 от 10 сентября 2020), но после нескольких экспериментов это оказалось не так
Этот файл с Githubа мне совершенное не нравился, так как не понятно откуда он получен, ссылок на сайте никаких нет, при анализе оказывается что там не такое свежее ядро 4.14.132, ночная сборка и так далее - а левые файлы нам вот совсем не нужны. Но возможно он вам чем то поможет поэтому хранится в папке для прошивки вместе со всеми остальными файлами в подпапке "Reserv" И самое главное при анализе этого файла у него был странный размер 7074КБ, размеры всех стандартных файлов с сайта OpenWrt initramfs.bin, а так же sysupgrade.bin примерно меньше в два раза, а вот файла factory чуть больше, около 8192КБ. Поэтому я решил все прошить именно этим файлом т. е. в U-boot выбираем цифру 2 и прошиваемся файлом factory
http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-squashfs-factory.bin
У меня все получилось настройки сохраняются, WI-FI есть. Но полной уверенности что на систему роутера не повлиял файл с Githubа у меня нет поэтому я и оставил его в папке, подпапка "Reserv"
Что за файл openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-initramfs-kernel.bin" в "initramfs.bin"?
А это файл прошивки, но который предназначен для оперативной памяти устройства и не использует флэш-память вообще, т. е. после перезагрузки он исчезнет, если будет загружен в оперативную память. Нужен обычно для модификации роутера под дальнейшую загрузку, другой прошивки. Он напоминает диск восстановления в Windows как например LiveCD. Структура этого файла отличается от обычного файла прошивки так как сам этот образ должен произвести первичные настройки
НО! Мы этот файл запишем на Флэш, вы можете его записать и в оперативную память и OpenWrt загрузится, только вот при попытке поставить OpenWrt во Флэш будет выдавать ошибки (кстати на сайте OpenWrt указано что нужно выбирать 1 в U-boot , а это не правильно, так роутер у меня не загрузился)
Этот файл мне не понадобился, но его можно скачать ниже.
Идем сюда: https://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/ и выбираем файл *initramfs-kernel.bin вот такой: xiaomi_mir3p-initramfs-kernel.bin, впрочем вот прямая ссылка на него: https://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-initramfs-kernel.bin
Конец отступления.
По умолчанию адреса следующие, лучше не менять
- IP адрес роутера 192.168.1.1
- ваш IP адрес 192.168.1.3
Просто нажимаете ввод
Имя файла нужно ввести своё.
Мы будем прошивать файл для первичной установки системы OpenWrt (в папке переименован в factory) вот ссылка на OpenWrt
http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-squashfs-factory.bin
Введите его, но не нажимайте ввод
Вот так
Нажатие одной кнопки отделяет нас от прошивки роутера
Сначала нужно:
1) Подключиться по LAN кабелю к роутеру, если вы это не сделали ранее
2) Прописать сетевые настройки в Windows
3) Загрузить сервер TFTP (например tftpd32 или tftpd64)
Сетевые настройки в Windows прописываем так:
- Ваш IP адрес: 192.168.1.3
- Маска подсети: 255.255.255.0
- Шлюз: 192.168.1.1 (можно не вводить)
Загружаем программу, если вы этого не сделали ранее, tftpd32 или tftpd64 Официальный сайт программы http://www.tftpd64.com/ (интересно что при заходе на сайт пишет что сайт заблокирован и содержит вредоносное ПО) поэтому программа tftpd64 на моем сайте
Это программа подключается к роутеру по протоколу TFTP
Что такое TFTP?
TFTP (Trivial File Transfer Protocol — простой протокол передачи файлов используется для первоначальной загрузки бездисковых рабочих станций, роутеров, маршрутизаторов и так далее, не содержит возможностей аутентификации, только фильтрация по IP-адресу. Основан на транспортном протоколе UDP.
Запускаем программу tftpd32 или tftpd64 и настраиваем "Server interfaces " на ту сетевую плату куда подключен роутер, вот так
Кстати, я хотел подключится через USB-LAN адаптер (сетевую карту в USB порту) ASIX AX88772 USB2.0 to Fast Ethernet Adapter, но через него не работало TFTP
Вот теперь жмем ввод в окне Putty и видим как побегут циферки и буковки и даже надписи в окне терминала. tftpd64 перегрузит прошивку в роутер
И когда возникнет вот такое окно, а светодиод загорится белым
Поздравляю, вы залили прошивку, но только первую
Не выключая роутера, сразу заходим в браузер по адресу 192.168.1.1 и видим
Пароль вводить не надо, там пусто и попадаем в Web интерфейс. Идем вот сюда System>Backup/Flash Firmware
И нажимаем сюда
Теперь прошьем еще раз, на всякий случай и так все работает, но сделаем как нужно.
Прошиваем файлом "sysupgrade" т. е. файлом для апгрейда прошивки при такой прошивке все прошьется и роутер ругаться не будет.
Если вы станете лить файл "factory" то роутер уйдет в циклическую перезагрузку и так и будет загружаться по кругу бесконечно, это хорошо видно через терминал по Serial порту
Итак выбираем "sysupgrade"
http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7621/openwrt-19.07.4-ramips-mt7621-xiaomi_mir3p-squashfs-sysupgrade.bin
У нас выскакивает такое вот окно, перевод ниже
Я снял галочку с "Keep settings and retain the current configuration " так как настроек у нас нет и не было, но на самом деле галочку можно оставить .
Все обновление завершилось, введите свой пароль и перезагрузите роутер, можно так
или выдернув из розетки.
Но нужно обязательно выдернуть из розетки и обратно подключить
Тем самым мы проверим, что прошивка без проблем загружается, а не находится, например в оперативной памяти (У меня так было из за невнятной инструкции на OpenWrt)
Поздравляю Вы прошили роутер и ушли от китайских иероглифов!
Но все только начинается далее мы будем работать с OpenWrt, настраивать ее и добавлять новые пакеты.
Продолжение следует мои уже ставшими красноглазыми друзья. И добро пожаловать к пингвинам!
Статьи по теме:
Подписывайтесь на наш канал TehnoZet-2, там много интересного! Мы только развиваемся! Понравилась статья, хотите продолжения - ставьте лайк, жмите палец вверх!