Fem amics RaspberryPi amb TP-Link TL-WN727N

Hola Habr!

Una vegada vaig decidir connectar el meu gerd a Internet per aire.

Tan aviat com dit i fet, amb aquesta finalitat vaig comprar un xiulet wi-fi USB de la coneguda empresa TP-Link a la botiga més propera. De seguida diré que no es tracta d'una mena de mòdul nano USB, sinó d'un dispositiu bastant gran, de la mida d'una unitat flaix normal (o, si voleu, de la mida del dit índex d'un home adult). Abans de comprar, vaig fer una mica de recerca sobre la llista de fabricants de xiulets compatibles per a RPI i TP-Link estava a la llista (no obstant això, com va resultar més tard, no vaig tenir en compte les subtileses, perquè el diable, com sabem , està als detalls). Així comença el fred relat de les meves desventures; us presentem una història de detectius en 3 parts. Per als interessats, consulteu el cat.

Article Connexió de l'adaptador WiFi WN727N a Ubuntu/Mint Em va ajudar en part, però primer és el primer.

Condicions del problema

Donat:

  1. Ordinador de placa única Raspberry Pi 2 B v1.1 – 1 peça
  2. xiulet wi-fi USB WN727N - 1 peça
  3. un parell de mans no gaire tortes - 2 peces
  4. L'últim Raspbian està instal·lat com a sistema operatiu (basat en Debian 10 Buster)
  5. versió del nucli 4.19.73-v7+

Cerca: connecta't a Internet (la Wi-Fi es distribueix des del teu encaminador domèstic)

Després de desembalar l'adaptador, he llegit les instruccions a l'interior:

Compatibilitat del sistema: Windows 10/8/7/XP (fins i tot el cel, fins i tot XP) i MacOS 10.9-10.13

Hmm, com de costum, ni una paraula sobre Linux. Eren 2k19, i els controladors encara s'havien de muntar manualment...

Teníem amb nosaltres 2 compiladors, 75 mil biblioteques, cinc blobs binaris, mitja sèrie de dones nues amb un logotip i tot un mar de capçaleres de tots els idiomes i marques. No és que aquest sigui un conjunt necessari per a la feina. Però un cop comenceu a muntar un sistema per a vosaltres mateixos, és difícil aturar-vos. L'únic que em va preocupar van ser els controladors de la connexió wi-fi. No hi ha res més indefens, irresponsable i corrupte que construir controladors des de l'origen. Però sabia que tard o d'hora ens canviaríem a aquestes escombraries.

En general, com ja sabeu, jugar amb wi-fi USB a Linux ho és dolorosa i una mica insípida (com el sushi rus).

La caixa també conté un CD amb els controladors. Sense gaire esperança miro el que hi ha a sobre; definitivament no se n'han ocupat. Una cerca a Internet em va portar al lloc web del fabricant, però només hi ha un controlador de Linux per a la revisió del dispositiu v4, i als meus braços estava v5.21. I a més, per a les versions del nucli molt antigues 2.6-3.16. Desanimat pel fracàs al principi, ja vaig pensar que hauria d'haver agafat el TL-WN727N (és una mica més car i pot suportar 300 Mbps enfront dels 150 del meu, però va resultar que això no importa gens). per al gerd, això s'escriurà més endavant). Però el més important és que els controladors ja existeixen i simplement s'instal·len com a paquet firmware-ralink. Normalment podeu veure la revisió del dispositiu al cos del dispositiu en un adhesiu al costat del número de sèrie.

Més cercar a Google i visitar diversos fòrums no va aportar gaire benefici. Pel que sembla, ningú abans que jo ha intentat connectar aquest adaptador a Linux. Hmm, tinc tanta sort com un home ofegat.

Encara que, no, menteixo, visitar fòrums (majoritàriament en anglès) també va donar els seus fruits, en alguns temes es va mencionar un tal senyor lwfinger, famós per escriure una sèrie de controladors per a adaptadors Wi-Fi. . El seu repositori git es troba al final de l'article als enllaços. I la segona lliçó que vaig aprendre és que heu d'identificar el vostre dispositiu per entendre quin controlador pot ser adequat per a ell.

Part 1: La identitat de Bourne

Quan el dispositiu es va connectar al port, per descomptat, no s'encenia cap LED. I en general no està clar de cap manera si alguna cosa funciona o no.

En primer lloc, per saber si el nucli veu el nostre dispositiu, miro a 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

Va resultar que veu, i fins i tot està clar que hi ha un xip Realtek i el VID/PID del propi dispositiu al bus USB.

Anem més enllà i mirem lsusb, i aquí ens espera un altre fracàs

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 sap quin tipus de dispositiu és i mostra tímidament un espai buit en lloc del nom (tot i que el venedor=2357 és definitivament TP-Link).

En aquesta etapa, el lector curiós probablement ja ha notat alguna cosa interessant, però ho deixarem per al nostre moment.

