Как я портировал OpenWrt на роутер от МТС, который OpenWrt скоро будет поддерживать

У многих абонентов МТС дома стоит TP‑Link EX220: провайдер ставил его при подключении. Смотришь на страницу устройства в вики OpenWrt, а там написано, что EX220 v1 поддерживается. Скачиваешь образ, начинаешь прошивать и получаешь молчание в консоли.
Дело в том, что под одним и тем же названием продаются две разные платы. Это история о том, как я это обнаружил, портировал OpenWrt на неподходящую ревизию и отправил поддержку в официальный репозиторий. В конце просьба: ежели у вас лежит такой роутер — помогите довести дело до конца, пж.
Две платы под одной наклейкой
Поддерживаемый в OpenWrt EX220 v1 — это по сути Archer AX23: MT7621, 16 МБ SPI‑NOR флеша.
Мой экземпляр с наклейкой «EX220(RU)MTS Ver:1.30» внутри оказался другим:
67 | EX220 v1 (поддерживается) | EX220(RU)MTS Ver:1.30 |
|---|---|---|
SoC | MT7621 | MT7621AT |
Флеш | 16 МБ SPI‑NOR | 128 МБ параллельной NAND (ESMT F59L1G81MB) за NMBM |
ОЗУ | 128 МБ | 128 МБ |
Wi‑Fi | MT7915 | MT7915E, 2×2 на 2,4 и 5 ГГц |
Коммутатор | MT7530 | MT7530, 5 портов |



Снизу виден главный отличительный признак — чип параллельной nand ESMT F59L1G81MB в корпусе TSOP-48. У SPI‑версии флеш — маленькая восьминогая микросхема, спутать трудно.
Со стороны разницы не видно, а для прошивки она решающая. Другой контроллер флеша, другая разметка, другой загрузчик, образ для SPI‑NOR на этой плате не запустится:(
Отличить можно по строке в загрузочном логе U‑Boot:
NAND: 128 MiB
NMBM has been initialized successfullyЕсли видите такое, у вас та же ревизия, что у меня.
Консоль
Без UART тут делать нечего. Контакты консоли — четыре неподписанных отверстия на нижней стороне палты (на фото выше обведены жёлтым) Если считать от дальнего от Ethernet‑портов: 1 — TX, 2 — RX, 3 — земля, 4 — питание 3,3 В, 4 контакт не подключать!
Уровни 3,3 В, скорость 115200. Если консоль молчит, первым делом поменяйте TX и RX местами.
Первые грабли: на 921 600 консоль работает, но ядро намертво зависает на строке про 16550A. Только 115200.
Разметка и загрузка
Заводской загрузчик у этой платы умеет одно: bootcmd=mtkautoboot.
Никакого выбора слота, никаких переменных для A/B. Поэтому я не стал его трогать и подстроился под то, что он ожидает:
kernel 0x0d00000 +0x0400000 сырой FIT-образ, его грузит заводской загрузчик
ubi 0x1100000 +0x2700000 UBI: rootfs + rootfs_dataЯдро лежит там, где его ищет стоковый загрузчик, а корневая ФС уехала в UBI. Плюсы такого решения: загрузчик остаётся заводским (кирпич из‑за него исключён), sysupgrade работает штатно, а overlay получается около 24 МБ вместо тех крох, что достаются на 16-мегабайтных платах.
Для первой установки нужна консоль: из U‑Boot грузим initramfs прямо в ОЗУ (loady по YMODEM или TFTP), флеш на этом этапе не трогаем. Из работающего initramfs уже ставим sysupgrade‑образ. Если YMODEM оборвётся (у меня стабильно рвался примерно на четвёртой минуте), достаточно повторить loady из того же загрузчика: образ идёт в память, флеш не задет.
Самое интересное: калибровка Wi‑Fi
Загрузилось, Wi‑Fi поднялся, а сигнал так себе. Сравнил с заводской прошивкой в той же точке:
Заводская калибровка | Запасная из пакета mt76 | |
|---|---|---|
Уровень сигнала | -44 дБм | -82 дБм |
Скорость (HE‑MCS) | 11 | 3 |
Link Quality | 70/70 | 25/70 |
На обычных платах калибровка радио лежит в отдельном разделе флеша, и драйвер берёт её оттуда по смещению. Здесь такого раздела нет. Я долго искал и нашёл её в неожиданном месте: файлом внутри файловой системы JFFS2 в разделе misc_ro. Причём узлы JFFS2 сжаты zlib, поэтому в ядре понадобился CONFIG_JFFS2_ZLIB=y, иначе файл просто не читается.
В итоге при загрузке скрипт 11-mt76-caldata монтирует misc_ro только на чтение, достаёт нужные 0xE00 байт и отдаёт их драйверу. Проверять результат я стал по контрольной сумме EEPROM, которую драйвер реально загрузил (/sys/kernel/debug/ieee80211/phy*/mt76/eeprom), а не по наличию файла. Файл может лежать на месте, а драйвер при этом — работать на запасном.
И вот ловушка, на которую я наступил дважды: скрипт калибровки начинается со строки [ -e /lib/firmware/$FIRMWARE ] && exit 0. Если в образ попадёт запасной файл калибровки, извлечение не сработает никогда, и радио молча уйдёт на -82 дБм, по этому любой сбой извлечения теперь удаляет недописанный файл, а не оставляет его навсегда.
MAC адреса тоже нашлись: они лежат в misc_ro.
Что проверено
На моём экземпляре работает всё:
первичная установка и обновление через sysupgrade;
failsafe;
все пять портов;
оба диапазона Wi‑Fi с заводской калибровкой;
светодиоды и кнопки;
MAC с наклейки.
Роутер у меня работает точкой доступа уже месяц, в UBI ни одного битого блока.
Грабли сборки, если захотите повторить
makeне всегда пересобирает образ, если поменялось только описание платы (DTS). Сверяйте md5 образа до и после; не изменился — удаляйте старые образы изbin/targetsи собирайте заново.После экспериментов с другими платами
make defconfigможет тихо потерять профиль устройства. Проверяйте, что в.configестьCONFIG_TARGET_DEVICE_ramips_mt7621_DEVICE_tplink_ex220-v1-nand=y.Если работаете через раздел Windows, у файлов слетают права на 100755. В OpenWrt это заметят на ревью (у меня заметили), проверяйте
git ls-files -s.
Где сейчас патч и зачем мне вы
Поддержка отправлена в OpenWrt: ramips: add support for TP‑Link EX220 v1 (NAND) #24831. Все замечания ревью закрыты, CI зелёный. Но мейнтейнеры хотят, чтобы кто‑то ещё запустил прошивку на своём экземпляре, и это разумно: у меня плата одна, и нужно убедиться, что калибровка и разметка совпадают не только у меня...
Если у вас есть EX220 с наклейкой EX220 RUMTS Ver:1.30
Для начала нужно только фото наклейки. Ничего вскрывать и прошивать не надо.
Если ревизия совпадает и вы готовы помочь, дальше понадобится UART‑адаптер на 3,3В.
OpenWrt загружается в опепативную память без записи во флеш, роутер после перезагрузки возвращается на заводскую прошивку. Готовый образ дам, собирать ничего не нужно.Сверяем загрузочные логи, этого достаточно, чтобы подтвердить в заявке.
Писать можно в комментарии здесь или в тему на форуме OpenWrt. Всё объясню по шагам.
Когда патч примут, EX220 от МТС можно будет прошить официальным образом из OpenWrt, и у тысяч людей провайдерская коробка в шкафу превратится в нормальный роутер с Wi‑Fi 6.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.