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

wi-fi

Ідея реалізації задуму за допомогою зовнішнього бездротового Wi-Fi адаптера або «свистка», що підтримує бажаний режим монітора, руйнувалася десятки разів через нові та нові помилки та втрату віри в те, що це взагалі можливо, але переросла в цю статтю.

Отже, як підключити зовнішній Wi-Fi адаптер до пристрою на Android або біг з перешкодами на дистанції "вставив - netcfg wlan0 up": Має бути:

  1. Телефон на Android
  2. Підтримка OTG та сам OTG
  3. Terminal Emulator
  4. ROOT
  5. Вихідники ядра

FAQ - структура виглядає так:

wi-fi

  • Зовнішній Wi-Fi адаптер («свисток»)
  • Його firmware
  • Linux дистрибутив
  • ADB (не обов'язково, але так зручніше)
  • Мій випадок:

    1. Samsung GT-P5100 Galaxy Tab 2 10.1, Андроїд 4.2.2
    2. OTG "30-pin - USB"
    3. Terminal Emulator for Android
    4. ROOT
    5. Вихідники 3.0.31-1919150 з сайту Samsung
    6. Адаптер TP-LINK TL-WN722N на чіпсеті AR9271
    7. ath9k_htc/htc_9271.fw
    8. Дистрибутив Ubuntu 15.04 у VMware
    9. android-tools-adb
    Почну. Але попрошу врахувати, що далі все розглядається для переліченого вище набору і алгоритм, швидше за все, не є універсальним, але відхиленнянезначні.

    Насамперед необхідно видобути фірмвар вашого адаптера. Вставляю адаптер у комп'ютер і виконую команду dmesg. Знаходжу:

    Потім встановлюю ADB:

    apt-get install android-tools-adb

    Третім етапом качаю тулчейн (компілятор під ARM) звідси. Там великий архів, мені потрібна лише папка. яку ярозпаковую у довільне місце.

    Для початку пишу терміналі:

    Потім переходжу в терміналі в каталог з вихідними джерелами ядра, завантаженими раніше, пишу

    make help і отримую хмару інформації, серед якої потрібно знайти щось, що закінчується_defconfig, у мене це:

    І на завершення запускаю графічну конфігурацію ядра:

    З'являється таке вікно:

    wi-fi

    Просуваюся маршрутами:

      Networking support → Wireless СпускаюсяGeneric IEEE 802.11 Networking stack (mac80211)і натискаю на пробіл, спостерігаючи появу значкаМперед цим пунктом

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

    wi-fi

    Зберігаю. Повертаюся в термінал, а якщо ви його закрили, то і каталог з вихідними джерелами теж, і виконую спочатку 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 скаже наступне:

    wi-fi

    wi-fi

    Знову перекомпілюю модулі і рухаюся далі.

    3. Світлодіод

    При завантаженніath9k_htc.koтаmac80211.koчергові помилки, уmac80211.koце:

    А уath9k_htc.koце:

    У першому просто забирається в графічній конфігурації ядра значок[*]навпротиNetworking support → Wireless → Enable LED triggersтаDevice Drivers → LED Support.

    А в другому цей значок заморожений і зняти його не можна. Це означає, що при виборі мого адаптера автоматично вибирається «підтримка» світлодіода, прибрати яку не можна. Звичайно, це мій випадок:

    wi-fi

    wi-fi

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

    wi-fi

    … 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 .

    та зберігаю. Тепер можна знімати галочки:

    wi-fi

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

    select

    Знову і знову перекомпіляція, нові модулі тощо.

    4. Версія firmware

    … [ 7582.477874] C0 [ khubd] ath9k_htc 1-1:1.0: ath9k_htc: Please upgrade to FW version 1.3 .

    адаптер

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

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

    адаптер

    адаптер

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

    адаптер

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