Investigar el problema dels noms buits em va portar a un lloc amb identificadors, on s'introdueix informació sobre VID/PID conegut. El nostre 2357:0111 no hi era. Com va resultar més tard, la utilitat lsusb utilitza un fitxer /usr/share/misc/usb.ids, que és la mateixa llista d'identificacions d'aquest lloc. Per a la bellesa de la pantalla, simplement he afegit línies per al proveïdor TP-Link al meu sistema.

2357  TP-Link
        0111  TL-WN727N v5.21

Bé, vam corregir la visualització a la llista de dispositius, però no ens va acostar ni un pas a triar un controlador. Per seleccionar un conductor, has de saber en quin xip està fet el teu xiulet. Els següents intents infructuosos d'esbrinar-ho a Internet no van portar a res bo. Armat amb un tornavís fi, trec amb cura la tapa de l'adaptador i la idea viciosa de l'oncle Liao apareix amb tota la seva nuesa prístina. Sota una lupa es pot veure el nom del xip - RTL8188EUS. Això ja és bo. En alguns fòrums vaig veure publicacions que el controlador d'aquest mateix senyor lwfinger s'adaptava bé a aquest xip (tot i que només escriu sobre RTL8188EU).

Part 2: La supremacia de Bourne

Baixo les fonts del controlador de Git.

Ha arribat el moment de tornar a instal·lar Windows i fer el que normalment s'associen els usuaris de Linux: muntar alguna cosa d'alguna mena. El muntatge de controladors, segons resulta, difereix poc de la compilació de programes:

make
sudo make install

però per compilar mòduls del nucli necessitem els fitxers de capçalera del nucli per a la nostra versió específica.

Hi ha un paquet al dipòsit d'estoc capçaleres del nucli de raspberrypi, però conté la versió del nucli dels fitxers 4.19.66-v7l+, i això no ens convé. Però per obtenir les capçaleres de la versió requerida, com va resultar, hi ha una eina convenient rpi-font (enllaç al final a Github), amb el qual podeu descarregar les capçaleres necessàries. Clonem el dipòsit, fem que l'script sigui executable i l'executem. El primer llançament falla amb un error: no hi ha cap utilitat bc. Afortunadament, està al repositori i simplement l'instal·lem.

sudo apt-get install bc

Després d'això, reiniciar i descarregar les capçaleres (i després configurar alguna cosa, ara no ho recordo) triga un temps i us podeu asseure a la vostra cadira, Windows ha millorat en totes les seves manifestacions.

Després de descarregar totes les capçaleres, comproveu que apareix el directori /lib/modules/4.19.73-v7+ i en ell l'enllaç simbòlic apunta al lloc on es troben els fitxers descarregats (per a mi és /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

S'ha completat l'etapa preparatòria, podeu començar el muntatge. Tornar a muntar els mòduls porta una mica de temps, el Raspberry no és una bèstia ràpida (té un Cortex ARM v32 de 900 bits a 7 Mhz).
Així que tot compilat. Instal·lem el controlador en el segon pas (fer instal·lar), alhora que copiem més fitxers de microprogramari necessaris perquè el controlador funcioni:

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

Part 3. L'ultimàtum de Bourne

Connecto el xiulet al port i... no passa res. Va ser tot per res?

Començo a estudiar els fitxers dins del projecte i en un d'ells trobo quin era el problema: el controlador especifica una llista completa d'identificadors VID/PID que pot servir. I perquè el nostre dispositiu funcioni amb aquest controlador, simplement he afegit el meu identificador al fitxer 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 */
};

Vaig tornar a compilar el controlador i el vaig tornar a instal·lar al sistema.

I aquesta vegada tot va començar. La llum de l'adaptador es va il·luminar i va aparèixer un dispositiu nou a la llista d'interfícies de xarxa.

La visualització de les interfícies sense fil mostra el següent:

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

Bonificació per als que llegiu fins al final

Recordeu com vaig dir que no importa la velocitat màxima indicada al vostre adaptador?
Així, a Malinka (abans del llançament del model 4), tots els dispositius (inclòs l'adaptador Ethernet) es troben al mateix bus USB. Genial, oi? I, per tant, l'ample de banda del bus USB es divideix entre tots els dispositius que hi ha. Quan es mesurava la velocitat tant per ethernet com per usb wi-fi (connectat a 1 encaminador) tant per aire com per cable, era d'uns 20 Mbit/s.

PS En general, aquesta guia per compilar un controlador per a aquest adaptador en particular és vàlida no només per a RPI. Aleshores ho vaig repetir al meu escriptori amb Linux Mint; també hi funcionava tot. Només cal que baixeu els fitxers de capçalera necessaris per a la vostra versió del nucli de la mateixa manera.

UPD. Suggereixen persones coneixedores: per no dependre de la versió del nucli, cal recollir i instal·lar controladors amb dkms. El readme per al controlador també conté aquesta opció.

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. Proposat pegat per a l'identificador del dispositiu es va acceptar a la branca principal del dipòsit lwfinger/rtl8188eu.

Referències
- Adaptadors USB Wi-Fi RPi
- Gitbub lwfinger/rtl8188eu
- identificadors usb
- rpi-font

Font: www.habr.com