Mi smo prijatelji RaspberryPi sa TP-Linkom TL-WN727N

Hej Habr!

Mislio sam nekako zračnim putem spojiti svoju malinu na internet.

Odmah rečeno nego učinjeno, za ovo je zviždaljka ozloglašene tvrtke TP-Link kupljena u najbližoj USB Wi-Fi trgovini. Moram odmah reći da ovo nije neka vrsta nano usb modula, već prilično sveukupni uređaj veličine običnog USB flash pogona (dobro, ili ako želite, s kažiprstom odraslog čovjeka). Prije kupnje malo sam proučio popis podržanih proizvođača zviždaljki za RPI i TP-Link (međutim, kako se kasnije pokazalo, nisam uzeo u obzir suptilnosti, jer vrag, kao što znate, leži u detaljima) . Dakle, počinje hladna priča o mojim nesrećama, vašoj pozornosti nudi se detektivska priča u 3 dijela. Zainteresirane molim pod kat.

članak Spojite WiFi adapter WN727N na Ubuntu/Mint Djelomično sam pomogao, ali po redu.

Uvjeti problema

dati:

  1. jednopločno računalo Raspberry Pi 2 B v1.1 - 1 kom
  2. usb wi-fi zviždaljka WN727N — 1 kom
  3. par ne sasvim krivih ruku - 2 komada
  4. najnoviji Raspbian instaliran kao OS (temeljen na debian 10 Buster)
  5. verzija kernela 4.19.73-v7+

Pronađite: povežite se s internetom (Wi-Fi se distribuira s kućnog usmjerivača)

Nakon što sam raspakirao adapter, pročitao sam upute unutra:

Kompatibilnost sustava: Windows 10/8/7/XP (čak i nebo, čak i XP) i MacOS 10.9-10.13

Hmm, o Linuxu, kao i obično, ni riječi. Bio je 2k19, a upravljačke programe još je trebalo ručno sastaviti ...

Sa sobom smo imali 2 kompilatora, 75 tisuća biblioteka, pet binarnih blobova, pola niza golih žena s logom i cijelo more zaglavlja svih jezika i oznaka. Nije da je to bio neophodan set za posao. Ali kada jednom počnete sastavljati sustav za sebe, postaje teško zaustaviti se. Jedino što me zabrinulo su drajveri za wi-fi. Ne postoji ništa bespomoćnije, neodgovornije i korumpiranije od izgradnje pokretača iz izvora. Ali znao sam da ćemo prije ili kasnije prijeći na ovo smeće.

Općenito, kao što znate, frka s usb wi-fi na Linuxu je bolno i pomalo neugodno (kao ruski sushi).

U kutiji je i CD s drajverom. Bez puno nade gledam što je na njemu - sigurno se nisu pobrinuli za to. Internetska pretraga dovela me do web stranice proizvođača, ali postoji upravljački program za Linux samo za reviziju uređaja v4a imao sam u rukama v5.21. I osim toga, pod vrlo starim verzijama kernela 2.6-3.16. Obeshrabren neuspjehom već na samom početku, već sam pomislio da sam trebao uzeti TL-WN727N (malo je skuplji i može 300Mbps naspram mojih 150, ali kako se pokazalo, to nije bitno za malina uopće, ovo će biti napisano kasnije). Ali najvažnije je da već postoje upravljački programi za njega i instalirani su jednostavno kao paket firmware-ralink. Reviziju uređaja obično možete vidjeti na kućištu uređaja na naljepnici pored serijskog broja.

Daljnje googlanje i posjećivanje različitih foruma nije donijelo mnogo dobra. Očigledno nitko prije mene nije pokušao spojiti takav adapter na Linux. Hmm, imam sreće kao utopljenik.

Iako ne, lažem, posjećivanje foruma (uglavnom engleskog govornog područja) također je urodilo plodom, u nekim temama se spominjao izvjesni g. lwfinger, koji je poznat po tome što je napisao niz drajvera za Wi-Fi adaptere. Njegov git repozitorij nalazi se na kraju članka u poveznicama. A druga lekcija koju sam naučio jest da morate identificirati svoj uređaj kako biste razumjeli koji mu upravljački program odgovara.

Dio 1. Bourneova identifikacija

Kada je uređaj uključen u port, ne svijetli LED dioda, naravno. I općenito, ni na koji način nije jasno radi li nešto ili ne.

Prije svega, da saznam vidi li kernel naš uređaj, gledam u 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

Ispostavilo se da on vidi, čak je jasno da postoji Realtek čip i VID / PID samog uređaja na usb sabirnici.

Idemo dalje, da vidimo lsusb, a evo nas čeka još jedan neuspjeh

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

Sustav ne zna o kakvom se uređaju radi i sramežljivo pokazuje prazan prostor umjesto imena (iako je vendor=2357 definitivno TP-Link).

U ovoj je fazi radoznali čitatelj vjerojatno već primijetio nešto zanimljivo, no mi ćemo to odgoditi za naše vrijeme.

