Sõbrune RaspberryPi-ga TP-Link TL-WN727N

Tere, Habr!

Otsustasin, et ühendan oma RPi internetiga traadita.

Otsustasin soetada lähimast poest USB Wi-Fi-adapteri tuntud firmalt TP-Link. Ütleme kohe, et see pole mingi nano USB seade, vaid tõeliselt suur seade, umbes sama suur kui tavaline mälupulk (või kui soovite, siis nagu täiskasvanud mehe keskmine sõrm). Enne ostu uurisin veidi RPi toetatud adapterite nimekirja ja TP-Link oli seal (kuid hiljem selgus, et ma ei arvestanud teatavaid nüansse, sest nagu öeldakse, on diabeet detailides). Nii algab mu külm jutt mu seiklustest, teie ette tuuakse kolmeosaline detektiivlugu. Huvi tundnud palun klikkige edasi.

Artikkel Ühendame WiFi-adapteri WN727N Ubuntu/Mintiga osaliselt aitas, aga kõigest järjekorras.

Ülesande tingimused

Antud:

  1. üksikplaat arvuti Raspberry Pi 2 B v1.1 — 1 tükk
  2. USB Wi-Fi-adapter WN727N — 1 tükk
  3. paar mitte just käänulisi käsi — 2 tükki
  4. operatsioonisüsteemiks on installitud viimane Raspbian (Debian 10 Buster põhjal)
  5. tuuma versioon 4.19.73-v7+

Leidke: internetiühendus (WiFi jagatakse kodu ruuterist)

Pärast adapteri väljapakkimist loen sees olevat juhendit:

Süsteemi ühilduvus: Windows 10/8/7/XP (isegi Vista, isegi XP) ja MacOS 10.9-10.13

Hmm, Linuxi kohta ei öelda nagu tavaliselt midagi. Aasta 2019, aga draiverid tuli ikka käsitsi kokku panna…

Meil oli kaasas kaks kompilaatorit, 75 tuhat raamatukogu, viis binaarfaili, poolpakki logotühi ja terve meri päiseid igasuguste keelte ja märgistuskeelte jaoks. Mitte et see olnuks vajalik komplekt tööks. Aga kui oled hakanud süsteemi endale kokku panema, on raske peatuda. Ainuke asi, mis mind murelikuks tegi, olid WiFi draiverid. Pole midagi abivajatut, vastutustundetut ja rikkis kui draiverite kogumine lähtekoodist. Aga ma teadsin, et varem või hiljem jõuame ka selle jama juurde.

Nagu teada, on USB WiFi-ga tegelemine Linuxis valus ja mõnevõrra maitsetu (nagu Vene sushi).

Karbis on ka CD-disk draiveritega. Ilma eriliste lootusteta vaatan, mis seal on — täpselt, ei ole hoolt kantud. Internetiotsing suunas mind tootja veebisaidile, kuid seal on Linuxi draiver ainult seadme versiooni jaoks v4, ja mul oli käes v5.21. Ja lisaks oli see mõeldud väga vanadele kerneliversioonidele 2.6-3.16. Esialgsest ebaõnnest heidutatud, mõtlesin juba, et oleksin pidanud võtma TL-WN727N (see on natuke kallim ja toetab 300 Mbps, võrreldes minu 150 Mbps-ga, kuid nagu selgus, ei oma see Raspbery Pi jaoks üldse tähendust, sellest räägime hiljem). Kuid kõige tähtsam on see, et selle jaoks on juhendid juba olemas ja need installitakse lihtsalt paketi kaudu firmware-ralink. Seadme revisioni saab tavaliselt näha seadme korpuselt kleebiselt, mis asub koos seerianumbriga.

Edasi uurimine ja erinevate foorumite külastamine ei toonud erilisi tulemusi. Tundub, et keegi ei ole proovinud just seda adapterit Linuxiga ühendada. Jah, ma olen nagu uppuja, kellel on halb õnn.

Kuigi ei, valetasin, foorumite külastamine (peamiselt ingliskeelsed) tõi ka tulemusi, mõnes teemas mainiti hr lwfingerit, kellel on tuntud maine, et ta on kirjutanud mitmeid draivereid WiFi adapteritele. Tema GitHubi repository on artikli lõpus linkides. Ja teine õppetund, mille ma sain — tuleb oma seade kindlaks teha, et mõista, milline draiver võiks sobida.

Osa 1. Bourne'i tuvastamine

Seadet porte sisse lülitades ei süttinud kindlasti ükski LED. Ja üldiselt ei ole mingil moel aru saada, kas midagi töötab või mitte.

Esmalt, et selgitada, kas protsessor näeb meie seadet, vaatan dmesg'i:

[  965.606998] usb 1-1.3: uus kiirus USB seade number 9 kasutades dwc_otg
[  965.738195] usb 1-1.3: Uus USB seade leitud, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[  965.738219] usb 1-1.3: Uued USB seadme stringid: Mfr=1, Product=2, SerialNumber=3
[  965.738231] usb 1-1.3: Toode: 802.11n NIC
[  965.738243] usb 1-1.3: Tootja: Realtek
[  965.738255] usb 1-1.3: Seerianumber: 00E04C0001

Selgus, et ta näeb ja on isegi selge, et seal on Realtek kiip ja seadme VID/PID USB bussis.

Jätkame, vaatame lsusb, ja siin ootab meid jälle ebaõnn.

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

Süsteem ei tea, mis seadmega on tegemist, ja häbeneb näidata nime asemele tühja koha (kuigi vendor=2357 on kindlasti TP-Link).

