Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

MT7981 + MT7915/MT7976 TX power patcher (V2 layout, split 2/5/6)

Language: EN

Скрипт для просмотра, генерации и патчинга полей мощности передачи (TX power) в EEPROM/Factory‑разделе устройств на базе SoC MT7981 с радиомодулями MT7915/MT7976. Поддерживает V2‑разметку полей, использующуюся в mt76 (OpenWrt).

Основан на исходниках mt76:

Внимание! Изменение калибровочных/производственных данных может привести к нестабильной работе, перегреву, выходу из строя устройства и/или нарушению требований регуляторов. Все действия на свой страх и риск.

Важное предупреждение про Factory

Не прошивайте полный дамп раздела Factory от другой модели! В Factory хранятся не только уровни мощности, но и масса калибровочных и модель‑специфичных данных (MAC‑адреса, температурные/радиочастотные калибровки, конфигурация Wi‑Fi и пр.). Прошивка «чужого» Factory часто ломает показания температуры, калибровки радиотракта и другие вещи, которые можно сразу не заметить.

Этот скрипт намеренно изменяет только поля мощности TX в V2‑разметке и больше ничего:

  • 2.4 ГГц: MT_EE_TX0_POWER_2G_V2 @ 0x441 (4 байта)
  • 5 ГГц: MT_EE_TX0_POWER_5G_V2 @ 0x445 (20 байт)
  • 6 ГГц: MT_EE_TX0_POWER_6G_V2 @ 0x465 (32 байта)

Остальные поля из eeprom (см. mt76 mt7915/eeprom.h), такие как MAC‑адреса, версии FT, rate‑delta, PRECAL/групповые калибровки и т.д., скрипт не трогает. Пример (фрагмент enum из драйвера):

MT_EE_MAC_ADDR       = 0x004,
MT_EE_WIFI_CONF      = 0x190,
MT_EE_RATE_DELTA_*   = 0x252 / 0x29d / 0x7d3 / 0x81e / 0x884,
MT_EE_TX0_POWER_*    = 0x2fc / 0x34b (V1), 0x441 / 0x445 / 0x465 (V2),
MT_EE_PRECAL         = 0xe10 (V1), 0x1010 (V2),

Рекомендуемая практика:

  • Работайте только со своим дампом Factory: скрипт делает копию в /tmp/factory_dump.bin и патчит её.
  • Не заливайте «чужие» полные дампы. Если нужно — перенесите только значения мощности через пресеты этого скрипта.

Возможности

  • Автопоиск раздела “Factory” в /proc/mtd и создание дампа в /tmp/factory_dump.bin
  • Просмотр зон (2.4/5/6 ГГц) в дампе/файле с указанием смещений
  • Генерация «пресетов» из существующего Factory‑дампа для последующего копипаста
  • Применение пресетов к выбранным диапазонам (2g/5g/6g/all)
  • Двуязычный интерфейс: en/ru

Под «пресетом» понимается набор байтов для каждой из зон (2g/5g/6g), заданный переменными вида:

  • preset_<имя>_2g = 4 байта
  • preset_<имя>_5g = 20 байт
  • preset_<имя>_6g = 32 байта

Разметка (V2)

Смещения в Factory/EEPROM согласно mt76 (V2 layout):

  • MT_EE_TX0_POWER_2G_V2 = 0x441 (4 байта)
  • MT_EE_TX0_POWER_5G_V2 = 0x445 (20 байт)
  • MT_EE_TX0_POWER_6G_V2 = 0x465 (32 байта)

Структура зон:

  • 2.4 ГГц: 4 байта = 4 цепи по 1 байту
  • 5 ГГц: 20 байт = 4 цепи × 5 групп
  • 6 ГГц: 32 байта = 4 цепи × 8 групп

Байты — это калибровочные значения, считываемые драйвером mt76 из EEPROM. Это не прямые dBm, а индексы/уровни, интерпретируемые кодом драйвера. Контрольных сумм для этих полей драйвер не требует.

Требования

  • OpenWrt или совместимая среда с BusyBox/posix sh
  • hexdump, dd, grep, awk, sed
  • Доступ к /proc/mtd и /dev/mtdX (для автодампа)
  • Права на запись, если планируется прошивка изменённого Factory обратно

Быстрый старт

  1. Посмотреть зоны из текущего Factory (скрипт сам сделает дамп):
./txpwr.sh
  1. Сгенерировать пресеты из файла factory.bin:
./txpwr.sh -g -f factory.bin -p myrouter -b all

Скрипт выведет блок переменных preset_myrouter_2g/5g/6g, которые можно скопировать в скрипт.

  1. Применить готовый пресет ко всем доступным зонам в дампе:
./txpwr.sh -p wr3000p

Скрипт:

  • найдёт Factory
  • создаст /tmp/factory_dump.bin
  • пропатчит выбранные зоны в дампе
  • покажет до/после
  • не пишет обратно в MTD автоматически

