Sadraudzēsimies ar RaspberryPi ar TP-Link TL-WN727N

Čau Habr!

Reiz es nolēmu savienot savu aveņu ar internetu pa gaisu.

Nekavējoties, Å”im nolÅ«kam tuvākajā veikalā iegādājos pazÄ«stamās kompānijas TP-Link usb wi-fi svilpi. Uzreiz teikÅ”u, ka tas nav kaut kāds nano usb modulis, bet gan diezgan liela ierÄ«ce, apmēram parasta zibatmiņas diska izmērā (vai, ja vēlaties, pieauguÅ”a vÄ«rieÅ”a rādÄ«tājpirksta lielumā). Pirms iegādes nedaudz izpētÄ«ju RPI atbalstÄ«to svilpes ražotāju sarakstu un sarakstā bija arÄ« TP-Link (tomēr kā vēlāk izrādÄ«jās smalkumus neņēmu vērā, jo velns, kā zināms , ir detaļās). Tā nu sākas aukstā pasaka par maniem neveiksmēm, piedāvājam jÅ«su uzmanÄ«bai detektÄ«vstāstu 3 daļās. Interesentus, lÅ«dzu, skatiet kat.

Pants WN727N WiFi adaptera pievienoÅ”ana Ubuntu/Mint Tas man palÄ«dzēja daļēji, bet vispirms vispirms.

Problēmas apstākļi

Ņemot vērā:

  1. vienplates dators Raspberry Pi 2 B v1.1 ā€“ 1 gab
  2. usb wi-fi svilpe WN727N - 1 gab
  3. pāris ne visai līku roku - 2 gab
  4. Jaunākā Raspbian versija ir instalēta kā OS (pamatojoties uz Debian 10 Buster)
  5. kodola versija 4.19.73-v7+

Atrast: izveidojiet savienojumu ar internetu (Wi-Fi tiek izplatÄ«ts no jÅ«su mājas marÅ”rutētāja)

Pēc adaptera izpakoÅ”anas es izlasÄ«ju instrukcijas iekÅ”pusē:

Sistēmas saderība: Windows 10/8/7/XP (pat debesis, pat XP) un MacOS 10.9-10.13

Hmm, kā parasti, par Linux ne vārda. Bija 2k19, un draiveri vēl bija jāsamontē manuāli...

Mums bija lÄ«dzi 2 kompilatori, 75 tÅ«kstoÅ”i bibliotēku, piecas bināras lāses, puse kailu sievieÅ”u ar logotipu un vesela jÅ«ra visu valodu un marķējumu virsrakstu. Tas nav nepiecieÅ”ams komplekts darbam. Bet, tiklÄ«dz jÅ«s sākat montēt sistēmu sev, to kļūst grÅ«ti apturēt. VienÄ«gais, kas mani satrauca, bija wi-fi draiveri. Nav nekā bezpalÄ«dzÄ«gāka, bezatbildÄ«gāka un korumpētāka kā draiveru veidoÅ”ana no pirmavota. Bet es zināju, ka agri vai vēlu mēs pāriesim uz Å”o miskasti.

Kopumā, kā jÅ«s zināt, niÄ·oties ar usb wi-fi operētājsistēmā Linux ir sāpÄ«gi un nedaudz bezgarŔīgi (kā krievu suÅ”i).

KastÄ«tē ir arÄ« kompaktdisks ar draiveriem. Es bez lielām cerÄ«bām skatos uz to, kas tajā atrodas - viņi noteikti nav par to parÅ«pējuÅ”ies. Meklējot internetā, es nonāku ražotāja vietnē, taču tur ir Linux draiveris tikai ierÄ«ces pārskatÄ«Å”anai v4, un manās rokās bija v5.21. Un turklāt ļoti vecām kodola versijām 2.6-3.16. PaŔā sākumā neveiksmes nomākts, es jau domāju, ka vajadzēja ņemt TL-WN727N (tas ir nedaudz dārgāks un var izturēt 300Mbps pret 150 manējam, bet, kā izrādÄ«jās, tam nav nekādas nozÄ«mes par avenēm, par to tiks rakstÄ«ts vēlāk). Bet vissvarÄ«gākais ir tas, ka draiveri tam jau pastāv un ir vienkārÅ”i instalēti kā pakotne programmaparatÅ«ra-ralink. Parasti ierÄ«ces versiju varat skatÄ«t uz ierÄ«ces korpusa uz uzlÄ«mes blakus sērijas numuram.

