Friends RaspberryPi con TP-Link TL-WN727N

Hola Habr!

De alguna manera pensé conectar mi frambuesa a Internet a través del aire.

Apenas dicho y hecho, para esto, se compró un silbato de la conocida empresa TP-Link en la tienda de wi-fi usb más cercana. Debo decir de inmediato que este no es un tipo de módulo nano usb, sino un dispositivo bastante dimensional del tamaño de una unidad flash ordinaria (bueno, o si lo desea con el dedo índice de un hombre adulto). Antes de comprar, estudié un poco la lista de fabricantes de silbatos compatibles con RPI y TP-Link en la lista (aunque, como resultó más tarde, no tomé en cuenta las sutilezas, porque se sabe que el diablo está en los detalles). Entonces, comienza la fría historia de mis desventuras, se le ofrece una historia de detectives en 3 partes. Interesado por favor debajo del gato.

El artículo Conectar el adaptador WiFi WN727N a Ubuntu / Mint me ayudó parcialmente, pero lo primero es lo primero.

Condiciones de la tarea


Dado:

  1. Computadora de placa única Raspberry Pi 2 B v1.1 - 1 pc.
  2. usb wifi whistle WN727N - 1 pieza
  3. un par de manos no muy torcidas - 2 piezas
  4. el último Raspbian está instalado como SO (basado en Debian 10 Buster)
  5. kernel versión 4.19.73-v7 +

Buscar: conéctese a Internet (se escucha Wi-Fi desde un enrutador doméstico)

Después de desempacar el adaptador, leo las instrucciones en el interior:
Compatibilidad del sistema: Windows 10/8/7 / XP (incluso cielo, incluso XP) y MacOS 10.9-10.13

Hmm, sobre Linux, como siempre, ni una palabra. Era 2k19, pero los controladores aún necesitaban ensamblarse manualmente ...
Teníamos 2 compiladores, 75 mil bibliotecas, cinco blobs binarios, media masa de mujeres desnudas con un logotipo y un mar completo de encabezados de todos los idiomas y marcas. No es que fuera un conjunto necesario para el trabajo. Pero si comenzó a ensamblar el sistema por sí mismo, se hace difícil detenerlo. Lo único que me preocupaba eran los conductores con wifi. No hay nada más indefenso, irresponsable y mimado que el ensamblaje de controladores desde la fuente. Pero sabía que tarde o temprano iremos a esta basura.


En general, como saben, preocuparse por el wifi usb en Linux es doloroso y algo insípido (como el sushi ruso).

La caja también contiene un CD de controladores. Sin mucha esperanza, miro lo que hay en él, sin duda, no se preocuparon. Una búsqueda en Internet me llevó al sitio web del fabricante, pero hay un controlador de Linux solo para revisar el dispositivo v4 , y tenía a mano la versión 5.21 . Y además, en versiones muy antiguas del kernel 2.6-3.16. Desalentado por el fracaso al principio, ya pensé que era necesario tomar TL-WN727N (es un poco más caro y puede hacer 300Mbps versus 150 para el mío, pero resultó ser irrelevante para las frambuesas, se escribirá más adelante). Pero lo más importante, los controladores ya existen y se instalan simplemente con el paquete de firmware-ralink . Por lo general, puede ver la revisión del dispositivo en la carcasa del dispositivo en la etiqueta junto al número de serie.

Buscar en Google y visitar varios foros no trajo nada bueno. Aparentemente, nadie ha intentado conectar dicho adaptador a Linux antes que yo. Hmm, tengo suerte como un hombre ahogado.

Aunque no, estoy mintiendo, visitar foros (en su mayoría en inglés) también valió la pena, en algunos temas se mencionó a cierto Sr. lwfinger, famoso por escribir una serie de controladores para adaptadores Wi-Fi. Su repositorio git al final del artículo en los enlaces. Y la segunda lección que aprendí es que necesita identificar su dispositivo para comprender qué controlador podría ser adecuado para él.

Parte 1. Identificación de Bourne


Cuando enciende el dispositivo en el puerto, no se enciende ningún LED, por supuesto. Y, en general, de alguna manera no está claro si algo funciona o no.

En primer lugar, para averiguar si el núcleo ve nuestro dispositivo, miro en 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 

Resultó ser visto, e incluso está claro que hay un chip Realtek y el dispositivo VID / PID en el bus usb.

Vamos más allá, miramos a lsusb , y luego nos espera otro fracaso

 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 

El sistema no sabe qué es este dispositivo y muestra tímidamente un espacio vacío en lugar de un nombre (aunque vendor = 2357 es exactamente TP-Link).

En esta etapa, el lector curioso probablemente ya notó algo interesante, pero lo pospondremos hasta nuestro tiempo.