Запись изменённого дампа в Factory

ОЧЕНЬ ОСТОРОЖНО! Перед записью обязательно сделайте резервную копию исходного раздела. Важно: см. раздел «Важное предупреждение про Factory».

  1. Разрешить запись в MTD (в некоторых сборках OpenWrt запись может быть защищена):
opkg update && opkg install kmod-mtd-rw
insmod mtd-rw i_want_a_brick=1

Примечания:

  • Этот модуль обходит защиту записи и может повредить устройство.
  • Требует совместимую версию с вашим ядром.
  • Настройка не сохраняется после перезагрузки — загружайте модуль заново при необходимости.
  1. Сделать резервную копию Factory:
dd if=/dev/mtdX of=/tmp/factory_backup.bin
# либо:
cat /dev/mtdX > /tmp/factory_backup.bin

Где /dev/mtdX соответствует разделу «Factory» (проверьте /proc/mtd).

  1. Записать пропатченный дамп:
mtd write /tmp/factory_dump.bin Factory

Либо прямой записью (рискованнее, используйте только если точно понимаете последствия):

dd if=/tmp/factory_dump.bin of=/dev/mtdX
  1. При проблемах откатитесь бэкапом:
mtd write /tmp/factory_backup.bin Factory

Подтверждение и неинтерактивный режим

Скрипт спрашивает подтверждение перед патчем. Чтобы применить без ручного ввода:

printf 'y\n' | ./txpwr.sh -p ax3000t -b all

Или на свой страх и риск модифицируйте скрипт, убрав запрос подтверждения.

Локализация

Язык интерфейса по умолчанию: en. Можно указать:

  • флагом:
./txpwr.sh -L ru
  • или переменной среды:
TXPWR_LANG=ru ./txpwr.sh

Примеры использования

  • Показать зоны из конкретного файла:
./txpwr.sh -f /path/to/factory.bin
  • Сгенерировать пресет только для 5 ГГц:
./txpwr.sh -g -f factory.bin -p office -b 5g
  • Применить пресет только к 6 ГГц:
./txpwr.sh -p rax3000me -b 6g
  • Применить пресет ко всем доступным зонам:
./txpwr.sh -p wbr3000uax -b all

Встроенные пресеты

В скрипт включены примеры:

  • ax3000t: preset_ax3000t_2g / _5g / _6g
  • wbr3000uax: preset_wbr3000uax_2g / _5g / _6g
  • wr3000p: preset_wr3000p_2g / _5g / _6g
  • rax3000me: preset_rax3000me_2g / _5g / _6g

Посмотреть доступные пресеты:

./txpwr.sh -h

В конце help‑вывода будет список найденных preset__*.

Как добавить свой пресет

  1. Сгенерируйте из исходного дампа:
./txpwr.sh -g -f factory.bin -p mydevice -b all
  1. Вставьте сгенерированные строки в скрипт рядом с другими preset_*.
  2. При необходимости отредактируйте значения (HEX‑байты).
  3. Примените:
./txpwr.sh -p mydevice -b all

Что именно патчится

  • 2g: 0x441, 4 байта (цепи 0..3)
  • 5g: 0x445, 20 байт (4 цепи × 5 групп)
  • 6g: 0x465, 32 байта (4 цепи × 8 групп)

Скрипт печатает текущие байты по смещениям и то, что будет записано. Запись делается в указанный файл (обычно /tmp/factory_dump.bin), без изменения MTD‑устройства напрямую.

Частые вопросы

  • Нужно ли править контрольные суммы?

    • Для этих полей в V2‑разметке mt76 дополнительных контрольных сумм не требуется.
  • Чем являются эти байты?

    • Это калибровочные/индексные значения мощности по цепям и группам каналов, интерпретируемые драйвером mt76 (см. eeprom.h/eeprom.c).
  • Можно ли применять только к 2.4 ГГц?

    • Да: укажите -b 2g. Аналогично для 5g/6g/all.
  • Скрипт пишет прямо в /dev/mtd?

    • Нет, по умолчанию он делает дамп в /tmp/factory_dump.bin и патчит его. Обратную запись вы делаете вручную отдельной командой.

Соответствие исходникам mt76

Смещения и размеры зон взяты из:

  • mt7915/eeprom.h: константы MT_EE_TX0_POWER_*_V2
  • mt7915/eeprom.c: логика чтения калибровочных полей

Это гарантирует, что читаемые/записываемые байты соответствуют ожидаемой драйвером структуре для V2.

Лицензия

См. файл LICENSE.

Благодарности

  • Команде OpenWrt и разработчикам mt76 за открытый код драйвера и документацию по EEPROM.
  • Людям, предоставившим дампы раздела Factory, что помогло сравнить мощности передачи разных моделей.

About

MT7981 + MT7915/MT7976 TX power patcher for Factory partition (2.4/5/6 GHz, presets + dump-based editing, EN/RU)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Contributors

Languages