Vi kopplar RaspberryPi till TP-Link TL-WN727N

Hej, Habr!

En gÄng tÀnkte jag att jag skulle ansluta min Raspberry Pi till internet trÄdlöst.

SÄ sagt, sÄ gjort, jag köpte en usb wi-fi dongel av det vÀlkÀnda företaget TP-Link i nÀrmaste butik. LÄt mig sÀga att det inte Àr nÄgon liten nano usb-modul, utan en ganska stor enhet, ungefÀr stor som ett vanligt usb-minne (eller om det passar er bÀttre, med storleken av ett pekfinger pÄ en vuxen man). Innan köpet studerade jag lite listan över stödda donglar för RPI, och TP-Link fanns med pÄ listan (Àven om det senare visade sig att jag inte hade beaktat detaljerna, för som man vet ligger djÀvulen i dem). SÄ, min svala saga om mina prövningar börjar, hÀr presenteras en Detektivhistoria i 3 delar. Jag ber intresserade att lÀsa vidare.

Artikel Anslut WiFi-adaptern WN727N till Ubuntu/Mint Det hjÀlpte mig delvis, men lÄt oss ta allt i ordning.

Uppgifternas villkor

Givet:

  1. Enkorts dator Raspberry Pi 2 B v1.1 - 1 styck
  2. USB wi-fi dongel WN727N - 1 styck
  3. En uppsÀttning relativt rÀttriga hÀnder - 2 stycken
  4. Installerad OS Àr den senaste Raspbian (baserad pÄ Debian 10 Buster)
  5. KĂ€rna version 4.19.73-v7+

Att göra: ansluta till internet (WiFi delas frÄn hemroutern)

Efter att ha packat upp adaptern lÀser jag instruktionen inuti:

Systemkompatibilitet: Windows 10/8/7/XP (till och med XP) och MacOS 10.9-10.13

Nja, inget om Linux som vanligt. Året var 2019, och drivrutinerna mĂ„ste fortfarande byggas för hand...

Vi hade med oss 2 kompilatorer, 75 tusen bibliotek, fem binÀra blobbar, en och en halv samling med logotyp och ett hav av header-filer av alla sprÄk och format. Det var inte nödvÀndigtvis det som krÀvdes för arbetet. Men nÀr jag började bygga systemet för mig sjÀlv, blev det svÄrt att stanna. Det enda som vÀckte min oro var drivrutinerna för wi-fi. Det finns inget mer hjÀlplöst, oansvarigt och trasigt Àn att bygga drivrutiner frÄn kÀllkod. Men jag visste att förr eller senare skulle vi ta itu med det.

Som bekant Àr det krÄngligt med usb wi-fi pÄ Linux smÀrtsamt och lite olustigt (som ryska sushi).

I lÄdan ligger det Àven en CD-skiva med drivrutiner. Utan stora förhoppningar kollar jag efter vad som finns pÄ den - precis, de hade inte tagit hand om det. En sökning pÄ internet ledde mig till tillverkarens webbplats, men dÀr finns det bara Linux-drivrutiner för en annan revision av enheten v4, men jag hade v5.21. Dessutom fungerar den med mycket gamla kÀrnversioner 2.6-3.16. Förkrossad av misslyckandet redan i början, övervÀgde jag att istÀllet ta TL-WN727N (den Àr nÄgot dyrare och kan hantera 300Mbps jÀmfört med 150 för min, men som det visade sig spelar det ingen roll för Raspberry Pi, vilket kommer att förklaras senare). Men det viktigaste Àr att det redan finns drivrutiner för den, och de installeras enkelt med ett paket. firmware-ralink. Du kan vanligtvis se enhetsrevisionen pÄ enhetens hölje, pÄ klistermÀrket nÀra serienumret.

Ytterligare googling och besök pÄ olika forum gav inte mycket av vÀrde. Verkar som om ingen innan mig har provat att koppla just denna adapter till Linux. Ja, jag har verkligen otur.

Fast nej, jag ljuger, besök pĂ„ forum (frĂ€mst engelsksprĂ„kiga) gav ocksĂ„ sina resultat, i vissa trĂ„dar nĂ€mndes en viss herre lwfinger, som Ă€r kĂ€nd för att ha skrivit ett antal drivrutiner för wifi-adaptrar. Hans Git-repo finns i slutet av artikeln i lĂ€nkarna. Och den andra lĂ€rdomen jag fick — man mĂ„ste identifiera sin enhet för att förstĂ„ vilken drivrutin som passar.

