Friends RaspberryPi avec TP-Link TL-WN727N

Bonjour, Habr!

D'une certaine manière, j'ai pensé à connecter ma framboise à Internet par voie aérienne.

Aussitôt dit, aussitôt fait, pour cela, un sifflet de la célèbre société TP-Link a été acheté dans le magasin Wi-Fi USB le plus proche. Je dois dire tout de suite que ce n'est pas une sorte de module nano usb, mais un appareil assez dimensionnel de la taille d'un lecteur flash ordinaire (enfin, ou si vous le souhaitez avec l'index d'un homme adulte). Avant d'acheter, j'ai étudié un peu la liste des fabricants de sifflets pris en charge pour RPI et TP-Link dans la liste (bien que comme il s'est avéré plus tard, je n'ai pas pris en compte les subtilités, car le diable est connu pour être dans les détails). Alors, le froid conte de mes mésaventures commence, une histoire de détective en 3 parties vous est proposée. Intéressé s'il vous plaît sous cat.

L'article Connexion de l'adaptateur WiFi WN727N à Ubuntu / Mint m'a aidé en partie, mais tout d'abord.

Conditions de tâche


Étant donné:

  1. Ordinateur monocarte Raspberry Pi 2 B v1.1 - 1 pc.
  2. sifflet wifi usb WN727N - 1 pièce
  3. une paire de mains pas tout à fait tordues - 2 pièces
  4. le dernier Raspbian est installé en tant que système d'exploitation (basé sur debian 10 Buster)
  5. version du noyau 4.19.73-v7 +

Trouver: se connecter à Internet (le Wi-Fi est entendu depuis un routeur domestique)

Après avoir déballé l'adaptateur, j'ai lu les instructions à l'intérieur:
Compatibilité système: Windows 10/8/7 / XP (même ciel, même XP) et MacOS 10.9-10.13

Hmm, sur Linux, comme d'habitude, pas un mot. C'était 2k19, mais les pilotes devaient encore être assemblés manuellement ...
Nous avions 2 compilateurs, 75 000 bibliothèques, cinq blobs binaires, une demi-masse de femmes nues avec un logo et toute une série d'en-têtes de toutes les langues et balises. Non pas que c'était un ensemble nécessaire pour le travail. Mais si vous avez commencé à assembler le système pour vous-même, il devient difficile de vous arrêter. La seule chose qui m'inquiétait, c'était les chauffeurs sous wi-fi. Il n'y a rien de plus impuissant, irresponsable et gâté que l'assemblage de pilotes à partir de la source. Mais je savais que tôt ou tard nous passerons à ces ordures.


En général, comme vous le savez, se disputer avec le Wi-Fi USB sur Linux est douloureux et quelque peu insipide (comme les sushis russes).

La boîte contient également un CD de pilotes. Sans grand espoir, je regarde ce qu'il y a dessus - c'est sûr, ils n'y ont pas fait attention. Une recherche sur Internet m'a amené sur le site Web du fabricant, mais il n'y a un pilote Linux que pour réviser le périphérique v4 , et j'avais la v5.21 sous la main. Et d'ailleurs, sous de très anciennes versions du noyau 2.6-3.16. Découragé par l'échec au tout début, je pensais déjà qu'il fallait prendre le TL-WN727N (il est un peu plus cher et peut faire 300Mbps contre 150 pour le mien, mais cela s'est avéré hors de propos pour les framboises, ce sera écrit plus tard). Mais surtout, les pilotes pour cela existent déjà et sont installés simplement par le package firmware-ralink . Vous pouvez généralement voir la révision de l'appareil sur le boîtier de l'appareil sur l'autocollant à côté du numéro de série.

Aller plus loin sur Google et visiter divers forums n'a rien apporté de bon. Apparemment, personne n'a essayé de connecter un tel adaptateur à Linux avant moi. Hmm, j'ai de la chance en tant que noyé.

Bien que non, je mens, la visite de forums (principalement en anglais) a également porté ses fruits, dans certains sujets, il a été fait mention d'un certain M. lwfinger, célèbre pour avoir écrit un certain nombre de pilotes pour les adaptateurs Wi-Fi. Son référentiel git à la fin de l'article dans les liens. Et la deuxième leçon que j'ai apprise est que vous devez identifier votre appareil afin de comprendre quel pilote pourrait lui convenir.

Partie 1. Identification de Bourne


Lorsque vous allumez l'appareil dans le port, aucune LED, bien sûr, ne s'allume. Et en général, d'une certaine manière, il n'est pas clair si quelque chose fonctionne ou non.

Tout d'abord, pour savoir si le noyau voit notre appareil, je regarde dans 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 

Il s'est avéré être vu, et il est même clair qu'il y a une puce Realtek et le périphérique VID / PID sur le bus USB lui-même.

Nous allons plus loin, regardons lsusb , puis un autre échec nous attend

 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 

Le système ne sait pas ce qu'est cet appareil et affiche timidement un espace vide au lieu d'un nom (bien que le fournisseur = 2357 soit exactement TP-Link).

À ce stade, le lecteur curieux a probablement déjà remarqué quelque chose d'intéressant, mais nous le reporterons jusqu'à notre époque.