La investigación del problema de los nombres vacíos me llevó a un sitio con identificadores, donde se ingresa información sobre VID / PID conocidos. Nuestro 2357: 0111 no estaba allí. Como resultó más tarde, lsusb usa el archivo /usr/share/misc/usb.ids , que es la misma lista de identificadores de este sitio. En aras de la belleza de la pantalla, acabo de agregar líneas para el proveedor de TP-Link en mi sistema.

 2357 TP-Link 0111 TL-WN727N v5.21 

Bueno, corregimos la pantalla en la lista de dispositivos, pero esto no nos acercó ni un paso más a la elección de un controlador. Para seleccionar un controlador, necesita saber en qué chip está hecho su silbato. Los siguientes intentos fallidos de averiguar en Internet no condujeron a nada bueno. Armado con un destornillador delgado y delgado, levanto suavemente la tapa del adaptador y veo la cruel creación del tío Liao en toda su desnudez impecable. Debajo de la lupa, puede ver el nombre del chip: RTL8188EUS . Esto ya está bien. En algunos foros, vi publicaciones que el controlador de ese mismo Sr. lwfinger es muy adecuado para este chip (incluso a pesar del hecho de que solo dice sobre RTL8188EU).

Parte 2. La supremacía de Bourne


Descargo fuentes de controladores de un gita.

Es hora de reinstalar el shindous para hacer lo que Linux suele estar asociado: ensamblar algo de una especie. El conjunto de controladores resultó ser un poco diferente de compilar programas:

 make sudo make install 

pero para compilar módulos de kernel, necesitamos archivos de encabezado de kernel para nuestra versión específica.

Hay un paquete raspberrypi-kernel-headers en el repositorio de acciones, pero contiene la versión de los archivos para el kernel 4.19.66-v7l + , y esto no nos conviene. Pero resultó que, para obtener los encabezados de la versión deseada, hay una conveniente herramienta rpi -source (enlace al final en el github), con la que puede descargar los encabezados necesarios. Clonamos el repositorio, hacemos que el script sea ejecutable, lo ejecutamos. El primer inicio falla con un error: no hay una utilidad bc . Afortunadamente, está en el repositorio y solo lo instalamos.

 sudo apt-get install bc 

Después de eso, reiniciar y descargar los encabezados (y luego configurar algo, no lo recuerdo ahora) lleva un tiempo y puede sentarse y mejorar en todas sus manifestaciones .

Después de que se hayan descargado todos los encabezados, verificamos que aparezca el directorio /lib/modules/4.19.73-v7+ y en él el enlace simbólico señala el lugar donde están los archivos descargados (tengo esto / 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 

La fase preparatoria se completa, puede comenzar a ensamblar. El ensamblaje de los módulos nuevamente lleva cierto tiempo, la frambuesa no es una bestia rápida (tiene una piedra ARM v7 Cortex ARM v7 de 32 bits 900Mhz).
Entonces, todo compilado. Instalamos el controlador en el segundo paso (hacer la instalación), mientras copiamos también los archivos de firmware necesarios para que el controlador funcione:

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

Parte 3. El ultimátum de Bourne


Pito un silbato en el puerto y ... no pasa nada. ¿Se desperdició todo?

Comienzo a estudiar los archivos dentro del proyecto y en uno de ellos encuentro cuál era el problema: el controlador indica la lista completa de VID / PID que puede servir. Y para que nuestro dispositivo funcione con este controlador, acabo de agregar mi identificación al archivo 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 */ }; 

Recompiló el controlador y lo reinstalé en el sistema.

Y esta vez todo comenzó. La luz del adaptador se encendió y apareció un nuevo dispositivo en la lista de interfaces de red.

La visualización de interfaces inalámbricas ofrece lo siguiente:

 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 

Bono para aquellos que han leído hasta el final


¿Recuerdas cómo dije que no importa qué velocidad máxima se indique en tu adaptador?
Entonces, en la frambuesa (antes del lanzamiento del modelo 4), todos los dispositivos (incluido el adaptador de ethernet) se encuentran en el mismo bus usb. Genial, verdad? Y así, el ancho de banda del bus usb se comparte entre todos los dispositivos en él. Al medir la velocidad a través de ethernet y a través de wi-fi usb (conectado a 1 enrutador) tanto a través del aire como a través del cable, produjo en la región de 20 Mbps.

PD En general, esta guía de compilación de controladores para este adaptador en particular es válida no solo para RPI. Luego lo repetí y en mi escritorio con Linux Mint, todo también funcionó allí. Es solo que solo necesita descargar los archivos de encabezado necesarios para su versión del núcleo.

UPD Personas expertas sugirieron: para no depender de la versión del kernel, necesita construir e instalar controladores usando dkms. En el archivo Léame para el conductor, esta opción también está ahí.
 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 


UPD2. El parche propuesto para la identificación del dispositivo se aceptó en la rama del repositorio principal lwfinger / rtl8188eu.

Referencias
- Adaptadores Wi-Fi USB RPi
- gitbub lwfinger / rtl8188eu
- usb.ids
- fuente rpi

Source: https://habr.com/ru/post/471564/


All Articles