Le të bëjmë miq RaspberryPi me TP-Link TL-WN727N

Hej Habr!

Një herë vendosa ta lidh mjedrën time me internetin përmes ajrit.

Sapo u tha, për këtë qëllim bleva një bilbil usb wi-fi nga kompania e njohur TP-Link nga dyqani më i afërt. Do të them menjëherë se ky nuk është një lloj moduli nano usb, por një pajisje mjaft e madhe, me madhësinë e një flash drive të rregullt (ose, nëse dëshironi, madhësia e gishtit tregues të një njeriu të rritur). Para blerjes, bëra një kërkim të vogël në listën e prodhuesve të mbështetur të bilbilave për RPI dhe TP-Link ishte në listë (megjithatë, siç doli më vonë, nuk i mora parasysh hollësitë, sepse djalli, siç e dimë , është në detaje). Kështu, fillon përralla e ftohtë e fatkeqësive të mia; ne paraqesim në vëmendjen tuaj një histori detektive në 3 pjesë. Për të interesuarit, ju lutemi referojuni cat.

artikull Lidhja e përshtatësit WiFi WN727N me Ubuntu/Mint Më ndihmoi pjesërisht, por së pari gjërat.

Kushtet e problemit

duke pasur parasysh:

  1. kompjuter me një tabelë Raspberry Pi 2 B v1.1 – 1 copë
  2. bilbil usb wi-fi WN727N - 1 copë
  3. një palë duar jo mjaft të shtrembër - 2 copë
  4. Raspbian i fundit është instaluar si OS (bazuar në Debian 10 Buster)
  5. versioni i kernelit 4.19.73-v7+

Gjeni: lidheni me internetin (Wi-Fi shpërndahet nga ruteri juaj i shtëpisë)

Pasi shpaketova përshtatësin, lexova udhëzimet brenda:

Përputhshmëria e sistemit: Windows 10/8/7/XP (madje edhe qielli, madje edhe XP) dhe MacOS 10.9-10.13

Hmm, si zakonisht, asnjë fjalë për Linux. Ishte 2k19, dhe drejtuesit ende duhej të montoheshin manualisht...

Ne kishim me vete 2 përpilues, 75 mijë biblioteka, pesë blobs binare, gjysmë grupi grash të zhveshura me një logo dhe një det të tërë titujsh të të gjitha gjuhëve dhe shenjave. Jo se ky është një grup i nevojshëm për punën. Por sapo të filloni të montoni një sistem për veten tuaj, bëhet e vështirë të ndaloni. E vetmja gjë që më shqetësoi ishin drejtuesit për wi-fi. Nuk ka asgjë më të pafuqishme, të papërgjegjshme dhe më të korruptuar sesa të ndërtosh shoferë nga burimi. Por e dija që herët a vonë do të kalonim në këto mbeturina.

Në përgjithësi, siç e dini, zënka me wi-fi usb në Linux është e dhimbshme dhe disi pa shije (si sushi rus).

Kutia përmban gjithashtu një CD me drejtues. Pa shumë shpresë shikoj se çfarë ka në të - ata definitivisht nuk janë kujdesur për të. Një kërkim në internet më solli në faqen e internetit të prodhuesit, por ka një drejtues Linux atje vetëm për rishikimin e pajisjes v4, dhe në krahët e mi ishte v5.21. Dhe përveç kësaj, për versionet shumë të vjetra të kernelit 2.6-3.16. I dekurajuar nga dështimi në fillim, mendova tashmë se duhet të kisha marrë TL-WN727N (është pak më i shtrenjtë dhe mund të përballojë 300 Mbps kundrejt 150 për timin, por siç doli, kjo nuk ka fare rëndësi për mjedrën, për këtë do të shkruhet më vonë). Por gjëja më e rëndësishme është që drejtuesit për të tashmë ekzistojnë dhe janë instaluar thjesht si një paketë firmware-ralink. Zakonisht mund ta shikoni rishikimin e pajisjes në trupin e pajisjes në një ngjitëse pranë numrit serial.

