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

Tere Habr!

Kunagi otsustasin oma vaarika Interneti kaudu ühendada.

Varsti ostsin selleks otstarbeks lähimast poest tuntud firma TP-Link usb wi-fi vile. Ütlen kohe ära, et tegemist pole mingisuguse nano-usb-mooduliga, vaid üsna suure seadmega, umbes tavalise välkmäluseadme (või kui soovite, siis täiskasvanud mehe nimetissõrme suuruse) suuruses. Enne ostmist uurisin veidi RPI toetatud viletootjate nimekirja ja nimekirjas oli ka TP-Link (samas, nagu hiljem selgus, ei arvestanud ma peensustega, sest kurat, nagu me teame , on üksikasjades). Nii algab külm lugu minu äpardustest; esitleme teie tähelepanu kolmeosalise detektiiviloo. Huvilistele palun vaadake kass.

Artikkel WN727N WiFi-adapteri ühendamine Ubuntu/Mintiga See aitas mind osaliselt, kuid kõigepealt.

Probleemi tingimused

Arvestades:

  1. ühe pardaarvuti Raspberry Pi 2 B v1.1 – 1 tk
  2. usb wi-fi vile WN727N - 1 tk
  3. paar mitte päris kõverat kätt - 2 tk
  4. Uusim Raspbian on installitud operatsioonisüsteemina (põhineb Debian 10 Busteril)
  5. kerneli versioon 4.19.73-v7+

Otsi: looge Interneti-ühendus (Wi-Fi levitatakse teie koduse ruuteri kaudu)

Pärast adapteri lahtipakkimist lugesin selle sees olevaid juhiseid:

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

Hmm, nagu tavaliselt, mitte sõnagi Linuxist. See oli 2k19 ja draiverid tuli veel käsitsi kokku panna...

Meil oli kaasas 2 kompilaatorit, 75 tuhat raamatukogu, viis binaarset blobi, pool massiivi logoga alasti naisi ning terve meri päiseid kõigis keeltes ja märgistustega. Mitte, et see oleks tööks vajalik komplekt. Kuid kui hakkate süsteemi enda jaoks kokku panema, muutub seda raskeks peatada. Ainus, mis mind muret tekitas, olid wi-fi draiverid. Pole midagi abitumat, vastutustundetumat ja korrumpeerunud kui draiverite loomine allikast. Aga ma teadsin, et varem või hiljem läheme sellele prügile üle.

Üldiselt, nagu teate, on Linuxis usb-wi-figa askeldamine valus ja veidi maitsetu (nagu vene sushi).

Karbis on ka CD draiveritega. Ilma suurema lootuseta vaatan, mis sellel on – nad pole kindlasti selle eest hoolitsenud. Internetiotsing tõi mind tootja veebisaidile, kuid seal on Linuxi draiver ainult seadme muutmiseks v4, ja minu kätes oli v5.21. Ja pealegi väga vanade kerneli versioonide 2.6-3.16 jaoks. Ebaõnnestumisest heidutuna mõtlesin juba alguses, et oleks pidanud võtma TL-WN727N (see on veidi kallim ja saab hakkama 300Mbps versus 150 minu omaga, aga nagu selgus, pole sellel üldse tähtsust vaarika puhul kirjutatakse sellest hiljem). Kuid kõige tähtsam on see, et selle jaoks on draiverid juba olemas ja need installitakse lihtsalt paketina püsivara-ralink. Tavaliselt saate seadme versiooni vaadata seadme korpusel seerianumbri kõrval olevalt kleebiselt.

Edasine guugeldamine ja erinevate foorumite külastamine suurt head ei toonud. Ilmselt pole keegi enne mind proovinud sellist adapterit Linuxiga ühendada. Hmm, mul on vedanud nagu uppunul.

Kuigi, ei, ma valetan, kandis ka foorumite (peamiselt ingliskeelsete) külastamine vilja, mõnes teemas mainiti teatud härra lwfingerit, kes on kuulus mitmete Wi-Fi adapterite draiverite kirjutamise poolest. . Tema git-hoidla asub artikli lõpus linkides. Ja teine ​​õppetund, mille sain, on see, et peate oma seadme tuvastama, et mõista, milline draiver sellele sobida võib.

1. osa: Bourne'i identiteet

Kui seade pordiga ühendati, ei põlenud loomulikult ükski LED. Ja üldiselt pole selge, kas miski töötab või mitte.

Esiteks, et teada saada, kas kernel näeb meie seadet, vaatan failist 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

Selgus, et näeb, ja on isegi selge, et usb siinis on Realteki kiip ja seadme enda VID/PID.

Läheme kaugemale ja vaatame lsusb, ja siin ootab meid järjekordne ebaõnnestumine

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 tegu, ja näitab häbematult nime asemel tühja kohta (kuigi vendor=2357 on kindlasti TP-Link).

Selles etapis on uudishimulik lugeja ilmselt juba midagi huvitavat märganud, kuid jätame selle oma aja juurde.