L'enquête sur le problème des noms vides m'a amené à un site avec des identifiants, où des informations sur les VID / PID connus sont entrées. Notre 2357: 0111 n'était pas là. Comme il s'est avéré plus tard, lsusb utilise le fichier /usr/share/misc/usb.ids , qui est la même liste d'identifiants de ce site. Par souci de beauté d'affichage, je viens d'ajouter des lignes pour le fournisseur TP-Link dans mon système.

 2357 TP-Link 0111 TL-WN727N v5.21 

Eh bien, nous avons corrigé l'affichage dans la liste des appareils, mais cela ne nous a pas rapprochés du choix d'un pilote. Pour sélectionner un pilote, vous devez savoir sur quelle puce votre sifflet est fabriqué. Les prochaines tentatives infructueuses de découverte sur Internet n'ont abouti à rien de bon. Armé d'un mince tournevis à fente, je soulève doucement le capuchon de l'adaptateur et je vois la vicieuse idée de l'oncle Liao dans toute sa nudité immaculée. Sous la loupe, vous pouvez voir le nom de la puce - RTL8188EUS . C'est déjà bien. Sur certains forums, j'ai vu des messages selon lesquels le pilote de ce très M. lwfinger est bien adapté à cette puce (même s'il ne dit que RTL8188EU).

Partie 2. La suprématie Bourne


Je télécharge des sources de pilotes depuis une gita.

Il est temps de réinstaller les shindous pour faire ce à quoi Linux est généralement associé - assembler quelque chose à partir de sortes. L'assemblage des pilotes s'est révélé peu différent de la compilation des programmes:

 make sudo make install 

mais pour compiler les modules du noyau, nous avons besoin des fichiers d'en-tête du noyau pour notre version spécifique.

Il y a un paquet raspberrypi-kernel-headers dans le référentiel de stock, mais il contient la version des fichiers pour le noyau 4.19.66-v7l + , et cela ne nous convient pas. Mais il s'est avéré que pour obtenir les en-têtes de la version souhaitée, il existe un outil rpi -source pratique (lien à la fin sur le github), avec lequel vous pouvez télécharger les en-têtes nécessaires. Nous clonons le référentiel, rendons le script exécutable, l'exécutons. Le premier démarrage échoue avec une erreur - il n'y a pas d'utilitaire bc . Heureusement, il est dans le référentiel et nous venons de l'installer.

 sudo apt-get install bc 

Après cela, redémarrer et télécharger les en-têtes (puis configurer quelque chose, je ne m'en souviens pas maintenant) prend un certain temps et vous pouvez vous asseoir et devenir meilleur dans toutes ses manifestations .

Une fois tous les en-têtes téléchargés, nous vérifions que le répertoire /lib/modules/4.19.73-v7+ apparaît et que le lien symbolique pointe vers l'endroit où se trouvent les fichiers téléchargés (j'ai ceci / 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 phase préparatoire est terminée, vous pouvez commencer l'assemblage. L'assemblage des modules prend à nouveau un certain temps, la framboise n'est pas une bête rapide (elle possède une pierre Cortex ARM v7 32 bits 900Mhz).
Donc, tout a été compilé. Nous installons le pilote dans la 2ème étape (make install), tout en copiant également les fichiers firmware nécessaires au fonctionnement du pilote:

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

Partie 3. L'ultimatum de Bourne


Je siffle dans le port et ... rien ne se passe. Est-ce que tout a été perdu?

Je commence à étudier les fichiers à l'intérieur du projet et dans l'un d'eux je trouve quel était le problème: le pilote indique la liste complète des VID / PID qu'il peut servir. Et pour que notre appareil fonctionne avec ce pilote, je viens d'ajouter mon identifiant au fichier 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é le pilote et réinstallé dans le système.

Et cette fois, tout a commencé. Le voyant de l'adaptateur s'est allumé et un nouveau périphérique est apparu dans la liste des interfaces réseau.

L'affichage des interfaces sans fil donne les informations suivantes:

 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 

Bonus pour ceux qui ont lu jusqu'au bout


Rappelez-vous comment j'ai dit que peu importe la vitesse maximale indiquée sur votre adaptateur?
Ainsi, sur la framboise (avant la sortie du modèle 4), tous les appareils (y compris l'adaptateur Ethernet) sont assis sur le même bus USB. Super, non? Et donc la bande passante du bus USB est partagée entre tous les appareils qui s'y trouvent. Lors de la mesure de la vitesse via Ethernet et via USB Wi-Fi (connecté à 1 routeur) à la fois dans l'air et à travers le fil, il a donné environ 20 Mbps.

PS En général, ce guide de compilation de pilotes pour cet adaptateur particulier n'est pas valable uniquement pour RPI. Je l'ai ensuite répété et sur mon bureau avec Linux Mint - tout fonctionnait également là-bas. C'est juste que vous avez juste besoin de télécharger les fichiers d'en-tête nécessaires pour votre version du noyau.

UPD Des personnes compétentes ont suggéré: afin de ne pas dépendre de la version du noyau, vous devez créer et installer des pilotes à l'aide de dkms. En lisant le pilote, cette option est également là
 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. Le correctif proposé pour l'ID de périphérique a été accepté dans la branche de référentiel grand public lwfinger / rtl8188eu.

Les références
- Adaptateurs Wi-Fi RPi USB
- gitbub lwfinger / rtl8188eu
- usb.ids
- rpi-source

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


All Articles