Sel hetkel on uudishimuliku lugeja ilmselt juba märganud midagi huvitavat, kuid jätame selle oma aega.

Tühi nime probleemide uurimine viis mind veebisaidile, kus salvestatakse tuntud VID/PID teave. Meie 2357:0111 seal ei olnud. Hiljem selgus, et utiliit lsusb kasutab faili /usr/share/misc/usb.ids, mis on sama identifikaatorite nimekiri sellest saidist. Ilusama seadistuse nimel lisasin lihtsalt oma süsteemi selle loendi read TP-Linki tootja jaoks.

2357  TP-Link
        0111  TL-WN727N v5.21

Nii et seadmete nimekirjas oleme parandanud, kuid see ei aidanud meid juurdepääsul draiverile vähemasti sammu võrra. Draiveri valimiseks peate teadma, millisel kiibil teie adapter põhineb. Järjekordsed ebaõnnestunud katsed seda internetis välja selgitada ei andnud häid tulemusi. Relvastun õhukese lamepeaga kruvikeerajaga ja tõstan ettevaatlikult adapteri katte, ning mu silme ette ilmub onu Liao jätkuvalt vaieldamatu looming. Suurendusklaasi all on võimalik näha kiibi nime — RTL8188EUS. See on juba hea. Mõnel foorumil olen näinud postitusi, et selle kiibi jaoks sobib ideaalselt just selle sama härra lwfingeri draiver (isegi hoolimata sellest, et seal on kirjutatud ainult RTL8188EU kohta).

Osa 2. Borna ülemuslikkus

Laadin draiveri lähteFailid Gitist.

On aeg uuesti installida Windows ja tegeleda sellega, mida tavaliselt seostatakse Linuxi kasutajatega — midagi lähtekoodist kokku compile'ida. Draiverite koostamine ei erine oluliselt programmide compile'imisest:

make
sudo make install

Kuid tuumamoodulite compile'imiseks vajame meie konkreetse versiooni jaoks tuumapeade faile.

Toores hoidlas on saadaval pakett raspberrypi-kernel-headers, kuid see sisaldab failide versiooni tuumale 4.19.66-v7l+, ja see ei sobi meile. Kuid vajalikud peafailid on mugavalt saadaval tööriista kaudu rpi-source (link lõpus GitHubis), mille abil saab vajalikud peafailid alla laadida. Klooni hoidla, muuda skript täitmiseks käivitatavaks ja käivita. Esimene käivitamine kukub vigade tõttu välja — puudub utiliit bc. Õnneks on see hoidlas olemas ja me lihtsalt installime selle.

sudo apt-get install bc

Pärast seda käivitame uuesti ja peafailide allalaadimine (ja siis midagi seadistamine, praegu ei mäleta) võtab aega ja saab tagasi toetuda toolile, Windows on igasugustes aspektides paremaks muutunud.

Pärast kõigi peafailide allalaadimist kontrollime, et kaust oleks loodud. /lib/modules/4.19.73-v7+ ja ja sümbol osutab kohale, kus asuvad allalaaditud failid (minu puhul see on /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

Eeltingimus on täidetud, nüüd saab hakata kokku panema. Moodulite koostamine võtab jälle teatud aega, razberi pi ei ole kiirem (tema protsessor on 32bit 900Mhz Cortex ARM v7).
Nii et kõik on kompileeritud. Paigaldame draiveri teise sammuna (make install), samas toimub ka veel firmware failide kopeerimine, mis on draiveri tööks vajalik:

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

Osa 3. Borna Ultimatum

Sisestan USB-pulga porti ja... ei juhtu midagi. Kas see oli kõik asjata?

Alustan projekti failide uurimist ja leian ühe neist probleemi põhjuste seast: draiveris on määratud täielik VID/PID identifikaatorite loetelu, mida see suudab teenindada. Ja et meie seade selle draiveriga töötaks, lisasin lihtsalt oma ID faili 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 */
};

Draiver uuesti kompileeritud ja installitud süsteemi.

Seekord töötab kõik. Adapteri lamp põleb ja uue seadmena on ilmunud võrgu liides.

Juhtmevabad liidesed näitavad järgmist:

pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     unassociated  ESSID:""  Nickname:""
          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

Boonus neile, kes lugesid lõpuni

Kas mäletate, kuidas ma ütlesin, et teie adapteri maksimaalne kiirus pole oluline?
Noh, vanematel mudelitel (enne 4. mudelit) on kõik seadmed, sealhulgas ethernet-adapter, ühendatud ühe usb-bussi kaudu. Lahe, eks? Seetõttu jaguneb usb-bussi läbilaskevõime kõigi sellel olevate seadmete vahel. Kiiruseteste tehes, olgu need siis etherneti kaudu, usb wi-fi (ühendatud ühe ruuteriga), õhu kaudu või kaabli kaudu, võitis limit umbes 20 Mbit/s.

P.S. Tegelikult kehtib see juhend selle konkreetse adapteri jaoks mitte ainult RPI-l. Kordasin seda ka oma Linux Mint lauaarvutis — seal töötas kõik samuti. Lihtsalt peate alla laadima vajalikud päisefailid teie kasutatava kerneli versiooni jaoks.

UPD. Teadlikud inimesed soovitasid: et mitte sõltuda kerneliversioonist, tuleks draivereid ehitada ja installida dkms-i abil. Juhendis on ka see variant olemas.

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. Pakutud plekk seadme ID on vastu võetud peavoolu haru lwfinger/rtl8188eu repositooriumis.

Lingid
RPi USB Wi-Fi adapterid
GitHub lwfinger/rtl8188eu
usb.ids
rpi-source

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster