Резервне копіювання ваших даних 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:
Потім потрібно стерти байти контрольної суми:
Збережіть файл і прошийте його в розділ ART (див. наступний розділ).
Після перезавантаження маршрутизатора інтерфейси Wi-Fi не піднімуться через неправильну контрольну суму. У журналі будуть повідомлення типу: `Bad EEPROM checksum: 0xad22`
Запишіть ці значення контрольних сум для обох радіомодулів.
Поверніться в HEX-редактор:
Збережіть файл, прошийте його назад у маршрутизатор і насолоджуйтесь роботою Wi-Fi з правильними MAC-адресами.
Це можна зробити з рівня ОС (якщо розділ НЕ тільки для читання).
Якщо він лише для читання, можна:
insmod mtd-rw.ko i_want_a_brick=1
Це доволі просто: помістіть дамп розділу 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
Зі статичною 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)
Використайте адресу початку розділу з прикладу вище. Укажіть правильний розмір (завантажений файл), додавши префікс `+0x`:
erase 0xbf7f0000 +0x10000
Команда має вигляд:
cp.b 0x8000000 0xbf7f0000 0x10000