У Нас Есть Raspberrypi С Tp-Link Tl-Wn727N.

Привет, Хабр! Однажды я решил подключить свою малину к Интернету по воздуху.

Сказано-сделано, для этой цели я приобрел в ближайшем магазине usb wi-fi свисток известной компании TP-Link. Скажу сразу, это не какой-то нано usb модуль, а довольно большое устройство, размером примерно с обычную флешку (или, если хотите, с указательный палец взрослого мужчины).

Перед покупкой я немного изучил список поддерживаемых производителей свистков для RPI и в списке был TP-Link (однако, как выяснилось позже, я не учел тонкостей, ибо черт, как мы знаем , в деталях).

Итак, начинается холодный рассказ о моих злоключениях; представляем вашему вниманию детективную историю в 3-х частях.

Для тех, кто заинтересован, пожалуйста, обратитесь к кат. Статья Подключение Wi-Fi-адаптера WN727N к Ubuntu/Mint Частично мне это помогло, но обо всём по порядку.



Условия задачи

Данный:
  1. одноплатный компьютер Raspberry Pi 2 B v1.1 — 1 шт.
  2. USB Wi-Fi свисток WN727N - 1 шт.
  3. пара не совсем кривых рук – 2 шт.
  4. В качестве ОС установлена последняя версия Raspbian (на базе Debian 10 Buster).

  5. версия ядра 4.19.73-v7+
Найти: подключиться к Интернету (Wi-Fi раздается с домашнего роутера) Распаковав адаптер, я прочитал инструкцию внутри:
Совместимость системы: Windows 10/8/7/XP (хоть небо, хоть XP) и MacOS 10.9-10.13.
Хм, как обычно, ни слова о Linux. Это была 2к19, а драйвера всё равно нужно было собирать вручную.

У нас было с собой 2 компилятора, 75 тысяч библиотек, пять бинарных блобов, полмассива голых женщин с логотипом и целое море заголовков всех языков и разметок.

Не то чтобы это необходимый набор для работы.

Но как только начинаешь собирать систему для себя, остановиться становится сложно.

Единственное, что вызвало у меня беспокойство, это драйвера на вай-фай.

Нет ничего более беспомощного, безответственного и коррумпированного, чем сборка драйверов из исходного кода.

Но я знал, что рано или поздно мы перейдём на эту дрянь.

В общем, как вы понимаете, возиться с usb wi-fi в линуксе - это больно и несколько безвкусно (как русские суши).

В коробке также находится диск с драйверами.

Без особой надежды смотрю, что на нем - точно не позаботились.

Поиск в Интернете привел меня на сайт производителя, но там есть драйвер для Linux только для ревизии устройства.

v4 , и в моих объятиях был v5.21 .

И притом для очень старых версий ядра 2.6-3.16. Обескураженный неудачей в самом начале, я уже подумал, что надо было брать TL-WN727N (он немного дороже и справляется со скоростью 300Мбит/с против 150 у моего, но как оказалось, это совершенно не важно про малину об этом будет написано позже).

Но самое главное, что драйвера для него уже существуют и просто устанавливаются пакетом.

прошивка-ralink .

Обычно версию устройства можно увидеть на корпусе устройства на наклейке рядом с серийным номером.

Дальнейшее гугление и посещение различных форумов особой пользы не принесли.

Видимо никто до меня не пробовал подключить такой адаптер к Linux. Хм, мне повезло, как утопленнику.

Хотя нет, вру, посещение форумов (в основном англоязычных) тоже принесло свои плоды; в некоторых темах было упоминание о неком господине lwfinger, который известен тем, что написал ряд драйверов для Wi-Fi адаптеров.

Его git-репозиторий находится в конце статьи по ссылкам.

И второй урок, который я усвоил, заключается в том, что вам необходимо идентифицировать свое устройство, чтобы понять, какой драйвер может к нему подойти.



Часть 1: Идентичность Борна

При подключении устройства к порту, естественно, ни один светодиод не загорелся.

И вообще никак не понятно, работает что-то или нет. Первым делом, чтобы узнать видит ли ядро наше устройство, я смотрю в dmesg:

  
  
  
  
  
  
  
  
  
   

