PunchKano begins diphtheria immunisation in five Kano LGsRTP DesportoFrancisco Cabral na final de pares em HangzhouESPN DeportesGrecia derrotó a Alemania por primera vez en la historia y golpeó a Klopp en su debut ante su públicoThe Jerusalem PostIsrair awaits final approval for Tokyo, Miami flights, adds new European destinations for 2027Daily MaverickWe worried AI would make things up, we should also worry when it doesn’tInquirerRains to continue in Visayas, Mindanao due to ITCZ until Sept. 30Bollywood HungamaVinod Kapri's Pyre to release in theaters on October 23, 2026BlickNächstes Amt abgelegt: Jens Spahn zieht sich aus Haushaltsausschuss zurückRapplerPhilippines should fix tax gaps and procurement, not raise tax rates – WBSportstarIndia in Athletics LIVE Updates, Asian Games 2026: Vithya Ramraj breaks National Record to win 400m hurdles bronze; Javelin throw final at 4:45 PM ISTIl Fatto QuotidianoMorto Stefano Milani, il tifoso del Milan diventato famoso su X. Da Bertolucci a Valenti: “Ha lottato come nessuno, mai un passo indietro”7sur7“Pourquoi je perds toujours?”: quand André Agassi taquine Alexander Zverev
The Daily Newsstand · Free, Always
Monday, September 28, 2026

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

Translate

У многих абонентов МТС дома стоит 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 портов

Так выглядит нужная ревизия, строка EX220 (RUMTS) Ver:1.30 на наклейке снизу

Так выглядит нужная ревизия, строка EX220 (RUMTS) Ver:1.30 на наклейке снизу

Плата сверху, ревизия продублирована наклейкой на разъёмах

Плата сверху, ревизия продублирована наклейкой на разъёмах

Плата роутера снизу

Плата роутера снизу

Снизу виден главный отличительный признак — чип параллельной 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

  1. Для начала нужно только фото наклейки. Ничего вскрывать и прошивать не надо.

  2. Если ревизия совпадает и вы готовы помочь, дальше понадобится UART‑адаптер на 3,3В.
    OpenWrt загружается в опепативную память без записи во флеш, роутер после перезагрузки возвращается на заводскую прошивку. Готовый образ дам, собирать ничего не нужно.

  3. Сверяем загрузочные логи, этого достаточно, чтобы подтвердить в заявке.

Писать можно в комментарии здесь или в тему на форуме OpenWrt. Всё объясню по шагам.

Когда патч примут, EX220 от МТС можно будет прошить официальным образом из OpenWrt, и у тысяч людей провайдерская коробка в шкафу превратится в нормальный роутер с Wi‑Fi 6.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.