Istraživanje problema praznih naziva dovelo me do stranice s identifikatorima, gdje se unose informacije o poznatom VID-u/PID-u. Našeg 2357:0111 nije bilo. Kako se kasnije pokazalo, uslužni program lsusb koristi datoteku /usr/share/misc/usb.ids, što je isti popis ID-ova s ​​ove stranice. Za ljepotu prikaza, jednostavno sam mu u svom sustavu dodao retke za dobavljača TP-Linka.

2357  TP-Link
        0111  TL-WN727N v5.21

Dobro, ispravili smo prikaz na popisu uređaja, ali to nas nije dovelo ni korak bliže odabiru drivera. Da biste odabrali upravljački program, morate znati na kojem je čipu napravljena vaša zviždaljka. Sljedeći neuspješni pokušaji da se sazna na Internetu nisu doveli do ničega dobrog. Naoružan tankim odvijačem s prorezima, pažljivo odvajam poklopac adaptera i pogled mi se pojavljuje u svoj svojoj iskonskoj golotinji, opaka zamisao ujaka Liaoa. Pod povećalom možete vidjeti naziv čipa - RTL8188EUS. Već je dobro. Na nekim forumima sam vidio postove da je upravo drajver istog gospodina lwfingera prikladan za ovaj čip (iako on govori samo o RTL8188EU).

Dio 2. Bourneova nadmoć

Skidam izvorni kod drajvera s git-a.

Vrijeme je da ponovno instalirate Windows kako biste učinili ono s čime se Linuxoidi obično povezuju - sastavljanje nečega od sorti. Kako se pokazalo, sklapanje upravljačkih programa malo se razlikuje od kompajliranja programa:

make
sudo make install

ali kako bismo kompajlirali module kernela, trebamo datoteke zaglavlja kernela za našu određenu verziju.

Postoji paket u skladištu zaliha raspberrypi-kernel-headers, ali sadrži verziju kernela datoteka 4.19.66-v7l+a to nam ne ide. Ali da biste dobili zaglavlja željene verzije, kako se pokazalo, postoji prikladan alat rpi izvor (link na kraju githuba), s kojim možete preuzeti željene zaglavlja. Kloniramo repozitorij, napravimo skriptu izvršnom, pokrenemo je. Prvo pokretanje nije uspjelo s pogreškom - nema uslužnog programa bc. Srećom, nalazi se u repozitoriju i mi ga samo instaliramo.

sudo apt-get install bc

Nakon toga, ponovno pokretanje i preuzimanje zaglavlja (a zatim postavljanje nečega, ne sjećam se sad) traje neko vrijeme i možete se nasloniti u stolicu Windows je postao bolji u svim svojim manifestacijama.

Nakon što su sva zaglavlja preuzeta, provjeravamo je li se imenik pojavio /lib/modules/4.19.73-v7+ a u njemu simbolički link pokazuje na mjesto gdje se nalaze preuzete datoteke (imam /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

Pripremna faza je završena, možete početi s montažom. Sastavljanje modula opet traje određeno vrijeme, malina nije brza zvijer (ima 32bit 900Mhz Cortex ARM v7 kamen).
Dakle, sve sastavljeno. Driver instaliramo u 2. koraku (make install), dok kopiramo više firmware datoteka potrebnih za rad drivera:

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

Dio 3. Bourneov ultimatum

Stavim zviždaljku u port i ... ništa se ne događa. Je li sve bilo uzalud?

Počinjem proučavati datoteke unutar projekta i u jednoj od njih pronalazim u čemu je bio problem: upravljački program ima potpuni popis VID/PID identifikatora koje može poslužiti. A kako bi naš uređaj radio s ovim upravljačkim programom, upravo sam dodao svoj ID u datoteku 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 */
};

Ponovno kompajlirao upravljački program i ponovno ga instalirao u sustav.

I ovaj put je sve uspjelo. Lampica na adapteru svijetli i novi uređaj se pojavljuje na popisu mrežnih sučelja.

Pregled bežičnih sučelja daje sljedeće:

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 za one koji pročitaju do kraja

Sjećate se kako sam rekao da nije važno koja je najveća brzina deklarirana na vašem adapteru?
Dakle, na malini (prije izlaska modela 4), svi uređaji (uključujući ethernet adapter) sjede na istoj usb sabirnici. Super je, zar ne? I tako se propusnost usb sabirnice dijeli između svih uređaja na njoj. Pri mjerenju brzine i preko etherneta i preko usb wi-fi (spojen na 1 ruter) i preko zraka i preko žice je dao oko 20Mbps.

PS Općenito, ovaj vodič za sastavljanje upravljačkog programa za ovaj određeni adapter vrijedi ne samo za RPI. Zatim sam to ponovio na radnoj površini s Linux Mintom - i tamo je sve radilo. Vi samo trebate preuzeti potrebne datoteke zaglavlja za svoju verziju kernela na isti način.

UPD. Upućeni ljudi su predložili: kako ne biste ovisili o verziji kernela, morate izgraditi i instalirati upravljačke programe koristeći dkms. Readme za upravljački program također ima ovu opciju.

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. Zaprosio zakrpa za ID uređaja prihvaćen je u glavnu granu repozitorija lwfinger/rtl8188eu.

reference
- RPi USB WiFi adapteri
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi izvor

Izvor: www.habr.com