Tühjade nimede probleemi uurimine viis mind identifikaatoritega saidile, kuhu sisestatakse teave teadaoleva VID/PID kohta. Meie 2357:0111 polnud seal. Nagu hiljem selgus, utiliit lsusb kasutab faili /usr/share/misc/usb.ids, mis on sama selle saidi ID-de loend. Ekraani ilu huvides lisasin oma süsteemi lihtsalt read müüja TP-Linki jaoks.

2357  TP-Link
        0111  TL-WN727N v5.21

Noh, parandasime seadmete loendis kuva, kuid see ei viinud meid draiveri valikule sammugi lähemale. Draiveri valimiseks peate teadma, millisele kiibile teie vile on tehtud. Järgmised ebaõnnestunud katsed seda Internetis välja selgitada ei toonud midagi head. Peenikese piluga kruvikeerajaga relvastatud, kangutan ettevaatlikult adapteri korgi maha ja onu Liao tige vaimusünnitus ilmub kogu oma puutumata alastiolekus. Suurendusklaasi all näete kiibi nime - RTL8188EUS. See on juba hea. Mõnes foorumis nägin postitusi, et selle sama härrasmehe lwfingeri draiver sobib selle kiibi jaoks hästi (kuigi ta kirjutab ainult RTL8188EU-st).

2. osa: Bourne'i ülemvõim

Ma laadin draiveri allikad Gitist alla.

On aeg Windows uuesti installida ja teha seda, millega Linuxi kasutajaid tavaliselt seostatakse – midagi kokku panna. Draiverite kokkupanek, nagu selgub, erineb programmide koostamisest vähe:

make
sudo make install

kuid kerneli moodulite kompileerimiseks vajame meie konkreetse versiooni jaoks mõeldud kerneli päise faile.

Varude hoidlas on pakett raspberrypi-tuuma-päised, kuid see sisaldab failide kerneli versiooni 4.19.66-v7l+, ja see meile ei sobi. Kuid vajaliku versiooni päiste saamiseks, nagu selgus, on mugav tööriist rpi-allikas (link lõpus Githubis), millega saad alla laadida vajalikud päised. Kloonime hoidla, muudame skripti käivitatavaks ja käivitame selle. Esimene käivitamine ebaõnnestub veaga - utiliit puudub bc. Õnneks on see hoidlas ja me lihtsalt installime selle.

sudo apt-get install bc

Pärast seda võtab taaskäivitamine ja päiste allalaadimine (ja siis millegi seadistamine, ma praegu ei mäleta) veidi aega ja saate toolil tagasi istuda, Windows on kõigis oma ilmingutes paremaks muutunud.

Kui kõik päised on alla laaditud, kontrollige, kas kataloog ilmub /lib/modules/4.19.73-v7+ ja selles viitab sümlink allalaaditud failide asukohale (minu jaoks on see /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

Ettevalmistav etapp on lõppenud, võite alustada kokkupanekut. Moodulite uuesti kokkupanek võtab omajagu aega, Raspberry pole kiire loom (tal on 32bit 900Mhz Cortex ARM v7).
Nii et kõik on koostatud. Installime draiveri 2. etapis (make install), kopeerides samal ajal ka rohkem draiveri töötamiseks vajalikke püsivara faile:

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

3. osa. Bourne'i ultimaatum

Ühendan vile porti ja... midagi ei juhtu. Kas see kõik oli asjata?

Hakkan projekti sees olevaid faile uurima ja ühes neist leian, milles probleem oli: draiver määrab täieliku loendi VID/PID identifikaatoritest, mida see teenindada saab. Ja selleks, et meie seade selle draiveriga töötaks, lisasin faili lihtsalt oma 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 */
};

Kompileerisin draiveri uuesti ja installisin süsteemi uuesti.

Ja seekord kõik algas. Adapteri tuli süttis ja võrguliideste loendisse ilmus uus seade.

Juhtmeta liideste vaatamine näitab järgmist.

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

Boonus neile, kes loevad lõpuni

Kas mäletate, kuidas ma ütlesin, et pole vahet, milline maksimaalne kiirus on teie adapteril märgitud?
Niisiis istuvad Malinkas (enne mudeli 4 väljaandmist) kõik seadmed (sh Etherneti-adapter) samas usb-siinis. Suurepärane, eks? Ja seetõttu on usb-siini ribalaius jagatud kõigi sellel olevate seadmete vahel. Mõõtes kiirust nii etherneti kui ka usb wi-fi kaudu (ühendatud 1 ruuteriga) nii õhu kui juhtme kaudu, oli see 20Mbit/s kanti.

PS Üldiselt ei kehti see konkreetse adapteri draiveri koostamise juhend mitte ainult RPI jaoks. Kordasin seda siis oma töölaual Linux Mintiga – ka seal töötas kõik. Peate lihtsalt oma kerneli versiooni jaoks vajalikud päisefailid samal viisil alla laadima.

UPD. Teadlikud inimesed soovitasid: selleks, et mitte sõltuda kerneli versioonist, peate draiverid koguma ja installima dkms-i abil. Seda valikut sisaldab ka draiveri readme.

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 plaaster seadme ID jaoks võeti vastu lwfinger/rtl8188eu hoidla peavoolu harus.

Viited
- RPi USB Wi-Fi adapterid
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-allikas

Allikas: www.habr.com