[ 965.606998] usb 1-1.3: new high-speed USB device number 9 using dwc_otg [ 965.738195] usb 1-1.3: New USB device found, idVendor=2357, idProduct=0111, bcdDevice= 0.00 [ 965.738219] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 965.738231] usb 1-1.3: Product: 802.11n NIC [ 965.738243] usb 1-1.3: Manufacturer: Realtek [ 965.738255] usb 1-1.3: SerialNumber: 00E04C0001

Оказалось, что видит, и даже видно, что на шине usb стоит чип Realtek и VID/PID самого устройства.

Пойдем дальше и посмотрим lsusb , и тут нас ждет очередная неудача

Bus 001 Device 008: ID 2357:0111 Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Система не знает, что это за устройство, и стыдливо показывает вместо названия пустое место (хотя вендор=2357 - это точно TP-Link).

На этом этапе пытливый читатель наверняка уже заметил что-то интересное, но мы оставим это до нашего времени.

Исследование проблемы пустых имен привело меня на сайт с идентификаторами, куда вносится информация об известных VID/PID. Нашего 2357:0111 там не было.

Как выяснилось позже, утилита lsusb использует файл /usr/share/misc/usb.ids , который представляет собой тот же список идентификаторов с этого сайта.

Для красоты отображения я просто добавил в свою систему строки для производителя TP-Link.

2357 TP-Link 0111 TL-WN727N v5.21

Что ж, мы поправили отображение в списке устройств, но это ни на шаг не приблизило нас к выбору драйвера.

Чтобы подобрать драйвер, вам необходимо знать, на каком чипе сделан ваш свисток.

Очередные безуспешные попытки узнать это в Интернете ни к чему хорошему не привели.

Вооружившись тонкой шлицевой отверткой, я осторожно поддеваю колпачок переходника и злобное детище дяди Ляо предстает во всей своей первозданной наготе.

Под лупой можно увидеть название микросхемы — RTL8188EUS .

Это уже хорошо.

На некоторых форумах я видел сообщения о том, что для этого чипа хорошо подходит драйвер от того самого господина lwfinger (хоть он и пишет только про RTL8188EU).



Часть 2: Превосходство Борна

Я скачиваю исходники драйверов с Git. Пришло время переустановить Windows и заняться тем, с чем обычно ассоциируются пользователи Linux — сборкой чего-то из каких-то подобий.

Сборка драйверов, как оказалось, мало чем отличается от компиляции программ:

make sudo make install

но для компиляции модулей ядра нам нужны файлы заголовков ядра для нашей конкретной версии.

В стоковом репозитории есть пакет raspberrypi-kernel-заголовки , но он содержит версию ядра файлов 4.19.66-v7l+ , и это нас не устраивает. Но чтобы получить заголовки нужной версии, как оказалось, есть удобный инструмент RPI-источник (ссылка в конце на Github), с помощью которой можно скачать необходимые заголовки.

Клонируем репозиторий, делаем скрипт исполняемым и запускаем его.

Первый запуск завершается с ошибкой - утилиты нет До нашей эры .

К счастью, он есть в репозитории и мы его просто устанавливаем.



sudo apt-get install bc

После этого перезапуск и загрузка шапок (а потом что-то настройка, сейчас уже не помню) занимает какое-то время и можно сидеть поудобнее в кресле, винда стала лучше во всех своих проявлениях.

После того, как все заголовки скачаны, проверьте, появился ли каталог /lib/модули/4.19.73-v7+ и в нем симлинк указывает на место, где находятся скачанные файлы (у меня это /home/pi/linux):

pi@raspberrypi:/home/pi/rtl8188eu# ls -l /lib/modules/4.19.73-v7+/ lrwxrwxrwx 1 root root 14 Sep 24 22:44 build -> /home/pi/linux

Подготовительный этап завершен, можно приступать к сборке.

Повторная сборка модулей занимает некоторое время, Raspberry не быстрый зверь (у него 32-битный 900 МГц Cortex ARM v7).

Итак все собралось.

Устанавливаем драйвер на 2-м шаге (make install), одновременно копируя еще файлы прошивки, необходимые для работы драйвера:

