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 с сайта Самсунг
- Адаптер TP-LINK TL-WN722N на чипсете AR9271
- ath9k_htc/htc_9271.fw
- Дистрибутив Ubuntu 15.04 в VMware
- android-tools-adb
Начну. Но попрошу учесть, что далее все рассматривается для вышеперечисленного набора и алгоритм, скорее всего, не является универсальным, но отклонения незначительны.
I. Старт
Первым делом необходимо добыть фирмварь вашего адаптера. Вставляю адаптер в компьютер и выполняю команду dmesg . Нахожу:
Где слово правее слова driver — искомая информация. У меня это — ath9k_htc. Гуглю для него firmware. Качаю. Закидываю .fw-файл на телефон в /system/etc/firmware
Затем устанавливаю ADB:
apt-get install android-tools-adb
Третьим этапом качаю тулчейн (компилятор под ARM) отсюда. Там большой архив, мне нужна лишь папка android-platform_prebuilt-android-sdk-adt_r20-0-ga4062cc.zip\android-platform_prebuilt-a4062cc\linux-x86\toolchain\arm-eabi-4.4.3, которую я распаковываю в произвольное место.
II. Разгон
Для начала пишу терминале:
Затем перехожу в терминале в каталог с исходниками ядра, загруженными ранее, пишу
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 . Результат потребует ожидания. Мой итоговый набор:
Потребуются модули (.ko-файлы), включающие слово ath и mac80211.ko. Переношу их на телефон.
Можно использовать adb, работая через компьютер, а можно не использовать и работать через терминал телефона, печатая команды пальцами по экрану. Я выбрал adb.
Напомню, как он работает. Подключаю телефон через USB (отладка, естественно, включена) и выполняю:
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
III. Препятствия
В этом и вся соль, без которой статья была бы слишком простой.
1. Версии
Естественно, первая ошибка возникает на первом этапе.
Смотрю, что скажет об этом буфер сообщений ядра, выполнив команду 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 и далее по предыдущему пункту.
2. ewma
Загружая mac80211.ko снова имею ошибку, о которой dmesg скажет следующее:
Чудом прочитав на одном из англоязычных форумов опасное, но единственное в интернете, «решение», я перехожу в /net/mac80211/ и в файлах rx.c и sta_info.c и просто удаляю [либо комментирую (//)] строки ewma_add(&sta->avg_signal, -status->signal); и ewma_init(&sta->avg_signal, 1024, 8); соответственно.
Опять перекомпилирую модули и двигаюсь дальше.
3. Светодиод
При загрузке ath9k_htc.ko и mac80211.ko очередные ошибки, у mac80211.ko это:
А у ath9k_htc.ko это:
Если ieee80211_-ошибки от ath9k_htc.ko это потому что я пытаюсь его загрузить до mac80211.ko, то led_-ошибки от обоих модулей от того, что телефон не понимает, что делать со светодиодом на моем адаптере. Тут два варианта развития событий.
В первом просто убирается в графической конфигурации ядра значок [*] напротив
Networking support → Wireless → Enable LED triggers и Device Drivers → LED Support.
А во втором этот самый значок заморожен и снять его нельзя. Это значит, что при выборе моего адаптера, автоматически выбирается «поддержка» светодиода, убрать которую нельзя. Конечно же, это мой случай:
Кнопка помощи по Device Drivers → LED Support выводит следующую информацию по разделу:
…
config ATH9K_HTC
tristate «Atheros HTC based wireless cards support»
depends on USB && MAC80211
select ATH9K_HW
select MAC80211_LEDS
select LEDS_CLASS
select NEW_LEDS
select ATH9K_COMMON
.
…
config ATH9K_HTC
tristate «Atheros HTC based wireless cards support»
depends on USB && MAC80211
select ATH9K_HW
select ATH9K_COMMON
.
и сохраняю. Теперь можно снимать галочки:
Здесь и вовсе исчез пункт:
Опять и снова перекомпиляция, новые модули и т.п.
Вуаля. Все модули загружены. Выключаю Wi-Fi на телефоне и подключаю адаптер. Но светодиод на нем, как вы уже догадались, работать не будет. Оно и не нужно.
4. Версия firmware
…
[ 7582.477874] C0 [ khubd] ath9k_htc 1-1:1.0: ath9k_htc: Please upgrade to FW version 1.3
.
Просто качаем другой фирмварь, но уже требуемой версии, и кладем его вместо прошлого.
IV. Финиш
Теперь никаких проблем быть не должно. Выключаю родной Wi-Fi, все модули загружены, фирмварь нужной версии. Вставляю адаптер и netcfg впервые приносит счастье. Устанавливаю для появившегося сетевого интерфейса режим монитора и поднимаю его. Успех!
Ну а как и зачем зачастую используется режим монитора, вы и так все знаете. Спасибо за внимание!
Источник
Android для чайников №8. Все, что нужно знать о Wi-Fi
Павел Крижепольский
Как подключить Android смартфон к новой Wi-Fi сети? Как настроить работу Wi-Fi в спящем режиме? Можно ли использоваться смартфон в качестве точки доступа? Ответы на все эти вопросы ждут вас под катом.
Подключение к новой Wi-Fi сети
Прежде всего давайте разберемся с тем, как подключить Android смартфон к новой Wi-Fi сети. Скорее всего, подключение к домашней Wi-Fi сети вы настроили на своем смартфоне во время его первого запуска. Однако, подключение к Wi-Fi может понадобиться вам не только дома, но и на работе, институте или кафе.
Ничего сложно в подключении к Wi-Fi сети нет. Достаточно просто зайти в настройки телефона, а затем перейти в раздел «Wi-Fi».
Вам откроется список доступных Wi-Fi сетей. Замочек рядом с иконкой Wi-Fi показывает, что сеть защищена паролем. Соответственно, при попытке подключения к такой сети смартфон запросит пароль.
По умолчанию большинство Android устройств настроено таким образом, что подключение к известной сети происходит автоматически. Иными словами, если вы хотя бы один раз подключили смартфон к какой-то Wi-Fi сети, то как только вы вновь попадете в радиус ее действия, смартфон подключиться к ней самостоятельно. В большинстве случаев это удобно. Но иногда бывают ситуации, когда повторное подключение к конкретной сети нежелательно. В этом случае необходимо сделать долгий тап (нажать и удерживать в течение пары секунд) на названии нужной сети, затем выбрать пункт «Удалить сеть» либо «Забыть сеть». Кроме того, здесь можно исправить настройки сети, если у нее изменился тип шифрования или пароль.
В очень редких случаях нужная вам Wi-Fi сеть может не отображаться в списке доступных. Скорее всего, администратор сети специально сделал ее скрытой, чтобы подключиться к ней могли только те, кто знает ее название. Для подключения к такой сети достаточно нажать на кнопку «Меню», находящуюся в левом верхнем углу экрана, затем выбрать пункт «Добавить сеть».
С помощью этого же меню можно получить доступ к дополнительным настройкам Wi-Fi. Хотя пункты настроек на смартфонах разных производителей могут немного отличаться, основные опции присутствуют на всех аппаратах. Прежде всего это настройка работы Wi-Fi в режиме сна и включение уведомлений о доступных открытых Wi-Fi сетях.
Раздача интернета по Wi-Fi
К сожалению, Wi-Fi есть далеко не везде. И в остальных местах приходится довольствоваться мобильным интернетом. Беда только в том, что такой вид доступа в интернет поддерживают далеко не все устройства.
Что делать, если срочно потребовалось выйти в интернет с ноутбука? Или если захотелось посидеть в интернете с планшета, не имеющего SIM карты и поддерживающего только Wi-Fi? И как поделиться доступом в интернет с другом, чей мобильный оператор не работает в этом районе? Все эти вопросы можно легко решить, настроив имеющийся Android смартфон в качестве Wi-Fi роутера (точки доступа).
Вновь заходим в настройки телефона. Нам нужен пункт «Еще», который находится в разделе «Беспроводные подключения к сети» или «Беспроводные сети», рядом с настройками Wi-Fi.
Название следующего пункта немного отключается в зависимости от модели и производителя телефона. Иногда он называется «Подключение точки доступа», иногда «Общий доступ к мобильному интернету» или «Точка доступа Wi-Fi». Именно здесь можно включить режим точки доступа, а также указать название и пароль для вашей Wi-Fi сети.
Если вы все сделали правильно, то в строке состояния, расположенной в верхней части экрана, должен появится специальный значок. Пример показан на скриншоте выше.
Теперь подключиться к вашему смартфону можно будет точно также, как к домашнему Wi-Fi роутеру.
Источник