Del 1. Identifiering av hÄrdvara

NÀr jag ansluter enheten till porten, lyser ingen lysdiod givetvis. Och det Àr överhuvudtaget oklart om nÄgot fungerar eller inte.

Först och frÀmst, för att ta reda pÄ om kÀrnan ser vÄr enhet, kollar jag dmesg:

[  965.606998] usb 1-1.3: ny hög hastighet USB-enhet nummer 9 anvÀnder dwc_otg
[  965.738195] usb 1-1.3: Ny USB-enhet hittad, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[  965.738219] usb 1-1.3: Nya USB-enhetsstrÀngar: Mfr=1, Produkt=2, Serienummer=3
[  965.738231] usb 1-1.3: Produkt: 802.11n NIC
[  965.738243] usb 1-1.3: Tillverkare: Realtek
[  965.738255] usb 1-1.3: Serienummer: 00E04C0001

Det visade sig att den ses, och det mÀrks ocksÄ att det Àr en Realtek-chip och att enhetens VID/PID pÄ usb-bussen.

Vi gÄr vidare, ser pÄ lsusb, och hÀr stÄr vi inför ytterligare ett misslyckande

Bus 001 Device 008: ID 2357:0111 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Snabb 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

Systemet vet inte vad detta Àr för enhet och visar blygsamt ett tomt utrymme istÀllet för ett namn (Àven om vendor=2357 sÀkert Àr TP-Link).

Vid det hÀr laget har den nyfikna lÀsaren kanske redan lagt mÀrke till nÄgot intressant, men vi skjuter upp det till senare.

Undersökningen av problemet med tomma namn ledde mig till en webbplats med identifierare, dÀr information om kÀnda VID/PID registreras. VÄr 2357:0111 fanns inte dÀr. Som det senare visade sig, Àr verktyget lsusb anvÀnder fil /usr/share/misc/usb.ids, som Àr samma lista med identifikatorer frÄn denna hemsida. För att fÄ det att se bra ut har jag helt enkelt lagt till rader för TP-Link-leverantören i mitt system.

2357  TP-Link
        0111  TL-WN727N v5.21

Vi har fixat visningen i enhetslistan, men det har inte kommit oss nĂ€rmare valet av drivrutin. För att vĂ€lja drivrutinen mĂ„ste man veta vilken chipp som din adapter anvĂ€nder. Ännu en misslyckad försök att ta reda pĂ„ detta pĂ„ internet ledde inte till nĂ„got bra. Med en fin skruvmejsel lyfter jag försiktigt pĂ„ adapterns lock och fĂ„r se det fördömda barnet av farbror Liao i all sin ursprungliga nakenhet. Under förstoringsglaset kan jag se namnet pĂ„ chippet — RTL8188EUS. Det Ă€r redan bra. PĂ„ vissa forum har jag sett inlĂ€gg som sĂ€ger att drivrutinen av den gode herren lwfinger passar bra till detta chipp (Ă€ven om han bara skriver om RTL8188EU).

Del 2. Borns överlÀgsenhet

Jag laddar ner drivrutinens kÀllkod frÄn git.

Det Ă€r dags att ominstallera Windows och syssla med det som vanligtvis Ă€r förbundet med LinuxanvĂ€ndare — att kompilera nĂ„got frĂ„n kĂ€llkod. Att kompilera drivrutiner visar sig inte skilja sig mycket frĂ„n att kompilera program:

make
sudo make install

men för att kompilera kÀrnmoduler behöver vi kÀllkodshuvuden för vÄr specifika version.

I standardförvaret finns ett paket raspberrypi-kernel-headers, men det innehĂ„ller versioner av filerna för kĂ€rnan 4.19.66-v7l+, och det passar oss inte. Men för att fĂ„ mĂ„lvĂ€rdenas huvuden, som det visar sig, finns det ett praktiskt verktyg rpi-source (lĂ€nk i slutet pĂ„ GitHub), med hjĂ€lp av vilken man kan ladda ner nödvĂ€ndiga huvuden. Vi klonar förvaret, gör skriptet körbart och startar det. Första körningen kraschar med ett fel — det finns ingen verktyg. bcLyckligtvis finns den i förvaret och vi installerar den bara.

