Відновлення ARТ

Резервне копіювання ваших даних ART — це мудрий запобіжний захід, оскільки вони є незамінними.

Ця процедура не застосовується для копіювання даних ART з одного маршрутизатора на інший!

Дані ART сучасних маршрутизаторів зазвичай специфічні для конкретного пристрою і містять калібрувальні дані.

Хоча ваш маршрутизатор може здаватися справним, цілком можливо, що він працює неправильно, потенційно поза межами допустимих параметрів.

Порушення параметрів часто є незаконним і може викликати перешкоди для інших бездротових пристроїв — як ваших, так і сусідських.

Зверніть увагу, що вказані інструменти непридатні для маршрутизаторів на основі NAND і можуть спричинити додаткові пошкодження, якщо їх використовувати.

Уся процедура була протестована на Netgear WNDAP360 та BUFFALO WZR-HP-AG300H

Переконайтесь, що зміщення (offsets) у вашому розділі / пристрої збігаються!! (перевіривши MAC)

Під час експериментів із моїм маршрутизатором я пошкодив розділ ART.

Якщо розділ ART буде стертий або пошкоджений, радіомодулі ath не зможуть запуститися.

Розділ ART містить калібрувальні дані, тому, якщо ви не створили резервну копію, ваші радіомодулі можуть працювати гірше, ніж раніше (я все ж вважаю, що краще, щоб вони працювали хоч якось, ніж не працювали взагалі :) ).

Ідеальна ситуація — ви створили резервну копію розділу ART. Це легко зробити в OpenWrt та деяких стокових прошивках на базі Linux через консоль.

На пристрої знайдіть розділ ART:

cat /proc/mtd

Шукайте рядок, що містить `art` або `ART`.

(Припустимо, у мене це `mtd5`)

Зробіть дамп:

dd if=/dev/mtd5 of=/tmp/art.backup

Скопіюйте цей файл на ПК (через SSH або іншим способом).

Якщо у вас є резервна копія — переходьте до розділу 'Flash-ування розділу ART'. Якщо ні... доведеться покладатися на удачу і зробити трохи більше роботи.

Якщо ви не створили резервну копію свого розділу ART, потрібно отримати цей розділ від користувача з таким самим пристроєм (я не пробував з іншими моделями). Оскільки MAC зберігається в цьому розділі, його потрібно змінити. Але важливо знати: контрольні суми деяких частин повинні дорівнювати `0xffff` (згідно з драйвером ath9k). Якщо контрольна сума неправильна — радіомодуль не запуститься.

На ПК відкрийте файл дампу (назвемо його `art.backup`) у будь-якому HEX-редакторі (я використовував `ghex`).

Мій пристрій має два радіомодулі, отже два MAC-и та дві контрольні суми.

Для зміни MAC:

  • Перейдіть до зсуву `0x120c` для `radio0` (у мене це 2.4GHz) і змініть MAC на свій (уважно — не змінюйте більше байтів!).
  • Перейдіть до зсуву `0x520c` для `radio1` (5GHz) і змініть MAC (я додав 1 до MAC з 2.4GHz).

Потім потрібно стерти байти контрольної суми:

  • Перейдіть до зсуву `0x1202` (radio0) і вставте `FF FF`
  • Перейдіть до `0x5202` (radio1) і також вставте `FF FF`

Збережіть файл і прошийте його в розділ ART (див. наступний розділ).

Після перезавантаження маршрутизатора інтерфейси Wi-Fi не піднімуться через неправильну контрольну суму. У журналі будуть повідомлення типу: `Bad EEPROM checksum: 0xad22`

Запишіть ці значення контрольних сум для обох радіомодулів.

Поверніться в HEX-редактор:

  • Перейдіть до зсуву `0x1202` (radio0) і запишіть байти з повідомлення (наприклад `AD 22`)
  • Перейдіть до `0x5202` (radio1) і зробіть те саме для другого модуля

Збережіть файл, прошийте його назад у маршрутизатор і насолоджуйтесь роботою Wi-Fi з правильними MAC-адресами.

Це можна зробити з рівня ОС (якщо розділ НЕ тільки для читання).

Якщо він лише для читання, можна:

  • встановити або зібрати пакет kmod-mtd-rw і тимчасово дозволити запис:
insmod mtd-rw.ko i_want_a_brick=1
  • або змінити це у вихідному коді OpenWrt і перекомпілювати ядро
  • або використати U-Boot для запису

Це доволі просто: помістіть дамп розділу ART у `/tmp`, а потім виконайте:

mtd -r write /tmp/art.backup art

Ця команда автоматично перезавантажить пристрій після прошивки, і це необхідно.

Якщо ж ваш розділ тільки для читання, і ви не маєте доступу до консолі, вам потрібно зробити його доступним для запису, змінивши визначення розділу у `images/Makefile`, після чого перекомпілювати прошивку і встановити її на пристрій. Також можна використати модуль ядра для запису ART без перекомпіляції — див. kmod-mtd-rw.

Після виправлення розділу ART НАПОЛЕГЛИВО рекомендую встановити коректну прошивку назад, де розділ ART буде знову тільки для читання.

ВАЖЛИВО: Якщо ви зробите помилку на цьому етапі — ви можете назавжди пошкодити пристрій (brick)!

Якщо у вас є доступ до робочої консолі і ваш розділ ART доступний тільки для читання (що трапляється часто), ви можете скористатися цим методом. Конкретні дії залежать від моделі маршрутизатора, але загальна інструкція така:

Перед початком

Переконайтесь, що ви точно знаєте, де починається ваш розділ ART. Подивіться `dmesg` або `logread` — там будуть записи на кшталт:

0x000000000000-0x000000040000 : "u-boot"
0x000000040000-0x000000050000 : "u-boot-env"
0x000000050000-0x000000200000 : "kernel"
0x000000200000-0x0000007f0000 : "rootfs"
0x0000003f0000-0x0000007f0000 : "rootfs_data"
0x0000007f0000-0x000000800000 : "art"
0x000000050000-0x0000007f0000 : "firmware"

Отже, в моєму випадку ART починається з `0x0000007f0000`, що на платформі Atheros (AR7161) у `uBoot` відповідає:

0xbf7f0000

Для цього вам потрібен робочий TFTP-сервер

Зі статичною IP-адресою, яку uBoot очікує як `serverip` (перевірити можна командою `printenv` у консолі uBoot).

Перевірте стартову адресу пам’яті:

bdinfo

Припустимо, вона становить:

0x80000000

Завантаження образу в пам’ять

ar7100> tftpboot 0x80000000 art.backup
Trying eth0
Using eth0 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename 'art.backup'.
Load address: 0x8000000
Loading: #################################################################
done
Bytes transferred = 65536 (10000 hex)

Зверніть увагу на розмір завантаженого файлу: `10000` (hex)

Стирання старого розділу ART

Використайте адресу початку розділу з прикладу вище. Укажіть правильний розмір (завантажений файл), додавши префікс `+0x`:

erase 0xbf7f0000 +0x10000

Копіювання з пам’яті у flash

Команда має вигляд:

cp.b 0x8000000 0xbf7f0000 0x10000
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/30 07:01
  • by vazaz