Susidraugaukime su RaspberryPi su TP-Link TL-WN727N

Sveiki, Habr!

Kartą nusprendžiau savo avietę prijungti prie interneto per eterį.

Neabejoju, kad šiam tikslui artimiausioje parduotuvėje įsigijau gerai žinomos kompanijos TP-Link usb wi-fi švilpuką. Iš karto pasakysiu, kad tai ne koks nano usb modulis, o gana didelis įrenginys, maždaug įprasto "flash drive" dydžio (arba, jei norite, suaugusio vyro rodomojo piršto dydžio). Prieš pirkdamas šiek tiek patyrinėjau palaikomų švilpukų gamintojų sąrašą RPI ir TP-Link buvo sąraše (tačiau, kaip vėliau paaiškėjo, į subtilybes neatsižvelgiau, nes velnias, kaip žinome , yra detalėse). Taigi, prasideda šalta pasaka apie mano nesėkmes, jūsų dėmesiui pristatome 3 dalių detektyvą. Tiems, kurie domisi, skaitykite kat.

Straipsnis WN727N WiFi adapterio prijungimas prie Ubuntu/Mint Tai man iš dalies padėjo, bet pirmiausia.

Problemos sąlygos

Dano:

  1. vienkartinis kompiuteris Raspberry Pi 2 B v1.1 – 1 vnt
  2. usb wi-fi švilpukas WN727N - 1 vnt
  3. pora ne visai kreivų rankų - 2 vnt
  4. Naujausia Raspbian įdiegta kaip OS (pagrįsta Debian 10 Buster)
  5. branduolio versija 4.19.73-v7+

Rasti: prisijungti prie interneto („Wi-Fi“ platinamas iš jūsų namų maršrutizatoriaus)

Išpakavęs adapterį perskaičiau instrukcijas viduje:

Sistemos suderinamumas: Windows 10/8/7/XP (net dangus, net XP) ir MacOS 10.9-10.13

Hmm, kaip įprasta, apie Linux nė žodžio. Buvo 2k19, o tvarkykles dar reikėjo surinkti rankiniu būdu...

Su mumis turėjome 2 kompiliatorius, 75 tūkstančius bibliotekų, penkias dvejetaines blobas, pusę nuogų moterų su logotipu ir visą jūrą antraštių visomis kalbomis ir žymėjimais. Ne todėl, kad tai yra būtinas rinkinys darbui. Tačiau pradėjus rinkti sistemą sau, sustoti tampa sunku. Vienintelis dalykas, kuris man sukėlė nerimą, buvo „Wi-Fi“ tvarkyklės. Nėra nieko bejėgiškesnio, neatsakingesnio ir korumpuoto kaip tvarkyklių kūrimas iš šaltinio. Bet žinojau, kad anksčiau ar vėliau pereisime prie šių šiukšlių.

Apskritai, kaip žinote, „Linux“ sistemoje „usb wi-fi“ yra skausmingas ir šiek tiek neskanus (kaip rusiški sušiai).

Dėžutėje taip pat yra kompaktinis diskas su tvarkyklėmis. Be didelių vilčių žiūriu, kas jame parašyta – jie tikrai tuo nepasirūpino. Interneto paieška atvedė mane į gamintojo svetainę, tačiau ten yra Linux tvarkyklė, skirta tik įrenginio peržiūrai v4, o mano rankose buvo v5.21. Ir be to, labai senoms branduolio versijoms 2.6-3.16. Jau pačioje pradžioje atkalbinėtas dėl gedimo, jau galvojau, kad reikėjo pasiimti TL-WN727N (jis šiek tiek brangesnis ir gali atlaikyti 300Mbps, palyginti su 150 pas mane, bet kaip paaiškėjo, tai visai nesvarbu apie avietes, apie tai bus parašyta vėliau). Tačiau svarbiausia, kad jo tvarkyklės jau egzistuoja ir yra tiesiog įdiegtos kaip paketas firmware-ralink. Įrenginio versiją paprastai galite peržiūrėti ant įrenginio korpuso ant lipduko šalia serijos numerio.

