Wi-Fi адаптер через OTG

Ідея реалізації задуму за допомогою зовнішнього бездротового Wi-Fi адаптера або «свистка», що підтримує бажаний режим монітора, руйнувалася десятки разів через нові та нові помилки та втрату віри в те, що це взагалі можливо, але переросла в цю статтю.
Отже, як підключити зовнішній Wi-Fi адаптер до пристрою на Android або біг з перешкодами на дистанції "вставив - netcfg wlan0 up": Має бути:
- Телефон на Android
- Підтримка OTG та сам OTG
- Terminal Emulator
- ROOT
- Вихідники ядра
FAQ - структура виглядає так:

- Samsung GT-P5100 Galaxy Tab 2 10.1, Андроїд 4.2.2
- OTG "30-pin - USB"
- Terminal Emulator for Android
- ROOT
- Вихідники 3.0.31-1919150 з сайту Samsung
- Адаптер TP-LINK TL-WN722N на чіпсеті AR9271
- ath9k_htc/htc_9271.fw
- Дистрибутив Ubuntu 15.04 у VMware
- android-tools-adb
Насамперед необхідно видобути фірмвар вашого адаптера. Вставляю адаптер у комп'ютер і виконую команду dmesg. Знаходжу:
Потім встановлюю ADB:
apt-get install android-tools-adb
Третім етапом качаю тулчейн (компілятор під ARM) звідси. Там великий архів, мені потрібна лише папка. яку ярозпаковую у довільне місце.
Для початку пишу терміналі:
Потім переходжу в терміналі в каталог з вихідними джерелами ядра, завантаженими раніше, пишу
make help і отримую хмару інформації, серед якої потрібно знайти щось, що закінчується_defconfig, у мене це:
І на завершення запускаю графічну конфігурацію ядра:
З'являється таке вікно:

Просуваюся маршрутами:
-
Networking support → Wireless СпускаюсяGeneric IEEE 802.11 Networking stack (mac80211)і натискаю на пробіл, спостерігаючи появу значкаМперед цим пунктом
Device Drivers -> Network device support → Wireless LAN СтавлюМу свого чіпсету, в моєму випадку —Atheros Wireless CardsПотім переходжу в сам цей розділ і всередині відзначаю все тим же пробілом та знакомMпотрібний мені пункт.

Зберігаю. Повертаюся в термінал, а якщо ви його закрили, то і каталог з вихідними джерелами теж, і виконую спочатку make modules_prepare , а потім просто make . Результат вимагатиме очікування. Мій підсумковий набір:
adb start-server adb shell su
Дивлюся, які модулі вже є командою lsmod і вивантажую їх усі, якщо це можливо, командою rmmod ім'ямодуля
Потім переходжу до каталогу з переліченими вище модулями:
cd /sdcard/ваш шлях/
Можна переконатися у наявності командою ls .
Завантажую їх командою insmod ім'ямодуля в такій і тільки такій послідовності (інакше просто не завантажиться, видаючи помилку):
ath.ko ath9k_hw.ko ath9k_common.ko mac80211.ko ath9k_htc.ko
ІІІ. Перешкоди
Звичайно, перша помилка виникає на першому етапі.
Дивлюся, що скаже про це буфер повідомленьядра, виконавши команду dmesg :
Не збігаються версії.3.0.31немає3.0.31-1919150.
Відкриваю цейMakefileу вихідниках ядра і в самому верху файлу знаходжу:
VERSION = 3 PATCHLEVEL = 0 SUBLEVEL = 31 EXTRAVERSION = NAME = Sneaky Weasel
VERSION = 3 PATCHLEVEL = 0 SUBLEVEL = 31 EXTRAVERSION = -1919150 NAME = Sneaky Weasel
І зберігаю. Заключний етап пройде в каталозі/include/config, де у файліkernel.releaseя поміняю3.0.31на3.0.31- 1919150Знову make modules_prepare , make і далі за попереднім пунктом.
Завантажуючиmac80211.koзнову маю помилку, про яку dmesg скаже наступне:


Знову перекомпілюю модулі і рухаюся далі.
3. Світлодіод
При завантаженніath9k_htc.koтаmac80211.koчергові помилки, уmac80211.koце:
А уath9k_htc.koце:
У першому просто забирається в графічній конфігурації ядра значок[*]навпротиNetworking support → Wireless → Enable LED triggersтаDevice Drivers → LED Support.
А в другому цей значок заморожений і зняти його не можна. Це означає, що при виборі мого адаптера автоматично вибирається «підтримка» світлодіода, прибрати яку не можна. Звичайно, це мій випадок:


Кнопка допомогиDevice Drivers → LED Supportвиводить наступну інформацію по розділу:

… config ATH9K_HTC tristate «Atheros HTC базується на бездротових картках support» depends on USB && MAC80211 select ATH9K_HW select MAC80211_LEDS select LEDS_CLASS select NEW_LEDS select ATH9K_COMMON .
… configATH9K_HTC tristate «Atheros HTC базується на бездротових картках support» depends on USB && MAC80211 select ATH9K_HW select ATH9K_COMMON .
та зберігаю. Тепер можна знімати галочки:

Тут зовсім зник пункт:

Знову і знову перекомпіляція, нові модулі тощо.
4. Версія firmware
… [ 7582.477874] C0 [ khubd] ath9k_htc 1-1:1.0: ath9k_htc: Please upgrade to FW version 1.3 .

Просто качаємо інший фірмвар, але вже потрібної версії, і кладемо його замість минулого.
Тепер жодних проблем не повинно бути. Вимикаю рідний Wi-Fi, всі модулі завантажені, фірм вар потрібної версії. Вставляю адаптер іnetcfgвперше приносить щастя. Встановлюю для інтерфейсу, що з'явився, режим монітора і піднімаю його. Успіх!


Ну, а як і навіщо найчастіше використовується режим монітора, ви і так все знаєте. Дякую за увагу!

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»