Ystätetään RaspberryPi TP-Link TL-WN727N:n kanssa

Hei Habr!

Päätin kerran yhdistää vadelmani Internetiin langattomasti.

Heti sanottuani ostin tätä tarkoitusta varten lähimmästä liikkeestä usb wi-fi-pillin tunnetulta TP-Link-yritykseltä. Sanon heti, että tämä ei ole mikään nano-usb-moduuli, vaan melko iso laite, noin tavallisen flash-aseman kokoinen (tai jos haluat, aikuisen miehen etusormen kokoinen). Ennen ostamista tutkin hieman RPI:n tuettujen pillivalmistajien luetteloa ja TP-Link oli luettelossa (kuten myöhemmin kävi ilmi, en ottanut huomioon hienouksia, koska paholainen, kuten tiedämme , on yksityiskohdissa). Joten kylmä tarina epäonnistumisistani alkaa; esittelemme huomionne dekkarassa 3 osassa. Kiinnostuneet, katso cat.

artikkeli WN727N WiFi-sovittimen yhdistäminen Ubuntuun/Mintiin Se auttoi minua osittain, mutta ensinnäkin.

Ongelman olosuhteet

ilmoittautua:

  1. yksilevytietokone Raspberry Pi 2 B v1.1 – 1 kpl
  2. usb wi-fi pilli WN727N - 1 kpl
  3. pari ei aivan kieroa kättä - 2 kpl
  4. Uusin Raspbian on asennettu käyttöjärjestelmänä (perustuu Debian 10 Busteriin)
  5. ytimen versio 4.19.73-v7+

Etsi: muodosta yhteys Internetiin (Wi-Fi jaetaan kotireitittimestäsi)

Kun olen purkanut sovittimen pakkauksesta, luin sisällä olevat ohjeet:

Järjestelmän yhteensopivuus: Windows 10/8/7/XP (jopa taivas, jopa XP) ja MacOS 10.9-10.13

Hmm, kuten tavallista, ei sanaakaan Linuxista. Se oli 2k19, ja ajurit piti vielä koota käsin...

Meillä oli mukanamme 2 kääntäjää, 75 tuhatta kirjastoa, viisi binaarista blobia, puoli joukko alastomia naisia ​​logolla ja koko meri otsikoita kaikilla kielillä ja merkinnöillä. Ei sillä, että tämä olisi välttämätön setti työhön. Mutta kun aloitat järjestelmän kokoamisen itsellesi, sen lopettaminen on vaikeaa. Ainoa asia, joka aiheutti minulle huolta, olivat wi-fi-ajurit. Mikään ei ole avuttomampaa, vastuuttomampaa ja korruptoituneempaa kuin ohjainten rakentaminen lähteestä. Mutta tiesin, että ennemmin tai myöhemmin siirrymme tähän roskaan.

Yleisesti ottaen, kuten tiedät, usb wi-fi:n kanssa näpertely Linuxissa on tuskallista ja hieman mautonta (kuten venäläinen sushi).

Pakkauksessa on myös CD ajureineen. Ilman suurta toivoa katson mitä siinä on - he eivät todellakaan ole huolehtineet siitä. Internet-haku toi minut valmistajan verkkosivuille, mutta siellä on Linux-ohjain vain laiteversiota varten v4, ja sylissäni oli v5.21. Ja lisäksi erittäin vanhoille ytimen versioille 2.6-3.16. Epäonnistumisen masentuneena ajattelin jo heti alussa, että minun olisi pitänyt ottaa TL-WN727N (se on vähän kalliimpi ja kestää 300 Mbps vs. 150 omallani, mutta kuten kävi ilmi, tällä ei ole mitään merkitystä vadelman osalta tästä kirjoitetaan myöhemmin). Mutta tärkeintä on, että sille on jo olemassa ajurit ja ne asennetaan yksinkertaisesti pakettina firmware-ralink. Yleensä näet laitteen version laitteen rungosta sarjanumeron vieressä olevasta tarrasta.

