Скрипт смены региона для GL-MG1300 — GitHub Gist.
Купил дорожный роутер GL.iNet Mango 2 (GL-MG1300), начал настраивать — и обнаружил значок CN в интерфейсе. Оказалась версия для китайского рынка, с региональными ограничениями. При покупке я такого поворота не ожидал.
Пошёл смотреть, как это решают на других роутерах GL.iNet. Нашлись примеры смены страны в заводском разделе factory. Стало понятно, что искать нужно не только в настройках или образе прошивки.
Готовые команды повторять не стал: инструкции были для других моделей, а разметка у них отличается. В factory лежат и заводские данные устройства. Ошибка с адресом записи тут может обойтись дороже самого эксперимента.
Где лежит CN
На моём MG1300 с прошивкой 4.10.1 раздел factory оказался устройством /dev/mtd2, размером 64 КиБ. Снял полную копию и сохранил на компьютер:
dd if=/dev/mtd2 of=/tmp/mg1300-factory-backup.bin bs=65536 count=1
Это команда для моей разметки: перед повторением нужно посмотреть /proc/mtd. И файл из /tmp обязательно забрать с роутера — после перезагрузки он исчезнет.
В первых 256 байтах кода страны не нашлось. Поиск по всему разделу показал отдельное CN по адресу 0x4088:
00004080 00 00 00 00 00 00 00 00 43 4e 00 00 00 00 00 00
C N
Были и другие совпадения, но внутри длинных строк. Делать «заменить всё» тут точно не стоит.
Как проверил адрес
Две знакомые буквы в дампе — ещё не доказательство. Посмотрел, как прошивка получает страну. В /lib/functions/gl_util.sh нашлось:
get_country_code() {
uci -q get board_special.hardware.country_code ||
cat /proc/gl-hw-info/country_code
}
Переопределения в настройках у меня не было. /proc/gl-hw-info/country_code возвращал CN.
А прямое подтверждение нашлось в описании оборудования. Свойство:
/sys/firmware/devicetree/base/gl_hw/factory_data/country_code
содержало два значения, разделённые нулевыми байтами:
factory
0x4088
То есть сама прошивка указывала, из какого раздела и по какому адресу брать страну. После этого уже можно было готовить изменение. Рядом, по адресу 0x4090, находится отдельное поле firmware_type; его я не трогал.
Что поменялось
Подготовил копию раздела с другим кодом страны. Проверил, что отличаются ровно два байта — 0x4088 и 0x4089. Остальные 65 534 байта остались прежними.
Затем записал образ, считал раздел обратно и сравнил целиком. Совпало. После перезагрузки значок CN исчез, нужные мне функции заработали.
По пути посмотрел читаемые скрипты прошивки. В нескольких местах они явно проверяют CN, а все остальные страны идут по общей ветке. Например, так выбирается китайский или международный сервер отправки диагностических логов. Само наличие этого кода не означает постоянную отправку логов: условия её запуска я тогда не проверял.
Это также не доказывает, что любые две буквы включат все возможности международной версии. Часть логики скомпилирована, её я целиком не разбирал.
Скрипт
Чтобы не повторять всё руками, оставил скрипт для GL-MG1300 на GitHub Gist. Запускать его нужно на роутере:
sh mg1300-region.sh # показать текущий регион
sh mg1300-region.sh --list # посмотреть возможные коды
sh mg1300-region.sh DE # проверить замену на DE
sh mg1300-region.sh DE --write # записать
DE здесь — пример вызова, а не рекомендация выбирать Германию независимо от места использования. Код страны может влиять на каналы и мощность Wi-Fi.
Перед записью скрипт проверяет модель, адрес поля по описанию оборудования и размер раздела. Сохраняет резервную копию, после записи читает весь раздел обратно и сравнивает. Перезагрузка — вручную.
Список потенциальных кодов взят из базы правил Wi-Fi моего роутера. Это не список проверенных способов разблокировки: наличие кода в базе ещё не гарантирует одинаковое поведение всех компонентов прошивки. EU там нет — для Европы используются коды отдельных стран.
Если будете повторять, сначала сохраните свой factory на компьютер. Чужой дамп сюда не подходит. Свой тоже не выкладывайте: внутри есть сертификаты и данные устройства.
Опыт других моделей GL.iNet помог понять, куда смотреть. Но адрес 0x4088 я проверял именно на GL-MG1300 с прошивкой 4.10.1. На другой модели начинать стоит с проверки разметки и способа чтения страны.