Hei, Habr!
Jeg tenkte en gang at jeg ville koble min Raspberry Pi til internett trÄdlÞst.
Sagt og gjort, for dette kjÞpte jeg en USB Wi-Fi dongle fra den velkjente produsenten TP-Link i den nÊrmeste butikken. Jeg vil si med en gang at dette ikke er noe nano USB-modul, men en temmelig stor enhet omtrent pÄ stÞrrelse med en vanlig USB-stasjon (eller, hvis det er mer passende for deg, omtrent pÄ stÞrrelse med pekefingeren til en voksen mann). FÞr jeg kjÞpte den, undersÞkte jeg litt listen over stÞttede dongler for RPI, og TP-Link lÄ pÄ listen (selv om jeg senere innsÄ at jeg ikke tok hÞyde for detaljer, for djevelen ligger som kjent i detaljene). SÄ, den kalde fortellingen om mine forviklinger begynner, og jeg gir dere en detektivhistorie i tre deler. De interesserte bes om Ä lese videre.
Artikkel Det hjalp meg delvis, men la meg forklare alt i rekkefĂžlge.
Oppgavens betingelser
Gitt:
- Enkeltkortdatamaskin Raspberry Pi 2 B v1.1 - 1 stk
- USB Wi-Fi dongle WN727N - 1 stk
- Et par noenlunde brukbare hender - 2 stk
- Siste versjon av Raspbian (basert pÄ Debian 10 Buster) er installert som OS.
- Kjernen versjon 4.19.73-v7+
MÄl: Ä koble til internett (Wi-Fi deles fra hjemme-ruteren)
Etter Ă„ ha pakket ut adapteren, leser jeg instruksjonen inni:
Systemkompatibilitet: Windows 10/8/7/XP (til og med XP) og MacOS 10.9-10.13
Ja, om Linux var det som vanlig ingen ord. Det var 2019, og driverne mÄtte fortsatt kompileres manuelt ...
Vi hadde med oss to kompilatorer, 75 tusen biblioteker, fem binÊre blobber, et halvt hav av hodere med logo og et helt hav av headere i alle sprÄk og formater. Ikke at dette var et nÞdvendig sett for arbeidet. Men nÄr du har begynt Ä bygge systemet ditt selv, blir det vanskelig Ä stoppe. Det eneste som bekymret meg var driverne til Wi-Fi. Det finnes ikke noe mer hjelpelÞst, uansvarlig og Þdelagt enn Ä bygge drivere fra kildekode. Men jeg visste at fÞr eller senere ville vi komme til denne skiten.
Generelt er det velkjent at Ä jonglere med USB Wi-Fi pÄ Linux er smertefullt og noe ubehagelig (som russiske sushi).
I esken er det ogsÄ en CD med drivere. Uten store forhÄpninger ser jeg hva som er pÄ den - akkurat, de har ikke brydd seg. Et sÞk pÄ internett fÞrte meg til produsentens nettsted, men der var det kun Linux-drivere for revisjonen av enheten v4, men jeg hadde v5.21. Og i tillegg til veldig gamle kjerneversjoner 2.6-3.16. Desillusjonert etter Ä ha feilet allerede i starten, tenkte jeg at jeg burde ha tatt TL-WN727N (den er litt dyrere og klarer 300Mbps mot 150 for min, men som det viste seg, betyr egentlig ikke det noe for Raspberry Pi, om dette vil jeg skrive mer senere). Men viktigst av alt, driverne for den finnes allerede og installeres enkelt som pakke. firmware-ralink. Du kan vanligvis se enhetsrevisjonen pÄ en klistrelapp pÄ selve enheten, ved siden av serienummeret.
Videre googling og besÞk pÄ forskjellige forum fÞrte ikke til noe spesielt bra. Det ser ut til at ingen fÞr meg har prÞvd Ä koble akkurat denne adapteren til Linux. Ja, jeg har uflaks som en druknet.
Selv om jeg lyver, sÄ ga forumbesÞk (for det meste engelsksprÄklige) ogsÄ noen resultater, i noen trÄder dukket det opp omtaler av en viss herre lwfinger, som er kjent for Ä ha skrevet en del drivere for WiFi-adaptere. Hans Git-repositorium er pÄ slutten av artikkelen i lenkene. Og den andre leksjonen jeg lÊrte - man mÄ identifisere enheten sin for Ä forstÄ hvilken driver som kan passe.
Del 1. Identifisering av Enheten
NÄr enheten kobles til porten, lyser ingen LED opp. Det er heller ikke klart pÄ noen mÄte om noe fungerer eller ikke.
FÞrst og fremst for Ä finne ut om kjernen ser enheten vÄr, sjekker jeg dmesg:
[ 965.606998] usb 1-1.3: ny hĂžyhastighets USB-enhet nummer 9 bruker dwc_otg
[ 965.738195] usb 1-1.3: Ny USB-enhet funnet, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[ 965.738219] usb 1-1.3: Nye USB-enhetstrenger: Mfr=1, Produkt=2, Serienummer=3
[ 965.738231] usb 1-1.3: Produkt: 802.11n NIC
[ 965.738243] usb 1-1.3: Produsent: Realtek
[ 965.738255] usb 1-1.3: Serienummer: 00E04C0001
Det viste seg at den blir sett, og det er tydelig at det er en Realtek-brikke, samt selve VID/PID for enheten pÄ USB-bussen.
La oss gÄ videre, vi ser lsusb, og her er vi ute for en ny fiasko
Bus 001 Enhet 008: ID 2357:0111
Bus 001 Enhet 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Hurtig Ethernet-adapter
Bus 001 Enhet 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Enhet 001: ID 1d6b:0002 Linux Foundation 2.0 rot hub
Systemet vet ikke hva dette er for en enhet, og viser skamfullt et tomrom i stedet for navnet (selv om vendor=2357 helt klart er TP-Link).
PĂ„ dette stadiet har den nysgjerrige leseren sikkert allerede lagt merke til noe interessant, men vi skal legge det til side til senere.
UndersÞkelsen av problemet med de tomme navnene fÞrte meg til et nettsted med identifikatorer, hvor informasjon om kjente VID/PID oppbevares. VÄr 2357:0111 var ikke der. Som det senere ble klart, var verktÞyet lsusb bruker fil /usr/share/misc/usb.ids, som er den samme listen med identifikatorer fra dette nettstedet. For Ä gjÞre det penere har jeg bare lagt til rader for TP-Link leverandÞren i systemet mitt.
2357 TP-Link
0111 TL-WN727N v5.21
SĂ„ vi har fikset visningen i enhetslisten, men det bringer oss ikke nĂŠrmere valget av driver. For Ă„ velge driver mĂ„ du vite hvilken chip din dongle er laget med. Ingen av de mislykkede forsĂžkene pĂ„ Ă„ finne ut dette pĂ„ nettet har fĂžrt til noe godt. BevĂŠpnet med en fin skrutrekker forsiktig lĂžfter jeg lokket pĂ„ adapteren, og for min synsnerve Ă„pent stĂ„r det skammelige barnet til onkel Liao. Under lupe kan man se navnet pĂ„ chipen â RTL8188EUS. Dette er bra. PĂ„ noen fora har jeg sett innlegg om at driveren fra herr lwfinger passer godt til denne chipen (selv om det bare stĂ„r om RTL8188EU).
Del 2. Borns overlegenhet
Jeg laster ned driverens kildekode fra git.
Det er tid for Ă„ reinstallere Windows og gjĂžre det som vanlig er knyttet til Linux-brukere â Ă„ kompilere noe fra kildene. Kompilering av drivere viste seg Ă„ ikke vĂŠre sĂ„ forskjellig fra kompilering av programmer:
make
sudo make install
men for Ä kompilere kjernemoduler trenger vi kjernens header-filer for vÄr spesifikke versjon.
I det offisielle depotet er det en pakke raspberrypi-kernel-headers, men det inneholder versjonen av filene for kjernen 4.19.66-v7l+, og det passer ikke for oss. Men for Ă„ fĂ„ headerne til den nĂždvendige versjonen er det en praktisk verktĂžy som er tilgjengelig rpi-source (lenken pĂ„ slutten til GitHub), som gjĂžr at du kan laste ned de nĂždvendige headerne. Vi kloner depotet, gjĂžr skriptet kjĂžrbart, og kjĂžrer det. Den fĂžrste kjĂžringen feiler med en feil â verktĂžyet finnes ikke. bcHeldigvis er det i depotet, og vi installerer det bare.
sudo apt-get install bc
Etter dette tar det litt tid med den andre kjĂžringen og nedlastingen av headerne (og sĂ„ konfigurasjonen av noe, husker ikke hva nĂ„) og du kan lene deg tilbake i stolen â Windows er blitt bedre i alle sine egenskaper.
Etter at alle headerne har blitt lastet ned, sjekker vi at katalogen har blitt opprettet /lib/modules/4.19.73-v7+ og den har en symbolsk lenke som peker pÄ stedet der de lastede filene ligger (for meg er det /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
Forberedelsesfasen er overstÄtt, vi kan begynne Ä montere. Monteringen av modulene tar igjen litt tid, Raspberry Pi er ikke en rask enhet (prosessoren er en 32-bit 900MHz Cortex ARM v7).
SĂ„, alt er kompilert. Vi installerer driveren i trinn 2 (make install), samtidig skjer det en kopiering av flere firmware-filer som er nĂždvendige for at driveren skal fungere:
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. Ultimatumet til Bourne
Jeg setter inn USB-en i porten og... ingenting skjer. Var det alt dette bortkastet?
Jeg begynner Ä undersÞke filene i prosjektet og finner i en av dem Ärsaken til problemet: driveren angir en fullstendig liste over VID/PID-identifikatorer som den kan hÄndtere. For at enheten vÄr skal fungere med denne driveren, la jeg bare til min ID i filen 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 */
/*=== Kunde-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 */
};
Jeg har recompilert driveren og installert den pÄ nytt i systemet.
Og denne gangen fungerte alt. Lysdiode pÄ adapteret lyste opp og det dukket opp en ny enhet i listen over nettverksgrensesnitt.
Visning av trÄdlÞse grensesnitt gir fÞlgende:
pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0 no wireless extensions.
lo no wireless extensions.
wlan0 unassociated ESSID:"" Nickname:""
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 for those who read to the end
Husker du hvordan jeg sa at maksimal hastighet pÄ adapteren din ikke er sÄ viktig?
SĂ„nn er det at pĂ„ Raspberry Pi (fĂžr modellen 4) sitter alle enheter (inkludert ethernet-adapter) pĂ„ samme USB-buss. Ganske fint, ikke sant? Og derfor deles bĂ„ndbredden til USB-bussen mellom alle enhetene. NĂ„r jeg mĂ„ler hastigheten bĂ„de via ethernet og USB Wi-Fi (tilkoblet til Ă©n ruter) â i luften og med kabel â fĂ„r jeg omtrent 20 Mbit/s.
P.S. Denne guiden for kompilering av driveren for denne spesifikke adapteren gjelder ikke bare for RPI. Jeg gjentok den senere pĂ„ min desktop med Linux Mint â der fungerte det ogsĂ„. Du mĂ„ bare laste ned de nĂždvendige header-filene for din brukte kjerneversjon.
UPD. Kyndige folk har fortalt meg: for Ä ikke vÊre avhengig av kjerneversjonen mÄ du bygge og installere driverne ved hjelp av dkms. Det er ogsÄ en slik variant i readme-filen til driveren.
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. ForeslÄtt for device ID ble akseptert i mainstream-grenen av lwfinger/rtl8188eu-repositoriet.
Lenker
â
â
â
â
Kilde: habr.com