sudo apt-get install bc

Efter detta upprepade start och nedladdning av huvuden (och sedan för att konfigurera nÄgot, jag minns inte lÀngre) tar en stund och man kan luta sig tillbaka i stolen, Windows har blivit bÀttre i alla dess aspekter.

NÀr alla huvuden har laddats ner kontrollerar vi att katalogen har skapats /lib/modules/4.19.73-v7+ och dÀr finns en symlink som pekar pÄ platsen dÀr de nedladdade filerna ligger (i mitt fall /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

Förberedelsefasen Àr slutförd, vi kan börja montera. Montage av moduler tar sin tid, Raspberry Pi Àr inte snabb (den har en 32-bitars 900MHz Cortex ARM v7-processor).
SÄ, allt har kompilerats. Vi installerar drivrutinen med steg 2 (make install), och samtidigt kopieras fler firmwarefiler som behövs för att drivrutinen ska fungera:

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

Del 3. Ultimatum för Bourne

Jag sĂ€tter in USB-stickan i porten och
 ingenting hĂ€nder. Var det verkligen allt förgĂ€ves?

Jag börjar undersöka filerna i projektet och hittar i en av dem vad problemet var: drivrutinen har en fullstÀndig lista över VID/PID-id:n som den kan hantera. För att vÄr enhet ska fungera med denna drivrutin lade jag bara till mitt id i filen rtl8188eu/os_dep/usb_intf.c

static struct usb_device_id rtw_usb_id_tbl[] = {
        /*=== Realtek demobord ===*/
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
        /*=== Kund-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 */
        {}      /* Avslutande post */
};

Jag har omkompilerat drivrutinen och installerat den igen i systemet.

Och den hÀr gÄngen fungerade allt. Lampan pÄ adaptern tÀndes och en ny enhet dök upp i listan över nÀtverksgrÀnssnitt.

Att se över de trÄdlösa grÀnssnitten ger följande resultat:

pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0      inga trÄdlösa funktioner.

lo        inga trÄdlösa funktioner.

wlan0     oassocierad  ESSID:""  Smeknamn:""
          LĂ€ge:Auto  Frekvens=2.412 GHz  Åtkomstpunkt: Inte associerad   
          KĂ€nslighet:0/0  
          Återförsök:av   RTS thr:av   Fragment thr:av
          Krypteringsnyckel:av
          Energiförvaltning:av
          LÀnkens kvalitet=0/100  Signalkvalitet=0 dBm  BrusnivÄ=0 dBm
          Tx ogiltiga försök:0  Ogiltiga övriga:0   Missade beacon:0

Bonus för den som lÀste hela vÀgen hit

Kommer ni ihÄg att jag sa att det inte spelar nÄgon roll vilken maximal hastighet som anges pÄ er adapter?
SÄ, pÄ Raspberry Pi (före lanseringen av modell 4) sitter alla enheter (inklusive ethernet-adaptern) pÄ samma USB-buss. Coolt, eller hur? DÀrför delas bandbredden pÄ USB-bussen mellan alla enheter som Àr anslutna till den. Vid mÀtning av hastigheten bÄde via ethernet och USB Wi-Fi (anslutna till samma router) samt trÄdlöst och med kabel, uppnÄddes omkring 20 Mbit/s.

P.S. Den hĂ€r guiden för att kompilera drivrutinen för just denna adapter gĂ€ller inte bara för RPI. Jag upprepade den Ă€ven pĂ„ min stationĂ€ra dator med Linux Mint — dĂ€r fungerade det ocksĂ„. Du behöver bara ladda ner de nödvĂ€ndiga headerfilerna för den kĂ€rnversion du anvĂ€nder.

UPD. Insiktsfulla personer har föreslagit: för att inte vara beroende av kÀrnversionen bör du bygga och installera drivrutiner med hjÀlp av dkms. Denna möjlighet nÀmns ocksÄ i readme-filen för drivrutinen.

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. Föreslagen patch för enhets-ID har accepterats i huvudgrenen av lwfinger/rtl8188eu-repositoriet.

LĂ€nkar
— RPi USB Wi-Fi-adaptrar
— GitHub lwfinger/rtl8188eu
— usb.ids
— rpi-source

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster