Ons is vriende van RaspberryPi met TP-Link TL-WN727N

Haai Habr!

Ek het daaraan gedink om my framboos per lug aan die internet te koppel.

Nie gou gesê as gedaan nie, hiervoor is 'n fluitjie van die berugte TP-Link maatskappy by die naaste usb wi-fi winkel gekoop. Ek moet dadelik sê dit is nie 'n soort nano-usb-module nie, maar nogal 'n algehele toestel omtrent die grootte van 'n gewone USB-flitsskyf (wel, of as jy wil, met die wysvinger van 'n volwasse man). Voordat ek gekoop het, het ek die lys van ondersteunde fluitvervaardigers vir RPI en TP-Link 'n bietjie bestudeer (soos dit egter later geblyk het, het ek nie die subtiliteite in ag geneem nie, want die duiwel, soos u weet, lê in die besonderhede) . So, 'n koue verhaal oor my rampe begin, 'n speurverhaal in 3 dele word onder jou aandag gebied. Stel belang asb onder kat.

artikel Koppel WiFi-adapter WN727N aan Ubuntu/Mint Ek het gedeeltelik gehelp, maar eerste dinge eerste.

Toestande van die probleem

Gegee:

  1. enkelbord rekenaar Raspberry Pi 2 B v1.1 - 1 stuk
  2. usb wi-fi fluit WN727N — 1 stuk
  3. 'n paar nie heeltemal krom hande nie - 2 stukke
  4. nuutste Raspbian geïnstalleer as OS (gebaseer op debian 10 Buster)
  5. kern weergawe 4.19.73-v7+

Soek: koppel aan die internet (Wi-Fi word vanaf die tuisroeteerder versprei)

Nadat ek die adapter uitgepak het, lees ek die instruksies binne:

Stelselversoenbaarheid: Windows 10/8/7/XP (selfs lug, selfs XP) en MacOS 10.9-10.13

Hmm, oor Linux, soos gewoonlik, nie 'n woord nie. Dit was 2k19, en die drywers moes nog met die hand saamgestel word ...

Ons het 2 samestellers by ons gehad, 75 duisend biblioteke, vyf binêre knoppies, 'n halwe reeks naakte vroue met 'n logo en 'n hele see van opskrifte van alle tale en opmaak. Nie dat dit 'n noodsaaklike stel vir die werk was nie. Maar sodra jy begin om die stelsel vir jouself saam te stel, word dit moeilik om te stop. Die enigste ding wat my bekommerd gemaak het, was die drywers vir wi-fi. Daar is niks meer hulpeloos, onverantwoordelik en korrup as om bestuurders van bron af te bou nie. Maar ek het geweet dat ons vroeër of later na hierdie gemors sou oorskakel.

Oor die algemeen, soos u weet, is die ophef met usb wi-fi op Linux pynlik en ietwat ongemaklik (soos Russiese soesji).

Daar is ook 'n bestuurder-CD in die boks. Sonder veel hoop kyk ek na wat daarop is - hulle het seker nie daarvoor gesorg nie. 'n Internetsoektog het my na die vervaardiger se webwerf gebring, maar daar is 'n Linux-drywer net vir toestelhersiening v4en ek het in my arms gehad v5.21. En buitendien, onder baie ou weergawes van die kern 2.6-3.16. Ontmoedig deur die mislukking reeds aan die begin, het ek al gedink dat ek die TL-WN727N moes geneem het (dit is 'n bietjie duurder en kan 300 Mbps teenoor 150 vir myne doen, maar soos dit geblyk het, maak dit nie saak vir die framboos glad nie, dit sal later geskryf word). Maar die belangrikste ding is dat daar reeds drywers daarvoor is en dit is eenvoudig as 'n pakket geïnstalleer firmware-ralink. U kan gewoonlik die hersiening van die toestel op die toestelkas sien op 'n plakker langs die reeksnommer.

Verdere google en besoeke aan verskillende forums het nie veel goed gebring nie. Blykbaar het niemand voor my so 'n adapter aan Linux probeer koppel nie. Hmm, ek is gelukkig as 'n verdrinkte man.

Alhoewel nee, ek lieg, die besoek van forums (meestal Engelssprekend) het ook vrugte afgewerp, was daar in sommige onderwerpe melding van 'n sekere meneer lwfinger, wat bekend is vir die skryf van 'n aantal drywers vir Wi-Fi-adapters. Sy git-bewaarplek is aan die einde van die artikel in die skakels. En die tweede les wat ek geleer het, is dat jy jou toestel moet identifiseer om te verstaan ​​watter bestuurder dit kan pas.

Deel 1. Bourne Identifikasie

Wanneer die toestel by die poort ingeprop is, brand geen LED natuurlik nie. En oor die algemeen is dit op geen manier duidelik of iets werk of nie.

Eerstens, om uit te vind of die kern ons toestel sien, kyk ek in 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

Dit het geblyk dat hy sien, en dit is selfs duidelik dat daar 'n Realtek-skyfie en die VID / PID van die toestel self op die usb-bus is.

Kom ons gaan aan, kom ons kyk lsusb, en hier wag ons vir nog 'n mislukking

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

Die stelsel weet nie watter soort toestel dit is nie, en wys skaam 'n leë spasie in plaas van 'n naam (hoewel verkoper=2357 beslis TP-Link is).

Op hierdie stadium het die nuuskierige leser seker al iets interessants opgemerk, maar ons sal dit tot ons tyd uitstel.