Tolesnis googlinimas ir lankymasis įvairiuose forumuose daug gero neatnešė. Matyt, niekas iki manęs nebandė tokio adapterio prijungti prie Linux. Hmm, man pasisekė kaip nuskendusiam žmogui.

Nors, ne, meluoju, lankymasis forumuose (dažniausiai anglų kalba) irgi davė vaisių, kai kuriose temose buvo paminėtas kažkoks ponas lwfinger, garsėjantis rašantis daugybę tvarkyklių Wi-Fi adapteriams. . Jo git saugykla yra straipsnio pabaigoje nuorodose. Antra pamoka, kurią išmokau, yra ta, kad turite identifikuoti savo įrenginį, kad suprastumėte, kuri tvarkyklė jam gali būti tinkama.

1 dalis: Borno tapatybė

Kai įrenginys buvo prijungtas prie prievado, žinoma, joks šviesos diodas neužsidega. Ir apskritai niekaip neaišku, ar kažkas veikia, ar ne.

Visų pirma, norėdamas sužinoti, ar branduolys mato mūsų įrenginį, žiūriu į 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

Paaiškėjo, kad mato, o net aišku, kad usb magistrale yra Realtek lustas ir paties įrenginio VID/PID.

Eikime toliau ir pažiūrėkime lsusb, ir čia mūsų laukia dar viena nesėkmė

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

Sistema nežino, koks tai įrenginys, ir vietoje pavadinimo įžūliai rodo tuščią vietą (nors pardavėjas=2357 tikrai yra TP-Link).

Šiame etape smalsus skaitytojas tikriausiai jau pastebėjo ką nors įdomaus, bet paliksime tai savo laikui.

Tyrinėdamas tuščių pavadinimų problemą, atvedė mane į svetainę su identifikatoriais, kur įvedama informacija apie žinomą VID/PID. Mūsų 2357:0111 ten nebuvo. Kaip vėliau paaiškėjo, naudingumas lsusb naudoja failą /usr/share/misc/usb.ids, kuris yra tas pats šios svetainės ID sąrašas. Dėl ekrano grožio savo sistemoje tiesiog pridėjau eilutes, skirtas pardavėjo TP-Link.

2357  TP-Link
        0111  TL-WN727N v5.21

Na, pataisėme ekraną įrenginių sąraše, bet tai nepriartino nė žingsnio prie vairuotojo pasirinkimo. Norėdami pasirinkti vairuotoją, turite žinoti, ant kurio lusto yra pagamintas jūsų švilpukas. Kiti nesėkmingi bandymai tai išsiaiškinti internete nieko gero neprivedė. Apsiginklavęs plonu atsuktuvu su plyšiu, atsargiai nuplėšiu adapterio dangtelį ir dėdės Liao užburtas smegenys pasirodo visu savo nesugadintu nuogumu. Po padidinamuoju stiklu matote lusto pavadinimą - RTL8188EUS. Tai jau gerai. Kai kuriuose forumuose mačiau įrašus, kad to paties džentelmeno lwfinger vairuotojas puikiai tinka šiam lustui (nors jis rašo tik apie RTL8188EU).

2 dalis: Bourne viršenybė

Atsisiunčiau tvarkyklių šaltinius iš Git.

Atėjo laikas iš naujo įdiegti „Windows“ ir daryti tai, su kuo dažniausiai siejami „Linux“ vartotojai – surinkti ką nors iš tam tikrų rūšių. Tvarkyklių surinkimas, kaip paaiškėja, mažai skiriasi nuo programų kompiliavimo:

make
sudo make install

tačiau norint kompiliuoti branduolio modulius, mums reikia konkrečios versijos branduolio antraštės failų.

