Spoznajte RaspberryPi s TP-Link TL-WN727N

Čau Habr!

Raz som sa rozhodol pripojiť svoju malinovku k internetu vzduchom.

Hneď ako bolo povedané, tak som si za týmto účelom zakúpil v najbližšom obchode usb wi-fi píšťalku od známej firmy TP-Link. Hneď poviem, že nejde o nejaký druh nano usb modulu, ale o dosť veľké zariadenie s veľkosťou obyčajného flash disku (alebo, ak chcete, s veľkosťou ukazováka dospelého muža). Pred kúpou som si urobil malý prieskum v zozname podporovaných výrobcov píšťaliek pre RPI a TP-Link bol na zozname (ako sa však neskôr ukázalo, nebral som do úvahy jemnosti, pretože čert, ako vieme , je v detailoch). Chladný príbeh o mojich nešťastiach sa teda začína, predstavujeme vám detektívku v 3 častiach. Pre záujemcov sa obráťte na kat.

článok Pripojenie WiFi adaptéra WN727N k Ubuntu/Mint Čiastočne mi to pomohlo, ale najskôr.

Podmienky problému

Vzhľadom na to:

  1. jednodoskový počítač Raspberry Pi 2 B v1.1 – 1 kus
  2. usb wi-fi píšťalka WN727N - 1 kus
  3. pár nie celkom krivých rúk - 2 kusy
  4. Najnovší Raspbian je nainštalovaný ako OS (založený na Debian 10 Buster)
  5. verzia jadra 4.19.73-v7+

Nájsť: pripojenie k internetu (Wi-Fi sa distribuuje z vášho domáceho smerovača)

Po rozbalení adaptéra som si prečítal pokyny vo vnútri:

Kompatibilita systému: Windows 10/8/7/XP (dokonca aj na oblohe, dokonca aj XP) a MacOS 10.9-10.13

Hmm, ako obvykle, o Linuxe ani slovo. Bolo to 2k19 a ovládače bolo ešte potrebné zložiť ručne...

Mali sme so sebou 2 kompilátory, 75 XNUMX knižníc, päť binárnych guľôčok, polovicu poľa nahých žien s logom a celé more hlavičiek všetkých jazykov a značiek. Nie že by to bola nevyhnutná sada pre danú prácu. Ale akonáhle začnete zostavovať systém pre seba, je ťažké zastaviť. Jediná vec, ktorá mi spôsobila obavy, boli ovládače pre wi-fi. Nie je nič bezmocnejšie, nezodpovednejšie a skorumpovanejšie ako stavať ovládače od zdroja. Vedel som však, že skôr či neskôr prejdeme na toto svinstvo.

Vo všeobecnosti, ako viete, hranie sa s usb wi-fi v systéme Linux je bolestivé a trochu bez chuti (ako ruské sushi).

Balenie obsahuje aj CD s ovládačmi. Bez veľkej nádeje sa pozerám na to, čo je na ňom - ​​rozhodne sa o to nestarali. Internetové vyhľadávanie ma priviedlo na webovú stránku výrobcu, ale je tam ovládač pre Linux len na revíziu zariadenia v4a v mojom náručí v5.21. A okrem toho pre veľmi staré verzie jadra 2.6-3.16. Odradený neúspechom na úplnom začiatku som si už myslel, že som si mal zobrať TL-WN727N (je trochu drahší a u mňa zvládne 300Mbps oproti 150, ale ako sa ukázalo, pre mňa to vôbec nevadí malina, o tom bude napísané neskôr). Najdôležitejšie však je, že ovládače už existujú a jednoducho sa nainštalujú ako balík firmware-ralink. Revíziu zariadenia si zvyčajne môžete pozrieť na tele zariadenia na nálepke vedľa sériového čísla.

Ďalšie googlovanie a navštevovanie rôznych fór veľa dobrého neprinieslo. Vraj nikto predo mnou sa nepokúšal pripojiť takýto adaptér k Linuxu. Hmm, mám šťastie ako utopenec.

Aj keď nie, klamem, aj návšteva fór (väčšinou anglicky písaných) priniesla svoje ovocie, v niektorých témach bola zmienka o istom pánovi lwfingerovi, ktorý sa preslávil písaním množstva ovládačov pre Wi-Fi adaptéry . Jeho git repozitár je na konci článku v odkazoch. A druhá lekcia, ktorú som sa naučil, je, že musíte identifikovať svoje zariadenie, aby ste pochopili, ktorý ovládač môže byť preň vhodný.

Časť 1: Bourneova identita

Keď bolo zariadenie zapojené do portu, samozrejme, nesvietila žiadna LED dióda. A vo všeobecnosti nie je v žiadnom prípade jasné, či niečo funguje alebo nie.

Po prvé, aby som zistil, či jadro vidí naše zariadenie, pozriem sa do 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

Ukázalo sa, že vidí, a dokonca je jasné, že na zbernici usb je čip Realtek a VID/PID samotného zariadenia.

Poďme ďalej a pozrime sa lsusb, a tu nás čaká ďalší neúspech

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

Systém nevie, o aký druh zariadenia ide, a hanblivo ukazuje prázdne miesto namiesto názvu (hoci vendor=2357 je určite TP-Link).

V tejto fáze si už zvedavý čitateľ pravdepodobne všimol niečo zaujímavé, ale to si necháme až na náš čas.