Googlimi i mëtejshëm dhe vizita në forume të ndryshme nuk solli shumë të mira. Me sa duket askush para meje nuk është përpjekur të lidhë një përshtatës të tillë me Linux. Hmm, unë jam me fat si një njeri i mbytur.

Edhe pse jo, po gënjej, por edhe vizitat në forume (kryesisht ato në gjuhën angleze) dhanë fryt; në disa tema përmendej një farë z. . Depoja e tij git është në fund të artikullit në lidhje. Dhe mësimi i dytë që mësova është se ju duhet të identifikoni pajisjen tuaj në mënyrë që të kuptoni se cili drejtues mund të jetë i përshtatshëm për të.

Pjesa 1: Identiteti Bourne

Kur pajisja u fut në portë, natyrisht, asnjë LED nuk u ndez. Dhe në përgjithësi nuk është e qartë në asnjë mënyrë nëse diçka funksionon apo jo.

Para së gjithash, për të zbuluar nëse kerneli e sheh pajisjen tonë, unë shikoj në 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

Doli që sheh, dhe madje është e qartë se ka një çip Realtek dhe VID/PID të vetë pajisjes në autobusin usb.

Le të shkojmë më tej dhe të shohim lsusb, dhe këtu na pret një tjetër dështim

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

Sistemi nuk e di se çfarë lloj pajisjeje është dhe me turp tregon një hapësirë ​​boshe në vend të emrit (edhe pse shitësi=2357 është padyshim TP-Link).

Në këtë fazë, lexuesi kërkues ndoshta tashmë ka vënë re diçka interesante, por ne do ta lëmë atë deri në kohën tonë.

Hulumtimi i problemit të emrave bosh më çoi në një faqe me identifikues, ku futen informacione për VID/PID të njohura. 2357:0111 jonë nuk ishte aty. Siç doli më vonë, të shërbimeve lsusb përdor skedarin /usr/share/misc/usb.ids, e cila është e njëjta listë e ID-ve nga kjo faqe. Për bukurinë e ekranit, thjesht shtova linja për shitësin TP-Link në sistemin tim.

2357  TP-Link
        0111  TL-WN727N v5.21

Epo, ne korrigjuam ekranin në listën e pajisjeve, por nuk na afroi një hap më afër zgjedhjes së një drejtuesi. Për të zgjedhur një shofer, duhet të dini se në cilin çip është bërë bilbili juaj. Përpjekjet e radhës të pasuksesshme për ta zbuluar këtë në internet nuk çuan në asgjë të mirë. I armatosur me një kaçavidë me vrima të hollë, heq me kujdes kapakun e përshtatësit dhe ideja e mbrapshtë e xhaxhait Liao shfaqet me gjithë lakuriqësinë e saj të pacenuar. Nën një xham zmadhues mund të shihni emrin e çipit - RTL8188EUS. Kjo tashmë është mirë. Në disa forume pashë postime që shoferi nga i njëjti zotëri lwfinger është i përshtatshëm për këtë çip (edhe pse ai shkruan vetëm për RTL8188EU).

Pjesa 2: Supremacia e Bourne

Unë shkarkoj burimet e shoferit nga Git.

Është koha për të riinstaluar Windows dhe për të bërë atë me të cilën zakonisht lidhen përdoruesit e Linux - të montoni diçka nga disa lloje. Montimi i drejtuesve, siç rezulton, ndryshon pak nga përpilimi i programeve:

make
sudo make install

por për të kompiluar modulet e kernelit na duhen skedarët e kokës së kernelit për versionin tonë specifik.

