Salut, Habr !
Un jour, j'ai décidé de connecter ma Raspberry Pi à Internet sans fil.
Fait accompli, j'ai achetĂ© dans le magasin le plus proche un dongle USB Wi-Fi de la cĂ©lĂšbre marque TP-Link. Je prĂ©cise tout de suite qu'il ne s'agit pas d'un banal module USB nano, mais d'un appareil plutĂŽt volumineux, de la taille d'une clĂ© USB ordinaire (ou, si vous prĂ©fĂ©rez, de la taille de l'index d'un homme adulte). Avant d'acheter, j'ai Ă©tudiĂ© un peu la liste des fabricants de dongles compatibles avec la RPI et TP-Link y figurait (mĂȘme si, comme il s'est avĂ©rĂ© par la suite, je n'avais pas pris en compte certaines subtilitĂ©s, car le diable se cache dans les dĂ©tails). Ainsi commence le rĂ©cit tragique de mes mĂ©saventures, que je vous prĂ©sente sous la forme d'une histoire policiĂšre en 3 parties. Les intĂ©ressĂ©s sont priĂ©s de poursuivre.
Article Cela m'a partiellement aidé, mais tout en temps voulu.
Conditions de la tĂąche
Ătant donnĂ© :
- Ordinateur monocarte Raspberry Pi 2 B v1.1 â 1 unitĂ©
- Dongle USB Wi-Fi WN727N â 1 unitĂ©
- Une paire de mains pas tout Ă fait gauches â 2 unitĂ©s
- La derniÚre version de Raspbian est installée (basée sur Debian 10 Buster)
- Noyau version 4.19.73-v7+
Trouver : établir une connexion à Internet (le Wi-Fi est partagé par le routeur domestique)
AprÚs avoir déballé l'adaptateur, je lis le manuel à l'intérieur :
CompatibilitĂ© systĂšme : Windows 10/8/7/XP (mĂȘme Vista, mĂȘme XP) et MacOS 10.9-10.13
Eh bien, comme d'habitude, rien sur Linux. Nous Ă©tions en 2019, et les pilotes devaient encore ĂȘtre compilĂ©s manuellement...
Nous avions avec nous 2 compilateurs, 75 000 bibliothĂšques, cinq blobs binaires, une demi-douzaine de fichiers logotypes et une mer d'en-tĂȘtes de tous types de langages et de formats. Ce n'Ă©tait pas vraiment un ensemble nĂ©cessaire pour travailler. Mais une fois que l'on commence Ă compiler un systĂšme pour soi, il devient difficile de s'arrĂȘter. La seule chose qui me prĂ©occupait Ă©tait les pilotes pour le Wi-Fi. Il n'y a rien de plus impuissant, irresponsable et dĂ©fectueux que de compiler des pilotes Ă partir de la source. Mais je savais que tĂŽt ou tard nous devrions aussi faire face Ă cette Ă©preuve.
En fait, comme on le sait, jongler avec le Wi-Fi USB sous Linux c'est douloureux et quelque peu désagréable (comme les sushis russes).
Dans la boĂźte se trouve Ă©galement un CD avec des pilotes. Sans grande espoir, je regarde ce qu'il y a dessus â effectivement, ils n'ont pas pris la peine de le faire. Une recherche sur Internet m'a menĂ© au site du fabricant, mais il n'y avait un pilote Linux que pour une version de l'appareil v4, tandis que j'avais entre les mains v5.21. De plus, cela fonctionne avec de trĂšs anciennes versions du noyau 2.6-3.16. DĂ©couragĂ© par cet Ă©chec dĂšs le dĂ©part, j'ai pensĂ© qu'il aurait fallu prendre le TL-WN727N (qui est un peu plus cher et capable de 300Mbps contre 150 pour le mien, mais cela, comme il s'est avĂ©rĂ©, n'a aucune importance pour le Raspberry Pi, cela sera expliquĂ© plus loin). Mais surtout, les pilotes pour lui sont dĂ©jĂ disponibles et s'installent simplement via un paquet. firmware-ralink. On peut gĂ©nĂ©ralement trouver la rĂ©vision de l'appareil sur le boĂźtier, sur une Ă©tiquette Ă cĂŽtĂ© du numĂ©ro de sĂ©rie.
Une recherche ultérieure et la visite de différents forums n'ont pas abouti à grand-chose de bon. Il semble que personne avant moi n'ait tenté de connecter cet adaptateur particulier sous Linux. Eh bien, je suis vraiment chanceux, comme un noyé.
Cependant, je me trompe ; la visite de forums (principalement anglophones) a également porté ses fruits. Dans certains sujets, il y avait des mentions d'un certain monsieur lwfinger, qui est réputé pour avoir écrit un certain nombre de pilotes pour les adaptateurs Wi-Fi. Son dépÎt Git est mentionné à la fin de cet article dans les liens. Une deuxiÚme leçon que j'ai apprise est qu'il est nécessaire d'identifier votre appareil pour comprendre quel pilote peut lui convenir.
Partie 1. Identification de l'appareil
Lorsque l'appareil est branché sur le port, aucun témoin lumineux ne s'est allumé. En fait, il n'est pas du tout clair si quoi que ce soit fonctionne.
Tout d'abord, pour voir si le noyau détecte notre appareil, je consulte dmesg :
[ 965.606998] usb 1-1.3: nouvel appareil USB haute vitesse numéro 9 utilisant dwc_otg
[ 965.738195] usb 1-1.3: Nouvel appareil USB détecté, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[ 965.738219] usb 1-1.3: Chaßnes d'appareil USB nouvellement détectées : Mfr=1, Produit=2, Numéro de série=3
[ 965.738231] usb 1-1.3: Produit : 802.11n NIC
[ 965.738243] usb 1-1.3: Fabricant : Realtek
[ 965.738255] usb 1-1.3: Numéro de série : 00E04C0001
Il s'avĂšre que ça fonctionne, et il est mĂȘme clair qu'il y a une puce Realtek et que les VID/PID de l'appareil sont sur le bus USB.
Continuons à voir lsusb, et ici nous faisons face à un nouvel échec
Bus 001 Device 008: ID 2357:0111
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Adaptateur Ethernet rapide SMSC9512/9514
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Hub SMC9514
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Le systĂšme ne sait pas de quel appareil il s'agit et montre pudiquement un espace vide Ă la place du nom (bien que vendor=2357 soit certainement TP-Link).
à ce stade, le lecteur curieux a probablement remarqué quelque chose d'intéressant, mais nous allons le mettre de cÎté pour le moment.
La recherche sur le problĂšme des noms vides m'a conduit Ă un site contenant des identifiants, oĂč sont enregistrĂ©es des informations sur les VID/PID connus. Notre 2357:0111 n'y Ă©tait pas. lsusb utilise un fichier /usr/share/misc/usb.ids, qui est la mĂȘme liste d'identifiants de ce site. Pour un affichage esthĂ©tique, j'ai simplement ajoutĂ© dans mon systĂšme des lignes pour le fournisseur TP-Link.
2357 TP-Link
0111 TL-WN727N v5.21
Nous avons corrigĂ© l'affichage dans la liste des appareils, mais cela ne nous a pas rapprochĂ©s d'un choix de pilote. Pour choisir un pilote, il faut savoir sur quel chip est basĂ© votre dongle. Les nouvelles tentatives infructueuses d'obtenir cette information sur Internet n'ont rien donnĂ© de bon. ArmĂ© d'un tournevis Ă tĂȘte plate, je soulĂšve dĂ©licatement le capot de l'adaptateur et ma vue est confrontĂ©e Ă la crĂ©ature dĂ©pouillĂ©e de l'oncle Liao. Sous la loupe, on peut distinguer le nom du chip â RTL8188EUS. C'est dĂ©jĂ une bonne nouvelle. Sur certains forums, j'ai vu des messages indiquant que ce chip fonctionne bien avec le pilote de ce mĂȘme lwfinger (mĂȘme si son nom ne mentionne que RTL8188EU).
Partie 2. La Supériorité de Born
Je télécharge les sources du pilote depuis Git.
Il est temps de réinstaller Windows et de s'occuper de ce avec quoi on associe généralement les utilisateurs de Linux : compiler quelque chose à partir des sources. Compiler des pilotes, comme il s'avÚre, n'est pas trÚs différent de compiler des programmes :
make
sudo make install
mais pour compiler des modules du noyau, nous avons besoin des fichiers d'en-tĂȘte du noyau pour notre version spĂ©cifique.
Dans le dĂ©pĂŽt d'origine, il y a un paquet raspberrypi-kernel-headers, mais il contient la version des fichiers pour le noyau 4.19.66-v7l+, ce qui ne nous convient pas. Mais pour obtenir les fichiers d'en-tĂȘte de la version requise, il s'avĂšre qu'il existe un outil pratique rpi-source (lien Ă la fin sur GitHub), avec lequel vous pouvez tĂ©lĂ©charger les fichiers d'en-tĂȘte nĂ©cessaires. Nous clonons le dĂ©pĂŽt, rendons le script exĂ©cutable, puis le lançons. Le premier lancement Ă©choue avec une erreur â aucune utilitaire bc. Heureusement, il est disponible dans le dĂ©pĂŽt et nous l'installons simplement.
sudo apt-get install bc
AprĂšs cela, un nouveau lancement et le tĂ©lĂ©chargement des en-tĂȘtes (et ensuite la configuration de quelque chose, je ne me souviens plus maintenant) prend un certain temps et on peut se dĂ©tendre sur le dossier, Windows est devenu meilleur dans tous ses aspects.
AprĂšs que tous les en-tĂȘtes aient Ă©tĂ© tĂ©lĂ©chargĂ©s, vĂ©rifions que le rĂ©pertoire est apparu /lib/modules/4.19.73-v7+ et qu'il contient un lien symbolique pointant vers l'endroit oĂč les fichiers tĂ©lĂ©chargĂ©s se trouvent (pour moi, c'est /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
L'étape préparatoire est terminée, nous pouvons commencer l'assemblage. L'assemblage des modules prend encore un certain temps, la Raspberry Pi n'est pas trÚs rapide (son processeur est un Cortex ARM v7 32 bits à 900 MHz).
Ainsi, tout a été compilé. Nous allons installer le pilote en exécutant la commande 2m (make install), qui va également copier d'autres fichiers de 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. Ultimatum de Bourne
Je branche la clé USB dans le port et⊠rien ne se passe. Est-ce que tout cela a été en vain ?
Je commence Ă examiner les fichiers Ă l'intĂ©rieur du projet et dans l'un d'eux, je trouve oĂč se situait le problĂšme : le pilote indique une liste complĂšte d'identifiants VID/PID qu'il peut gĂ©rer. Afin que notre appareil fonctionne avec ce pilote, j'ai simplement ajoutĂ© mon identifiant dans le fichier rtl8188eu/os_dep/usb_intf.c
static struct usb_device_id rtw_usb_id_tbl[] = {
/*=== Carte démoboard Realtek ===*/
{USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */
{USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
/*=== Identifiant Client ===*/
/****** 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 */
{} /* Entrée de terminaison */
};
J'ai recompilé le pilote et l'ai réinstallé dans le systÚme.
Et cette fois-ci, tout a fonctionné. Le voyant sur le adaptateur s'est allumé et un nouvel appareil est apparu dans la liste des interfaces réseau.
L'examen des interfaces sans fil donne ce qui suit :
pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0 no wireless extensions.
lo no wireless extensions.
wlan0 non associé ESSID:"" Surnom:""
Mode:Auto Fréquence=2.412 GHz Point d'accÚs: Non associé
Sensibilité:0/0
Nouvelle tentative: off RTS thr: off Fragment thr: off
Clé de chiffrement: off
Gestion de l'alimentation: off
Qualité de lien=0/100 Niveau de signal=0 dBm Niveau de bruit=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 tout lu jusqu'Ă la fin
Rappelez-vous comment j'ai dit qu'il n'est pas important quelle est la vitesse maximale annoncée sur votre adaptateur ?
Eh bien, sur le Raspberry Pi (avant la sortie du modĂšle 4), tous les appareils (y compris l'adaptateur Ethernet) sont connectĂ©s Ă un mĂȘme bus USB. C'est incroyable, non ? C'est pourquoi la bande passante du bus USB est partagĂ©e entre tous les appareils qui y sont branchĂ©s. Lors de la mesure de la vitesse, que ce soit via Ethernet, USB Wi-Fi (connectĂ©s Ă un mĂȘme routeur) ou en sans fil, cela donnait environ 20 Mbit/s.
P.S. En fait, ce guide de compilation du pilote pour cet adaptateur spĂ©cifique est valable non seulement sur RPI. Je l'ai Ă©galement reproduit sur mon bureau avec Linux Mint â tout a aussi fonctionnĂ© lĂ -bas. Il vous suffit de tĂ©lĂ©charger les fichiers d'en-tĂȘte nĂ©cessaires pour la version de noyau que vous utilisez.
UPD. Des personnes informées m'ont conseillé : pour ne pas dépendre de la version du noyau, il faut compiler et installer les pilotes à l'aide de dkms. Cette option est également présentée dans le readme du pilote.
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. La proposition pour lâidentifiant de l'appareil a Ă©tĂ© acceptĂ©e dans la branche principale du dĂ©pĂŽt lwfinger/rtl8188eu.
Liens
â
â
â
â
Source : habr.com