Tālākā googlÄ“Å”ana un dažādu forumu apmeklÄ“Å”ana neko labu nenesa. AcÄ«mredzot neviens pirms manis nav mēģinājis Ŕādu adapteri pieslēgt Linux. Hmm, man ir paveicies kā noslÄ«kuÅ”am cilvēkam.

Lai gan, nē, meloju, arÄ« forumu apmeklÄ“Å”ana (galvenokārt angļu valodā) nesa augļus, dažās tēmās bija minēts kāds misters lwfinger, kurÅ” ir slavens ar to, ka uzrakstÄ«jis vairākus draiverus Wi-Fi adapteriem. . Viņa git repozitorijs ir raksta beigās saitēs. Un otrā mācÄ«ba, ko es uzzināju, ir tāda, ka jums ir jāidentificē jÅ«su ierÄ«ce, lai saprastu, kurÅ” draiveris tai varētu bÅ«t piemērots.

1. daļa: Borna identitāte

Kad ierīce tika pievienota portam, protams, nedegās neviena gaismas diode. Un vispār nav skaidrs, vai kaut kas darbojas vai nē.

Pirmkārt, lai noskaidrotu, vai kodols redz mūsu ierīci, es meklēju 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

IzrādÄ«jās, ka redz, un ir pat skaidrs, ka usb kopnē ir Realtek mikroshēma un paÅ”as ierÄ«ces VID/PID.

Ejam tālāk un skatÄ«simies lsusb, un Å”eit mÅ«s sagaida vēl viena neveiksme

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

Sistēma nezina, kāda veida ierÄ«ce tā ir, un nekaunÄ«gi parāda tukÅ”u vietu nosaukuma vietā (lai gan vendor=2357 noteikti ir TP-Link).

Šajā posmā zinātkārais lasītājs, iespējams, jau ir pamanījis kaut ko interesantu, bet mēs to atstāsim līdz mūsu laikam.

Pētot tukÅ”o nosaukumu problēmu, es nonāku vietnē ar identifikatoriem, kur tiek ievadÄ«ta informācija par zināmo VID/PID. MÅ«su 2357:0111 nebija. Kā vēlāk izrādÄ«jās, lietderÄ«ba lsusb izmanto failu /usr/share/misc/usb.ids, kas ir tas pats Ŕīs vietnes ID saraksts. Displeja skaistuma labad es savā sistēmā vienkārÅ”i pievienoju rindiņas pārdevēja TP-Link.

2357  TP-Link
        0111  TL-WN727N v5.21

Labi, mēs izlabojām displeju ierīču sarakstā, taču tas mÅ«s nedeva ne soli tuvāk draivera izvēlei. Lai izvēlētos draiveri, jums jāzina, uz kura mikroshēma ir izgatavota jÅ«su svilpe. Nākamie neveiksmÄ«gie mēģinājumi to noskaidrot internetā ne pie kā laba nenoveda. Bruņojies ar plānu skrÅ«vgriezi ar rievām, es uzmanÄ«gi norauju adaptera vāciņu, un tēvoča Liao ļaunais radÄ«jums parādās visā savā senatnÄ«gajā kailumā. Zem palielināmā stikla var redzēt mikroshēmas nosaukumu - RTL8188EUS. Tas jau ir labi. Dažos forumos es redzēju ziņas, ka draiveris no tā paÅ”a džentlmeņa lwfinger ir labi piemērots Å”ai mikroshēmai (lai gan viņŔ raksta tikai par RTL8188EU).

2. daļa: Borna pārākums

Es lejupielādēju draiveru avotus no Git.

Ir pienācis laiks pārinstalēt Windows un darÄ«t to, ar ko Linux lietotāji parasti ir saistÄ«ti ā€“ kaut ko salikt no sava veida. Draiveru salikÅ”ana, kā izrādās, maz atŔķiras no programmu kompilÄ“Å”anas:

make
sudo make install

bet, lai kompilētu kodola moduļus, mums ir nepiecieÅ”ami kodola galvenes faili mÅ«su konkrētajai versijai.

