Përshëndetje, Habr!
Një herë mendova të lidha Raspberry Pi-n time me internetin përmes valëve.
I thënë e bërë, për këtë u blerë në dyqanin më të afërt një usb wi-fi dongle nga e njohura markë TP-Link. Të them të vërtetën, ky nuk është ndonjë nano usb modul, por një pajisje me përmasa të zakonshme, afërsisht sa një pendë USB (apo nëse preferoni, sa gishti i tregues i një burri të rritur). Para blerjes, pak studioja listën e prodhuesve të mbështetur për dongle për RPI dhe TP-Link ishte në atë listë (megjithatë, siç rezultoi më vonë, nuk e kisha marrë parasysh ndonjë nuancë, sepse djalli, siç dihet, qëndron në detaje). Kështu, tregimi i zymtë i aventurave të mia fillon, dhe ju prezantohem me një histori detektive në 3 pjesë. I interesuar, ju lutem të vazhdoni për më shumë.
Artikulli më ndihmoi pjesërisht, por për të gjitha në radhë.
Kushtet e problemit
E dhënë:
- njĂ« kompjuter njĂ«-pjese Raspberry Pi 2 B v1.1 â 1 copĂ«
- usb wi-fi dongle WN727N â 1 copĂ«
- njĂ« çift duarsh jo shumĂ« tĂ« çuditshme â 2 copĂ«
- si sistem operativ ka instaluar Raspbian e fundit (bazuar në debian 10 Buster)
- në versionin e kernel-it 4.19.73-v7+
Gjeni: lidhuni me internetin (Wi-Fi del nga rrjeti i shtëpisë)
Pas shkarkimit të adaptorit, lexoj udhëzimin brenda:
Përshtatshmëria e sistemit: Windows 10/8/7/XP (përfshirë edhe XP) dhe MacOS 10.9-10.13
Eh, për Linux asnjëherë asnjë fjalë. Ishim në vitin 2019, por ende duhej të mbledhja drejtorinë manualisht...
Kishim me vete 2 kompilatorë, 75 mijë biblioteka, pesë blloqe binarë, një gjysmë grupi symbolesh dhe një det me header-a nga të gjitha gjuhët dhe formate. Nuk ishte se ishim nevoja për një komplet të tillë për punë. Por kur fillove të ndërtoje një sistem për veten, bëhet e vështirë të ndalosh. E vetmja gjë që më shqetësonte ishin driverat për Wi-Fi. Nuk ka asgjë më të pafuqishme, të papërgjegjshme dhe të prishur se sa ndërtimi i driverave nga burimi. Por e dija që një ditë do kalonim edhe në këtë gjë.
Siç dihet, merret me USB Wi-Fi në Linux është e dhimbshme dhe disi e pakëndshme (si sushi rus).
NĂ« kutinĂ« ka edhe njĂ« CD me drivera. Pa ndonjĂ« shpresĂ« tĂ« veçantĂ« shikoj se çfarĂ« ka atje â saktĂ«sisht, nuk iu kushtuan vĂ«mendje. KĂ«rkimi nĂ« internet mĂ« solli nĂ« faqen e prodhuesit, por aty kishte driver pĂ«r Linux vetĂ«m pĂ«r revizionin e pajisjes v4, por ndĂ«rkohĂ« unĂ« kisha nĂ« duar v5.21. Dhe gjithashtu pĂ«r versione shumĂ« tĂ« vjetra tĂ« kernelit 2.6-3.16. I dĂ«shpĂ«ruar nga dĂ«shtimi qĂ« nĂ« fillim, mendova se duhej tĂ« kisha marrĂ« TL-WN727N (ai pak mĂ« i shtrenjtĂ« dhe arrin deri nĂ« 300Mbps pĂ«rkundrejt 150 tĂ« timit, por siç e kuptova, pĂ«r Raspberry Pi kjo nuk ka rĂ«ndĂ«si, pĂ«r kĂ«tĂ« do tĂ« shkruhet mĂ« tutje). Por mĂ« e rĂ«ndĂ«sishmja, tashmĂ« ka drejtorĂ« pĂ«r tĂ« dhe instalohen thjesht pĂ«rmes paketĂ«s firmware-ralink. TĂ« shikosh revizionin e pajisjes zakonisht mund tĂ« bĂ«het nĂ« korpusin e pajisjes nĂ« etiketĂ« afĂ«r numrit serial.
Gjetjet e mëtejshme në Google dhe vizitat në forume të ndryshme nuk dhanë ndonjë rezultat pozitiv. Duket se askush para meje nuk kishte provuar të lidhte këtë adaptues të veçantë në Linux. Po, fatkeqësisht, më ndodhi si një peshk i mbytur.
MegjithatĂ«, jo, po gĂ«njej, vizitat nĂ« forume (sĂ« shumti anglishtfolĂ«se) gjithashtu dhanĂ« disa rezultate, nĂ« disa tema u pĂ«rmend njĂ« zotĂ«ri i quajtur lwfinger, i njohur pĂ«r shkak se ka shkruar njĂ« numĂ«r drejtuesish pĂ«r adaptuesit Wi-Fi. Repo git tĂ« tij nĂ« fund tĂ« artikullit nĂ« lidhje. Dhe mĂ«simi i dytĂ« qĂ« kam marrĂ« â duhet tĂ« identifikosh pajisjen tĂ«nde pĂ«r tĂ« kuptuar se cili drejtues mund tĂ« pĂ«rshtatet pĂ«r tĂ«.
Pjesa 1. Identifikimi i Born-it
Kur porshëndet pajisjen në port, ndonjë LED nuk u ndez. Dhe në përgjithësi, nuk është e qartë se nëse diçka funksionon apo jo.
E para, për të kontrolluar nëse bërthama sheh pajisjen tonë, shikoj në dmesg:
[ 965.606998] usb 1-1.3: pajisje e re USB me sh brenda numrit 9 duke përdorur dwc_otg
[ 965.738195] usb 1-1.3: Pajisja USB e re është gjetur, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[ 965.738219] usb 1-1.3: Struktura të re të pajisjes USB: Mfr=1, Produkt=2, NumriSerik=3
[ 965.738231] usb 1-1.3: Produkt: 802.11n NIC
[ 965.738243] usb 1-1.3: Prodhues: Realtek
[ 965.738255] usb 1-1.3: NumriSerik: 00E04C0001
Doli që e sheh, dhe gjithashtu është e qartë se aty është çipi Realtek dhe vetë VID/PID i pajisjes në autobusin usb.
Shkëlqejmë tutje, shikojmë lsusb, dhe këtu na pret një dështim tjetër
Bus 001 Dispositivi 008: ID 2357:0111
Bus 001 Dispositivi 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Adaptori i Ethernetit të Shpejtë
Bus 001 Dispositivi 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Dispositivi 001: ID 1d6b:0002 Fondacioni Linux 2.0 hub kryesor
Sistemi nuk e di se çfarë është kjo pajisje, dhe me turp tregon një vend të zbrazët në vend të emrit (ndonëse vendor=2357 me siguri është TP-Link).
Në këtë etapë, lexuesi kureshtar ndoshta ka vërejtur diçka interesante, por do ta shtyjmë atë për një moment tjetër.
Hulumtimi mbi problemin e emrave të zbrazët më çoi në një faqe me identifikuesit, ku regjistrohet informacioni për VID/PID të njohur. Identifikuesi ynë 2357:0111 nuk kishte atje. Siç doli më vonë, utilitarja lsusb përdor skedarin /usr/share/misc/usb.ids, i cili është e njëjta listë identifikuesish nga kjo faqe. Për ta bërë pamjen më të bukur, unë thjesht shtova në sistemin tim rreshtat për prodhuesin TP-Link.
2357 TP-Link
0111 TL-WN727N v5.21
Ne e pĂ«rmirĂ«suam shfaqjen nĂ« listĂ«n e pajisjeve, por kjo nuk na afroi asnjĂ« hap nĂ« zgjedhjen e drejtuesit. PĂ«r tĂ« zgjedhur drejtuesin, duhet tĂ« dish se mbi cilin çip Ă«shtĂ« bĂ«rĂ« pĂ«rshtatĂ«si yt. PĂ«rpjekjet e mia tĂ« dĂ«shtuara pĂ«r tĂ« zbuluar kĂ«tĂ« nĂ« internet nuk çuan nĂ« asgjĂ« tĂ« mirĂ«. I armatosur me njĂ« flakĂ« tĂ« hollĂ«, me kujdes ngrita kapakun e adaptorit dhe para meje shfaqet nĂ« gjithĂ« shkĂ«lqimin e saj tĂ« pandryshuar krijesa e dyshimtĂ« e xhaxhait Liao. NĂ«n lupĂ« mund tĂ« shoh emrin e çipit â RTL8188EUS. Kjo Ă«shtĂ« tashmĂ« njĂ« gjĂ« e mirĂ«. NĂ« disa forume kam parĂ« postime qĂ« thonĂ« se pĂ«r kĂ«tĂ« çip, drejtuesi i atij zotit lwfinger (pavarĂ«sisht se ai vetĂ«m ka shkruar pĂ«r RTL8188EU) i pĂ«rshtatet shumĂ« mirĂ«.
Pjesa 2. Superioriteti i Bornit
Pohoqi burimet e drejtuesit nga gita.
Ka ardhur koha për të riparuar Windows-in dhe të merremi me atë që zakonisht lidhet me linuksin - ndërtimin e diçkaje nga kodet burimore. Ndërtime e drejtuesve, siç duket, nuk ndryshon shumë nga kompilimi i programeve:
make
sudo make install
por për kompilimin e moduleve të bërthamës na duhen skedarët përkatës të bërthamës për versionin tonë specifik.
Në repozitorin standard ka një paketë raspberrypi-kernel-headers, por ai përmban versionin e skedarëve për bërthamën 4.19.66-v7l+, dhe kjo nuk na përputhet. Por për të marrë skedarët e duhur, siç rezulton, ka një mjet të dobishëm rpi-source (linku në fund në GitHub), me anë të të cilit mund të shkarkojmë skedarët e nevojshëm. Klonojmë repozitorin, bëjmë skriptin ekzekutues dhe e nisim. Nisja e parë dështoi me një gabim - nuk ka utilitarin bc. Fatmirësisht, ai është në repozitor dhe ne e instalojmë thjesht.
sudo apt-get install bc
Pas kĂ«saj, nisja e dytĂ« dhe shkarkimi i skedarĂ«ve (dhe mĂ« pas konfigurimi i diçkaje, tashmĂ« nuk e mbaj mend) merr disa kohĂ«, dhe mund tĂ« shtrihesh pas karriges â Windows Ă«shtĂ« pĂ«rmirĂ«suar nĂ« tĂ« gjitha aspektet e saj.
Pasi të shkarkohen të gjithë skedarët, kontrollojmë se është shfaqur një katalog /lib/modules/4.19.73-v7+ dhe simlink tregon vendin ku ndodhen skedarët e shkarkuara (në rastin tim është /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
Etapa përgatitore është përfunduar, tani mund të fillojmë me ndërtimin. Ndertimi i moduleve gjithashtu merr një kohë të caktuar, ndihma e vogël nuk është shumë e shpejtë (processori i saj është 32bit 900Mhz Cortex ARM v7).
Pra, gjithçka është kompiluar. Tani do të instalojmë driverin me hapin 2 (make install), ndërkohë që bëhet kopjimi i skedarëve të firmware-t të nevojshëm për funksionimin e driverit:
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/.
Pjesa 3. Ultimatum i Bornit
Fut donglin në port dhe⊠nuk ndodh asgjë. A ishte kjo e gjithë puna e kotë?
Filloj të studioj skedarët e brendshëm të projektit dhe në një prej tyre gjej problemin: driveri ka një listë të plotë të identifikuesve VID/PID që mund të shërbejë. Dhe për të siguruar që pajisja jonë punon me këtë driver, thjesht e kam shtuar id tim në skedarin rtl8188eu/os_dep/usb_intf.c
struktura statike usb_device_id rtw_usb_id_tbl[] = {
/*=== Tabela demonstruese Realtek ===*/
{USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */
{USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
/*=== ID e Klientit ===*/
/****** 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 */
{} /* Vendi përfundues */
};
Rinovova drejtorin dhe e instalova nga e para në sistem.
Këtë herë gjithçka funksionoi. Drita në adaptues u ndriçua dhe një pajisje e re u shfaq në listën e ndërfaqeve rrjet.
Shikimi i ndërfaqeve pa tela jep këtë rezultat:
pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0 nuk ka zgjerime wireless.
lo nuk ka zgjerime wireless.
wlan0 nuk është e lidhur ESSID:"" Pseudiemri:""
Moda:Auto Frekuenca=2.412 GHz Pikë Qasje: Jo-e-Lidhur
Ndjeshmëri:0/0
Përsërit:jo RTS thr:jo Fragment thr:jo
ĂelĂ«si i enkriptimit:jo
Menaxhimi i Energjisë:jo
Cilësia e Lidhjes=0/100 Niveli i Sinjalit=0 dBm Niveli i Zhurmës=0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx përsëritje të tepruara:0 Misk:0 Beacon të humbura:0
Bonus për ata që e kanë lexuar deri në fund
A e mbani mend si thashë se nuk ka rëndësi cila është shpejtësia maksimale e shpallur në adapterin tuaj?
Pra, në Raspberry Pi (deri në daljen e modelit 4), të gjitha pajisjet (përfshirë adapterin ethernet) janë në një shinë USB. E bukur, apo jo? Prandaj, kapaciteti i shinës USB ndahet midis të gjitha pajisjeve në të. Gjatë matjes së shpejtësisë si përmes ethernet, ashtu edhe përmes Wi-Fi USB (të lidhura me një router), dhe përmes ajrit, dhe me kabull, rezultati ishte rreth 20 Mbps.
P.S. NĂ« tĂ« vĂ«rtetĂ«, ky udhĂ«zues pĂ«r kompilimin e drivers pĂ«r kĂ«tĂ« adapter konkret Ă«shtĂ« i vlefshĂ«m jo vetĂ«m pĂ«r RPI. UnĂ« e pĂ«rsĂ«rita kĂ«tĂ« edhe nĂ« desktopin tim me Linux Mint â gjithçka punoi po ashtu. Thjesht duhet tĂ« shkarkoni skedat e nevojshme pĂ«r versionin e bĂ«rthamĂ«s qĂ« pĂ«rdorni.
UPD. Njerëzit që dinë më shumë e sugjeruan: për të mos u varur nga versioni i bërthamës, duhet të ndërtoni dhe instaloni drivers me ndihmën e dkms. Ky opsion është gjithashtu në readme për driverin.
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. Propozimi për ID-në e pajisjes u miratua në degën kryesore të depozitës lwfinger/rtl8188eu.
Linke
â
â
â
â
Burimi: habr.com