Jatko googlailu ja eri foorumeilla käynti ei tuonut paljon hyvää. Ilmeisesti kukaan ennen minua ei ole yrittänyt liittää tällaista sovitinta Linuxiin. Hmm, olen yhtä onnekas kuin hukkunut mies.

Vaikka ei, valehtelen, myös keskustelupalstalla (enimmäkseen englanninkielisillä) käyminen kantoi hedelmää; joissain aiheissa mainittiin eräs herra lwfinger, joka on kuuluisa kirjoittaessaan useita ohjaimia Wi-Fi-sovittimille. . Hänen git-arkistonsa on artikkelin lopussa linkeissä. Ja toinen oppitunti, jonka opin, on, että sinun on tunnistettava laitteesi ymmärtääksesi, mikä ohjain voi olla sille sopiva.

Osa 1: Bourne-identiteetti

Kun laite liitettiin porttiin, mikään LED ei tietenkään syty. Ja yleensäkään ei ole millään tavalla selvää, toimiiko jokin vai ei.

Ensinnäkin saadakseni selville, näkeekö ydin laitteemme, katson dmesg:stä:

[  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

Kävi ilmi, että se näkee, ja on jopa selvää, että usb-väylässä on Realtek-siru ja itse laitteen VID/PID.

Mennään pidemmälle ja katsotaan lsusb, ja tässä meitä odottaa toinen epäonnistuminen

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

Järjestelmä ei tiedä, millainen laite on, ja näyttää röyhkeästi tyhjän tilan nimen sijasta (vaikka vendor=2357 on ehdottomasti TP-Link).

Tässä vaiheessa utelias lukija on luultavasti jo huomannut jotain mielenkiintoista, mutta jätetään se aikamme ajaksi.

Tyhjien nimien ongelman tutkiminen johti minut tunnisteiden sisältävälle sivustolle, jonne syötetään tietoa tunnetusta VID/PID:stä. Meidän 2357:0111 ei ollut siellä. Kuten myöhemmin kävi ilmi, apuohjelma lsusb käyttää tiedostoa /usr/share/misc/usb.ids, joka on sama luettelo tämän sivuston tunnuksista. Näytön kauneuden vuoksi lisäsin järjestelmääni rivit myyjän TP-Linkille.

2357  TP-Link
        0111  TL-WN727N v5.21

No, korjasimme näyttöä laiteluettelossa, mutta se ei tuonut meitä askeltakaan lähemmäksi ohjaimen valintaa. Kuljettajan valitsemiseksi sinun on tiedettävä, mille sirulle pilli on tehty. Seuraavat epäonnistuneet yritykset selvittää tämä Internetissä eivät johtaneet mihinkään hyvään. Ohuella uraruuvimeisselillä aseistettuna irrotan varovasti sovittimen kannen ja Liaon-sedän ilkeä aivot ilmestyvät kaikessa koskemattomassa alastomuudessaan. Suurennuslasin alla näet sirun nimen - RTL8188EUS. Tämä on jo hyvä. Joillakin foorumeilla näin viestejä, että tuon saman herrasmiehen lwfingerin ajuri sopii hyvin tälle sirulle (vaikka hän kirjoittaa vain RTL8188EU:sta).

Osa 2: Bournen ylivalta

Lataan ohjainlähteet Gitistä.

On aika asentaa Windows uudelleen ja tehdä se, mihin Linux-käyttäjät yleensä yhdistetään - koota jotain jostain. Ohjainten kokoaminen, kuten käy ilmi, eroaa vähän ohjelmien kääntämisestä:

make
sudo make install

mutta ydinmoduulien kääntämiseen tarvitsemme ytimen otsikkotiedostot tietylle versiollemme.

Varastossa on paketti raspberrypi-kernel-headers, mutta se sisältää tiedostojen ydinversion 4.19.66-v7l+, ja se ei sovi meille. Mutta vaaditun version otsikoiden saamiseksi, kuten kävi ilmi, on kätevä työkalu rpi-lähde (linkki lopussa Githubissa), jonka avulla voit ladata tarvittavat otsikot. Kloonamme arkiston, teemme skriptistä suoritettavan ja suoritamme sen. Ensimmäinen käynnistys epäonnistuu virheellä - apuohjelmaa ei ole bc. Onneksi se on arkistossa ja asennamme sen.

sudo apt-get install bc

Tämän jälkeen uudelleenkäynnistys ja otsikoiden lataaminen (ja sitten jonkin asettaminen, en nyt muista) kestää jonkin aikaa ja voit istua tuolillasi, Windows on parantunut kaikissa ilmenemismuodoissaan.

Kun kaikki otsikot on ladattu, tarkista, että hakemisto tulee näkyviin /lib/modules/4.19.73-v7+ ja siinä symbolilinkki osoittaa paikkaan, jossa ladatut tiedostot sijaitsevat (minulle se 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

Valmisteluvaihe on suoritettu, voit aloittaa kokoonpanon. Moduulien kokoaminen taas kestää jonkin aikaa, Raspberry ei ole nopea peto (sillä on 32-bittinen 900Mhz Cortex ARM v7).
Joten kaikki koottu. Asennamme ohjaimen toisessa vaiheessa (make install) ja kopioimme samalla lisää laiteohjelmistotiedostoja, joita tarvitaan ohjaimen toimintaan:

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. Bournen uhkavaatimus

Kytken pillin porttiin ja... mitään ei tapahdu. Oliko kaikki turhaa?

Alan tutkia projektin sisällä olevia tiedostoja ja yhdestä niistä löydän ongelman: ajuri määrittää täydellisen luettelon VID/PID-tunnisteista, joita se voi palvella. Ja jotta laitteemme toimisi tämän ohjaimen kanssa, lisäsin vain tunnukseni tiedostoon 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 */
};

Käänsin ohjaimen uudelleen ja asensin sen uudelleen järjestelmään.

Ja tällä kertaa kaikki alkoi. Sovittimen valo syttyi ja verkkoliitäntöjen luetteloon ilmestyi uusi laite.

Langattomien liitäntöjen tarkastelu näyttää seuraavaa:

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 niille, jotka lukevat loppuun

Muistatko kuinka sanoin, että sillä ei ole väliä, millä maksiminopeudella sovittimesi on ilmoitettu?
Joten Malinkassa (ennen mallin 4 julkaisua) kaikki laitteet (mukaan lukien ethernet-sovitin) ovat samassa usb-väylässä. Hienoa, eikö? Ja siksi usb-väylän kaistanleveys on jaettu kaikkien siinä olevien laitteiden kesken. Nopeutta mitattuna sekä ethernetin että usb wi-fin kautta (yhteen reitittimeen kytkettynä) sekä ilmalla että langalla, se oli noin 1Mbit/s.

PS Yleensä tämä opas ohjaimen kääntämisestä tälle sovittimelle ei päde vain RPI:lle. Toistin sen sitten työpöydälläni Linux Mintin kanssa - kaikki toimi sielläkin. Sinun tarvitsee vain ladata tarvittavat otsikkotiedostot ytimen versiota varten samalla tavalla.

UPD. Asiantuntevat ihmiset ehdottivat: jotta et olisi riippuvainen ytimen versiosta, sinun on kerättävä ja asennettava ajurit dkms:n avulla. Ajurin readme sisältää myös tämän vaihtoehdon.

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. Ehdotettu läikkä laitetunnus hyväksyttiin lwfinger/rtl8188eu-tietovaraston valtavirran haaraan.

viittaukset
- RPi USB Wi-Fi -sovittimet
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-lähde

Lähde: will.com