Krājumu krātuvē ir iepakojums raspberrypi-kodolu-galvenes, bet tajā ir failu kodola versija 4.19.66-v7l+, un tas mums neder. Bet, lai iegÅ«tu vajadzÄ«gās versijas galvenes, kā izrādÄ«jās, ir ērts rÄ«ks rpi-avots (saite beigās Github), ar kuru jÅ«s varat lejupielādēt nepiecieÅ”amās galvenes. Mēs klonējam repozitoriju, padarām skriptu izpildāmu un palaižam to. Pirmā palaiÅ”ana neizdodas ar kļūdu - nav lietderÄ«bas bc. Par laimi, tas atrodas repozitorijā, un mēs to vienkārÅ”i instalējam.

sudo apt-get install bc

Pēc tam restartÄ“Å”ana un galveņu lejupielāde (un pēc tam kaut kā iestatÄ«Å”ana, es tagad neatceros) aizņem kādu laiku, un jÅ«s varat sēdēt krēslā, Windows ir kļuvis labāks visās tās izpausmēs.

Kad visas galvenes ir lejupielādētas, pārbaudiet, vai tiek parādīts direktorijs /lib/modules/4.19.73-v7+ un tajā simboliskā saite norāda uz vietu, kur atrodas lejupielādētie faili (man tas ir /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

SagatavoÅ”anas posms ir pabeigts, jÅ«s varat sākt montāžu. Atkārtota moduļu salikÅ”ana prasa kādu laiku, Raspberry nav nekāds ātrs zvērs (tam ir 32bit 900Mhz Cortex ARM v7).
Tātad viss apkopots. Mēs instalējam draiveri 2. solÄ« (make install), vienlaikus kopējot vairāk programmaparatÅ«ras failu, kas nepiecieÅ”ami draivera darbÄ«bai:

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. daļa. Borna ultimāts

Ieslēdzu svilpi portā un... nekas nenotiek. Vai tas viss bija par velti?

Es sāku pētÄ«t failus projektā un vienā no tiem es atklāju, kāda bija problēma: draiveris norāda pilnu sarakstu ar VID/PID identifikatoriem, kurus tas var apkalpot. Un, lai mÅ«su ierÄ«ce darbotos ar Å”o draiveri, es failam vienkārÅ”i pievienoju savu ID 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 */
};

Es pārkompilēju draiveri un pārinstalēju to sistēmā.

Un Å”oreiz viss sākās. Iedegās adaptera indikators, un tÄ«kla saskarņu sarakstā parādÄ«jās jauna ierÄ«ce.

Skatot bezvadu saskarnes, tiek parādīts:

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

Bonuss tiem, kas izlasīja līdz galam

Atcerieties, kā es teicu, ka nav svarīgi, kāds maksimālais ātrums ir norādīts uz jūsu adaptera?
Tātad Malinkā (pirms 4. modeļa izlaiÅ”anas) visas ierÄ«ces (ieskaitot Ethernet adapteri) atrodas vienā USB kopnē. Lieliski, vai ne? Tāpēc usb kopnes joslas platums ir sadalÄ«ts starp visām tajā esoÅ”ajām ierÄ«cēm. Mērot ātrumu gan caur ethernet, gan caur usb wi-fi (pieslēgts 1 rÅ«terim) gan pa gaisu, gan pa vadu, tas bija ap 20Mbit/s.

PS Kopumā Ŕī rokasgrāmata draivera kompilÄ“Å”anai Å”im konkrētajam adapterim ir derÄ«ga ne tikai RPI. Pēc tam es to atkārtoju savā darbvirsmā ar Linux Mint - arÄ« tur viss darbojās. Jums vienkārÅ”i jālejupielādē nepiecieÅ”amie galvenes faili savai kodola versijai tādā paŔā veidā.

UPD. ZinoÅ”i cilvēki ieteica: lai nebÅ«tu atkarÄ«gs no kodola versijas, jums ir jāsavāc un jāinstalē draiveri, izmantojot dkms. Å Ä« opcija ir iekļauta arÄ« draivera lasāmmēs.

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. Ierosināts plāksteris ierÄ«ces ID tika pieņemts lwfinger/rtl8188eu repozitorija galvenajā atzarā.

atsauces
Sākot no RPi USB Wi-Fi adapteri
Sākot no Gitbub lwfinger/rtl8188eu
Sākot no usb.ids
Sākot no rpi-avots

Avots: www.habr.com