Ekziston një paketë në depon e aksioneve mjedra-kernel-koka, por përmban versionin e kernelit të skedarëve 4.19.66-v7l+, dhe kjo nuk na përshtatet. Por për të marrë titujt e versionit të kërkuar, siç doli, ekziston një mjet i përshtatshëm rpi-burim (lidhja në fund në Github), me të cilën mund të shkarkoni titujt e nevojshëm. Ne klonojmë depon, e bëjmë skriptin të ekzekutueshëm dhe e ekzekutojmë atë. Nisja e parë dështon me një gabim - nuk ka asnjë mjet bc. Për fat të mirë, është në depo dhe ne thjesht e instalojmë atë.

sudo apt-get install bc

Pas kësaj, rinisja dhe shkarkimi i titujve (dhe më pas vendosja e diçkaje, nuk më kujtohet tani) kërkon pak kohë dhe mund të uleni në karrigen tuaj, Windows është bërë më i mirë në të gjitha manifestimet e tij.

Pasi të jenë shkarkuar të gjithë titujt, kontrolloni që drejtoria të shfaqet /lib/modules/4.19.73-v7+ dhe në të symlink tregon vendin ku ndodhen skedarët e shkarkuar (për mua ë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

Faza përgatitore ka përfunduar, mund të filloni montimin. Montimi i moduleve përsëri kërkon pak kohë, Raspberry nuk është një kafshë e shpejtë (ai ka një Cortex ARM v32 900 bit 7 Mhz).
Pra, gjithçka u përpilua. Ne instalojmë drejtuesin në hapin e dytë (bëni instalimin), ndërsa kopjojmë gjithashtu më shumë skedarë firmware të nevojshëm për funksionimin e drejtuesit:

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. Ultimatumi i Bourne

E fut bilbilin në port dhe... asgjë nuk ndodh. A ishte e gjitha për asgjë?

Filloj të studioj skedarët brenda projektit dhe në njërën prej tyre zbuloj se cili ishte problemi: drejtuesi specifikon një listë të plotë të identifikuesve VID/PID që mund të shërbejë. Dhe në mënyrë që pajisja jonë të funksionojë me këtë drejtues, thjesht shtova ID-në time në skedar 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 */
};

Rikompilova drejtuesin dhe e instalova përsëri në sistem.

Dhe këtë herë gjithçka filloi. Drita në përshtatës u ndez dhe një pajisje e re u shfaq në listën e ndërfaqeve të rrjetit.

Shikimi i ndërfaqeve me valë tregon sa vijon:

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 për ata që lexojnë deri në fund

Mbani mend se si thashë që nuk ka rëndësi se çfarë shpejtësie maksimale tregohet në përshtatësin tuaj?
Pra, në Malinka (para lëshimit të modelit 4), të gjitha pajisjet (përfshirë përshtatësin ethernet) ulen në të njëjtin autobus USB. E shkëlqyeshme, apo jo? Prandaj, gjerësia e brezit të autobusit USB ndahet midis të gjitha pajisjeve në të. Gjatë matjes së shpejtësisë si nëpërmjet ethernetit ashtu edhe nëpërmjet usb wi-fi (i lidhur me 1 ruter) si me ajër ashtu edhe me tel, ishte rreth 20 Mbit/s.

PS Në përgjithësi, ky udhëzues për përpilimin e një drejtuesi për këtë përshtatës të veçantë është i vlefshëm jo vetëm për RPI. Më pas e përsërita në desktopin tim me Linux Mint - gjithçka funksionoi edhe atje. Thjesht duhet të shkarkoni skedarët e nevojshëm të kokës për versionin tuaj të kernelit në të njëjtën mënyrë.

UPD. Njerëz të ditur sugjeruan: në mënyrë që të mos vareni nga versioni i kernelit, duhet të mbledhni dhe instaloni drejtuesit duke përdorur dkms. Readme për drejtuesin gjithashtu përmban këtë opsion.

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. Propozuar patch për id-në e pajisjes u pranua në degën kryesore të depove lwfinger/rtl8188eu.

Referencat
- Përshtatësit RPi USB Wi-Fi
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-burim

Burimi: www.habr.com