Atsargų saugykloje yra paketas raspberrypi-kernel-headers, tačiau jame yra failų branduolio versija 4.19.66-v7l+, ir tai mums netinka. Tačiau norint gauti reikiamos versijos antraštes, kaip paaiškėjo, yra patogus įrankis rpi šaltinis (nuoroda pabaigoje Github), su kuria galite atsisiųsti reikiamas antraštes. Klonuojame saugyklą, padarome scenarijų vykdomąjį ir paleidžiame. Pirmasis paleidimas nepavyksta dėl klaidos - nėra naudingumo bc. Laimei, jis yra saugykloje ir mes jį tiesiog įdiegiame.

sudo apt-get install bc

Po to paleidimas iš naujo ir antraštių atsisiuntimas (o tada kažko nustatymas, dabar nepamenu) užtrunka šiek tiek laiko ir galite sėdėti kėdėje, „Windows“ tapo geresnė visomis savo apraiškomis.

Atsisiuntę visas antraštes patikrinkite, ar rodomas katalogas /lib/modules/4.19.73-v7+ ir jame simbolinė nuoroda nurodo vietą, kur yra atsisiųsti failai (man tai /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

Parengiamasis etapas baigtas, galite pradėti surinkimą. Modulių surinkimas vėl užtrunka, Raspberry nėra greitas žvėris (turi 32 bitų 900Mhz Cortex ARM v7).
Taigi viskas sukompiliuota. Mes įdiegiame tvarkyklę 2-uoju žingsniu (padaryti diegimą), taip pat nukopijuojame daugiau programinės įrangos failų, reikalingų tvarkyklei veikti:

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 dalis. Borno ultimatumas

Įjungiu švilpuką į prievadą ir... nieko nevyksta. Ar viskas buvo veltui?

Pradedu tyrinėti projekto viduje esančius failus ir viename iš jų randu, kokia buvo problema: tvarkyklė nurodo visą VID/PID identifikatorių sąrašą, kurį gali aptarnauti. Ir kad mūsų įrenginys veiktų su šia tvarkykle, aš tiesiog pridėjau savo ID prie failo 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 */
};

Perkompiliavau tvarkyklę ir iš naujo įdiegiau sistemoje.

Ir šį kartą viskas prasidėjo. Adapterio lemputė užsidegė ir tinklo sąsajų sąraše pasirodė naujas įrenginys.

Belaidžių sąsajų peržiūra rodoma:

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

Premija tiems, kurie perskaitė iki galo

Prisiminkite, kaip sakiau, kad nesvarbu, koks didžiausias greitis nurodytas jūsų adapteryje?
Taigi „Malinka“ (prieš 4 modelio išleidimą) visi įrenginiai (įskaitant eterneto adapterį) yra toje pačioje USB magistralėje. Puiku, tiesa? Todėl USB magistralės pralaidumas yra padalintas tarp visų joje esančių įrenginių. Matuojant greitį tiek per eternetą, tiek per usb wi-fi (prijungtas prie 1 maršrutizatoriaus) tiek oru, tiek laidu buvo apie 20Mbit/s.

PS Apskritai šis šio konkretaus adapterio tvarkyklės sudarymo vadovas galioja ne tik RPI. Tada pakartojau tai savo darbalaukyje su Linux Mint – ten taip pat viskas veikė. Jums tereikia tokiu pačiu būdu atsisiųsti reikiamus branduolio versijos antraštės failus.

UPD. Išmanantys žmonės pasiūlė: kad nepriklausytumėte nuo branduolio versijos, turite surinkti ir įdiegti tvarkykles naudodami dkms. Tvarkyklės readme taip pat yra ši parinktis.

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. Siūloma pleistras įrenginio ID buvo priimtas į pagrindinę lwfinger/rtl8188eu saugyklos šaką.

Nuorodos
- RPi USB Wi-Fi adapteriai
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi šaltinis

Šaltinis: www.habr.com