Skúmanie problému prázdnych mien ma priviedlo na stránku s identifikátormi, kde sa zadávajú informácie o známom VID/PID. Naša 2357:0111 tam nebola. Ako sa neskôr ukázalo, utilita lsusb používa súbor /usr/share/misc/usb.ids, čo je rovnaký zoznam ID z tohto webu. Pre krásu displeja som do môjho systému jednoducho pridal riadky pre dodávateľa TP-Link.

2357  TP-Link
        0111  TL-WN727N v5.21

Dobre, opravili sme zobrazenie v zozname zariadení, no k výberu ovládača nás to nepriblížilo ani o krok. Ak chcete vybrať ovládač, musíte vedieť, na akom čipe je vaša píšťalka vyrobená. Ďalšie neúspešné pokusy zistiť to na internete neviedli k ničomu dobrému. Vyzbrojený tenkým štrbinovým skrutkovačom opatrne vypáčim uzáver adaptéra a zlomyseľný nápad strýka Liaa sa objaví v celej svojej nedotknutej nahote. Pod lupou vidíte názov čipu - RTL8188EUS. Toto je už dobré. Na niektorých fórach som videl príspevky, že ovládač od toho istého pána lwfinger je vhodný pre tento čip (aj keď píše len o RTL8188EU).

Časť 2: Bournova nadvláda

Zdroje ovládačov stiahnem z Gitu.

Je čas preinštalovať Windows a urobiť to, s čím sú používatelia Linuxu zvyčajne spájaní – zostaviť niečo z nejakého druhu. Ako sa ukázalo, zostavovanie ovládačov sa len málo líši od kompilácie programov:

make
sudo make install

ale na kompiláciu modulov jadra potrebujeme hlavičkové súbory jadra pre našu špecifickú verziu.

V sklade je balík raspberrypi-kernel-headers, ale obsahuje verziu jadra súborov 4.19.66-v7l+, a to nám nevyhovuje. Ale na získanie hlavičiek požadovanej verzie, ako sa ukázalo, existuje pohodlný nástroj zdroj rpi (odkaz na konci na Github), pomocou ktorého si môžete stiahnuť potrebné hlavičky. Naklonujeme úložisko, spravíme spustiteľný skript a spustíme ho. Prvé spustenie zlyhá s chybou - neexistuje žiadna utilita bc. Našťastie je v úložisku a jednoducho ho nainštalujeme.

sudo apt-get install bc

Potom reštartovanie a sťahovanie hlavičiek (a potom nastavenie niečoho, teraz si nepamätám) nejaký čas trvá a môžete si sadnúť na stoličku, Windows sa zlepšil vo všetkých svojich prejavoch.

Po stiahnutí všetkých hlavičiek skontrolujte, či sa zobrazuje adresár /lib/modules/4.19.73-v7+ a v ňom symbolický odkaz ukazuje na miesto, kde sa nachádzajú stiahnuté súbory (pre mňa je to /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

Prípravná fáza je dokončená, môžete začať s montážou. Zloženie modulov opäť nejaký čas trvá, Raspberry nie je žiadna rýchla beštia (má 32bit 900Mhz Cortex ARM v7).
Takže všetko skompilované. Ovládač nainštalujeme v 2. kroku (vykonať inštaláciu), pričom skopírujeme aj ďalšie súbory firmvéru potrebné na fungovanie ovládača:

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

Časť 3. Bournovo ultimátum

Zapojím píšťalku do portu a... nič sa nedeje. Bolo to všetko nanič?

Začnem študovať súbory v projekte a v jednom z nich zistím, v čom bol problém: ovládač špecifikuje úplný zoznam identifikátorov VID/PID, ktorým môže slúžiť. A aby naše zariadenie fungovalo s týmto ovládačom, jednoducho som do súboru pridal svoje 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 */
};

Prekompiloval som ovládač a preinštaloval ho do systému.

A tentoraz všetko začalo. Svetlo na adaptéri sa rozsvietilo a v zozname sieťových rozhraní sa objavilo nové zariadenie.

Zobrazenie bezdrôtových rozhraní ukazuje nasledovné:

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 pre tých, ktorí čítajú až do konca

Pamätáte si, ako som povedal, že nezáleží na tom, aká maximálna rýchlosť je uvedená na vašom adaptéri?
Takže na Malinke (pred vydaním modelu 4) sú všetky zariadenia (vrátane ethernetového adaptéra) na tej istej zbernici USB. Skvelé, však? A preto je šírka pásma usb zbernice rozdelená medzi všetky zariadenia na nej. Pri meraní rýchlosti aj cez ethernet aj cez usb wi-fi (pripojený na 1 router) vzduchom aj drôtom to bolo okolo 20Mbit/s.

PS Vo všeobecnosti platí, že tento návod na zostavenie ovládača pre tento konkrétny adaptér platí nielen pre RPI. Potom som to zopakoval na pracovnej ploche s Linux Mint - tam tiež všetko fungovalo. Rovnakým spôsobom si musíte stiahnuť potrebné hlavičkové súbory pre vašu verziu jadra.

UPD. Znalí ľudia navrhli: aby ste neboli závislí od verzie jadra, musíte zhromaždiť a nainštalovať ovládače pomocou dkms. Túto možnosť obsahuje aj súbor readme pre ovládač.

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. Navrhnuté náplasť pre ID zariadenia bolo prijaté do hlavnej vetvy úložiska lwfinger/rtl8188eu.

referencie
- RPi USB Wi-Fi adaptéry
- Gitbub lwfinger/rtl8188eu
- usb.ids
- zdroj rpi

Zdroj: hab.com