install: install -p -m 644 8188eu.ko $(MODDESTDIR) @if [ -a /lib/modules/$(KVER)/kernel/drivers/staging/rtl8188eu/r8188eu.ko ] ; then modprobe -r r8188eu; fi; @echo "blacklist r8188eu" > /etc/modprobe.d/50-8188eu.conf cp rtl8188eufw.bin /lib/firmware/.

/sbin/depmod -a ${KVER} mkdir -p /lib/firmware/rtlwifi cp rtl8188eufw.bin /lib/firmware/rtlwifi/.





Часть 3. Ультиматум Борна

Втыкаю свисток в порт и.

ничего не происходит. Неужели все это было зря? Я начинаю изучать файлы внутри проекта и в одном из них обнаруживаю, в чем была проблема: драйвер указывает полный список идентификаторов VID/PID, которые он может обслуживать.

И чтобы наше устройство работало с этим драйвером, я просто добавил в файл свой id rtl8188eu/os_dep/usb_intf.c

static struct usb_device_id rtw_usb_id_tbl[] = { /*=== Realtek demoboard ===*/ {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */ {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */ /*=== Customer ID ===*/ /****** 8188EUS ********/ {USB_DEVICE(0x07B8, 0x8179)}, /* Abocom - Abocom */ {USB_DEVICE(0x0DF6, 0x0076)}, /* Sitecom N150 v2 */ {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */ {USB_DEVICE(0x2001, 0x3310)}, /* Dlink DWA-123 REV D1 */ {USB_DEVICE(0x2001, 0x3311)}, /* DLink GO-USB-N150 REV B1 */ {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */ {USB_DEVICE(0x056E, 0x4008)}, /* Elecom WDC-150SU2M */ {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */ {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */ {} /* Terminating entry */ };

Я перекомпилировал драйвер и переустановил его в системе.

И на этот раз все началось.

Загорелась лампочка на адаптере и в списке сетевых интерфейсов появилось новое устройство.

Просмотр беспроводных интерфейсов показывает следующее:

pi@raspberrypi:/home/pi/rtl8188eu# iwconfig eth0 no wireless extensions. lo no wireless extensions. wlan0 unassociated ESSID:"" Nickname:"<WIFI@REALTEK>" Mode:Auto Frequency=2.412 GHz Access Point: Not-Associated Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=0/100 Signal level=0 dBm Noise level=0 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0



Бонус для тех, кто дочитал до конца

Помните, я говорил, что не имеет значения, какая максимальная скорость указана на вашем адаптере? Итак, на Малинке (до выхода модели 4) все устройства (включая Ethernet-адаптер) сидят на одной и той же usb-шине.

Отлично, правда? И поэтому пропускная способность шины USB делится между всеми устройствами на ней.

При замере скорости как через ethernet, так и через usb wi-fi (подключен к 1 роутеру) как по воздуху, так и по проводу было в районе 20Мбит/с.

P.S. В общем, данное руководство по составлению драйвера именно для этого адаптера справедливо не только для RPI. Я потом повторил это на своем десктопе с Linux Mint — там тоже все заработало.

Вам просто нужно таким же способом скачать необходимые заголовочные файлы для вашей версии ядра.

УПД.

Знающие люди подсказали: чтобы не зависеть от версии ядра, нужно собирать и устанавливать драйвера с помощью dkms. Файл readme для драйвера также содержит эту опцию.



pi@raspberrypi:/home/pi# sudo dkms add .

/rtl8188eu pi@raspberrypi:/home/pi# sudo dkms build 8188eu/1.0 pi@raspberrypi:/home/pi# sudo dkms install 8188eu/1.0

УПД2. Предложенный пластырь для идентификатора устройства был принят в основную ветку репозитория lwfinger/rtl8188eu. Ссылки — USB-адаптеры Wi-Fi RPi Gitbub lwfinger/rtl8188eu usb.ids RPI-источник Теги: #*nix #Беспроводные технологии #Разработка Raspberry Pi #Системное администрирование #Настройка Linux #wifi #tp-link #драйвер Linux #wn727n #raspberry pi 2 model b

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.