Navorsing oor die probleem van leë name het my gelei na 'n webwerf met identifiseerders, waar inligting oor bekende VID / PID ingevoer word. Ons 2357:0111 was nie daar nie. Soos dit later geblyk het, het die nut lsusb gebruik lêer /usr/share/misc/usb.ids, wat dieselfde lys ID's van daardie webwerf is. Vir die skoonheid van die vertoning het ek eenvoudig lyne vir die TP-Link-verskaffer daarby in my stelsel bygevoeg.

2357  TP-Link
        0111  TL-WN727N v5.21

Wel, ons het die vertoning in die lys toestelle reggestel, maar dit het ons nie 'n stap nader gebring aan die keuse van 'n bestuurder nie. Om 'n bestuurder te kies, moet jy weet op watter skyfie jou fluitjie gemaak is. Die volgende onsuksesvolle pogings om uit te vind op die internet het niks goeds gelei nie. Gewapen met 'n dun gleufskroewedraaier, pluk ek versigtig die deksel van die adapter af en my blik verskyn in al sy oernaaktheid, die bose breinkind van oom Liao. Onder 'n vergrootglas kan jy die naam van die skyfie sien - RTL8188EUS. Dit is reeds goed. Op sommige forums het ek plasings gesien dat net die bestuurder van dieselfde meneer lwfinger goed geskik is vir hierdie skyfie (al sê hy net oor RTL8188EU).

Deel 2. The Bourne Supremacy

Ek laai die bronkode van die bestuurder van die git af.

Dit is tyd om die vensters weer te installeer om te doen waarmee Linuxoids gewoonlik geassosieer word - om iets van soorte saam te stel. Soos dit geblyk het, verskil die samestelling van drywers min van die samestelling van programme:

make
sudo make install

maar om kernmodules saam te stel, benodig ons die kernkoplêers vir ons spesifieke weergawe.

Daar is 'n pakket in die voorraadbewaarplek raspberrypi-pit-opskrifte, maar dit bevat die kernweergawe van die lêers 4.19.66-v7l+en dit werk nie vir ons nie. Maar om die opskrifte van die gewenste weergawe te kry, soos dit geblyk het, is daar 'n gerieflike hulpmiddel rpi bron (skakel aan die einde van die github), waarmee u die verlangde opskrifte kan aflaai. Ons kloon die repository, maak die script uitvoerbaar, voer dit uit. Die eerste bekendstelling misluk met 'n fout - daar is geen nut nie bc. Gelukkig is dit in die bewaarplek en ons installeer dit net.

sudo apt-get install bc

Daarna neem die herbegin en aflaai van koptekste (en dan iets opstel, ek onthou nie nou nie) en jy kan terugleun in jou stoel Windows het beter geword in al sy manifestasies.

Nadat al die opskrifte afgelaai is, kyk ons ​​of die gids verskyn het /lib/modules/4.19.73-v7+ en daarin wys die simlink na die plek waar die afgelaaide lêers geleë is (ek het dit /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

Die voorbereidingsfase is voltooi, u kan begin monteer. Die samestelling van modules neem weer 'n sekere tyd, die framboos is nie 'n vinnige dier nie (dit het 'n 32bit 900Mhz Cortex ARM v7 klip).
So alles saamgestel. Ons installeer die bestuurder in die 2de stap (maak installeer), terwyl ons meer firmwarelêers kopieer wat nodig is vir die bestuurder om te werk:

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

Deel 3. Die Bourne Ultimatum

Ek steek 'n fluitjie in die hawe en ... niks gebeur nie. Was dit alles verniet?

Ek begin om die lêers binne die projek te bestudeer en in een van hulle vind ek wat die probleem was: die bestuurder het 'n volledige lys van VID / PID identifiseerders wat dit kan bedien. En sodat ons toestel met hierdie bestuurder kan werk, het ek net my ID by die lêer gevoeg 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 */
};

Het die drywer hersaamgestel en dit weer in die stelsel geïnstalleer.

En hierdie keer het alles uitgewerk. Die lig op die adapter brand en 'n nuwe toestel verskyn in die lys netwerkkoppelvlakke.

Die kyk van draadlose koppelvlakke gee die volgende:

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 vir diegene wat tot die einde toe lees

Onthou jy hoe ek gesê het dit maak nie saak watter maksimum spoed op jou adapter verklaar word nie?
Dus, op die framboos (voor die vrystelling van model 4), sit alle toestelle (insluitend die Ethernet-adapter) op dieselfde usb-bus. Dit is wonderlik, reg? En so word die bandwydte van die usb-bus tussen alle toestelle daarop gedeel. By die meting van die spoed beide via Ethernet en via usb wi-fi (gekoppel aan 1 router), beide oor die lug en oor die draad, het dit ongeveer 20 Mbps afgegee.

NS Oor die algemeen is hierdie gids vir die samestelling van 'n drywer vir hierdie spesifieke adapter nie net geldig vir RPI nie. Ek het dit toe op my lessenaar herhaal met Linux Mint – alles het ook daar gewerk. Jy hoef net die nodige koplêers vir jou kernweergawe op dieselfde manier af te laai.

UPD. Kundige mense het voorgestel: om nie van die kernweergawe afhanklik te wees nie, moet jy drywers bou en installeer met behulp van dkms. Die readme vir die bestuurder het ook hierdie opsie.

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. Voorgestelde kol vir toestel-ID is aanvaar in die hoofstroomtak van die lwfinger/rtl8188eu-bewaarplek.

verwysings
- RPi USB WiFi-adapters
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi bron

Bron: will.com