Gəlin RaspberryPi ilə TP-Link TL-WN727N ilə dost olaq

Hey Habr!

Mən bir dəfə moruqumu havadan İnternetə qoşmaq qərarına gəldim.

Bu məqsədlə ən yaxın mağazadan məşhur TP-Link şirkətindən usb wi-fi fiti aldım. Dərhal deyəcəyəm ki, bu bir növ nano usb modulu deyil, adi bir flash sürücünün ölçüsündə (və ya istəsəniz, yetkin kişinin şəhadət barmağının ölçüsündə) olduqca böyük bir cihazdır. Satın almadan əvvəl mən RPI və TP-Link üçün dəstəklənən fit istehsalçılarının siyahısında kiçik bir araşdırma etdim (lakin sonradan məlum oldu ki, incəlikləri nəzərə almadım, çünki şeytan bildiyimiz kimi , təfərrüatlarda var). Beləliklə, mənim bədbəxtliklərimin soyuq nağılı başlayır; 3 hissədən ibarət bir detektiv hekayəni diqqətinizə təqdim edirik. Maraqlananlar üçün pişiyə müraciət edin.

Maddə WN727N WiFi adapterinin Ubuntu/Mint-ə qoşulması Bu mənə qismən kömək etdi, amma ilk növbədə.

Problemin şərtləri

Verilənlər:

  1. tək lövhəli kompüter Raspberry Pi 2 B v1.1 – 1 ədəd
  2. usb wi-fi fit WN727N - 1 ədəd
  3. olduqca əyri olmayan bir cüt əl - 2 ədəd
  4. Ən son Raspbian əməliyyat sistemi kimi quraşdırılıb (Debian 10 Buster əsasında)
  5. nüvə versiyası 4.19.73-v7+

Tapın: İnternetə qoşulun (Wi-Fi ev marşrutlaşdırıcınızdan paylanır)

Adapteri qablaşdırmadan çıxardıqdan sonra içindəki təlimatları oxudum:

Sistem Uyğunluğu: Windows 10/8/7/XP (hətta göy, hətta XP) və MacOS 10.9-10.13

Hmm, həmişə olduğu kimi, Linux haqqında bir söz deyil. 2k19 idi və sürücüləri hələ də əl ilə yığmaq lazım idi...

Bizimlə 2 tərtibatçı, 75 min kitabxana, beş binar blob, loqotipi olan yarım çılpaq qadın massivi və bütün dillərin və işarələrin başlıqlarının bütün dənizi var idi. Bu iş üçün lazımlı dəst deyil. Ancaq özünüz üçün bir sistem yığmağa başladıqdan sonra onu dayandırmaq çətinləşir. Məni narahat edən yeganə şey wi-fi üçün sürücülər idi. Sürücüləri mənbədən qurmaq qədər aciz, məsuliyyətsiz və korrupsioner bir şey yoxdur. Amma bilirdim ki, gec-tez bu zibilliyə keçəcəyik.

Ümumiyyətlə, bildiyiniz kimi, Linux-da usb wi-fi ilə məşğul olmaqdır ağrılı və bir qədər dadsız (Rus suşi kimi).

Qutuda həmçinin sürücüləri olan CD var. Çox ümid etmədən üzərindəkilərə baxıram - onlar mütləq bununla maraqlanmayıblar. İnternet axtarışı məni istehsalçının veb saytına gətirdi, lakin orada yalnız cihazın təftişi üçün Linux sürücüsü var v4, və qucağımda idi v5.21. Bundan əlavə, çox köhnə kernel versiyaları üçün 2.6-3.16. Başlanğıcda uğursuzluqdan məyus olmuşdum, mən artıq TL-WN727N almalı olduğumu düşündüm (bu, bir az daha bahalıdır və mənim üçün 300-yə qarşı 150Mbps-ni idarə edə bilər, amma məlum oldu ki, bunun heç bir əhəmiyyəti yoxdur. moruq üçün, bu barədə sonra yazılacaq). Ancaq ən vacibi odur ki, bunun üçün drayverlər artıq mövcuddur və sadəcə paket şəklində quraşdırılmışdır firmware-ralink. Siz adətən cihazın gövdəsində seriya nömrəsinin yanındakı stikerdə cihazın təftişinə baxa bilərsiniz.

Daha çox axtarış və müxtəlif forumlara baş çəkmək çox yaxşı nəticə vermədi. Görünür, məndən əvvəl heç kim belə bir adapteri Linux-a qoşmağa cəhd etməyib. Hmm, mən boğulan adam kimi şanslıyam.

Baxmayaraq ki, yox, yalan deyirəm, forumlara (əsasən ingilisdillilərə) baş çəkmək də öz bəhrəsini verdi, bəzi mövzularda Wi-Fi adapterləri üçün bir sıra drayverlər yazmaqla məşhur olan müəyyən bir cənab Lvfingerin adı çəkildi. . Onun git deposu bağlantılardakı məqalənin sonundadır. Öyrəndiyim ikinci dərs odur ki, hansı sürücünün ona uyğun ola biləcəyini başa düşmək üçün cihazınızı müəyyən etməlisiniz.

1-ci hissə: Bourne şəxsiyyəti

Cihaz porta qoşulduqda, əlbəttə ki, heç bir LED yanmırdı. Və ümumiyyətlə, bir şeyin işlək olub-olmaması heç bir şəkildə aydın deyil.

Əvvəla, nüvənin cihazımızı görüb-görmədiyini öyrənmək üçün dmesg-ə baxıram:

[  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

Məlum oldu ki, görür və hətta aydın olur ki, usb avtobusunda Realtek çipi və cihazın özünün VID/PID kodu var.

Gəlin daha da irəli gedək və baxaq lsusb, və burada bizi daha bir uğursuzluq gözləyir

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

Sistem onun hansı cihaz olduğunu bilmir və utancaqlıqla adın yerinə boş yer göstərir (baxmayaraq ki, satıcı=2357 mütləq TP-Linkdir).

Bu mərhələdə maraqlanan oxucu, yəqin ki, artıq maraqlı bir şey görüb, amma biz bunu öz dövrümüzə buraxacağıq.

Boş adlar problemini araşdırmaq məni identifikatorları olan sayta apardı, orada məlum VID/PID haqqında məlumat daxil edilir. Bizim 2357:0111 orada yox idi. Daha sonra məlum oldu ki, kommunal lsusb fayldan istifadə edir /usr/share/misc/usb.ids, bu saytdan eyni identifikator siyahısıdır. Ekranın gözəlliyi üçün mən sadəcə sistemimdə satıcı TP-Link üçün xətlər əlavə etdim.

2357  TP-Link
        0111  TL-WN727N v5.21

Yaxşı, biz cihazlar siyahısında displeydə düzəliş etdik, lakin bu, bizi sürücü seçməyə bir addım da yaxınlaşdırmadı. Sürücü seçmək üçün fitinizin hansı çipdə hazırlandığını bilməlisiniz. Bunu İnternetdə tapmaq üçün növbəti uğursuz cəhdlər yaxşı bir şeyə səbəb olmadı. İncə yivli tornavida ilə silahlanmış adapterin qapağını ehtiyatla çıxarıram və Liao dayının qəddar düşüncəsi bütün çılpaqlığı ilə görünür. Böyüdücü şüşənin altında çipin adını görə bilərsiniz - RTL8188EUS. Bu artıq yaxşıdır. Bəzi forumlarda eyni centlmen lwfinger sürücüsünün bu çip üçün yaxşı uyğunlaşdığına dair yazılar gördüm (yalnız RTL8188EU haqqında yazsa da).

2-ci hissə: Bourne üstünlüyü

Git-dən sürücü mənbələrini yükləyirəm.

Windows-u yenidən quraşdırmağın və Linux istifadəçilərinin adətən əlaqəli olduğu şeyləri - bəzi növlərdən nəyisə yığmağın vaxtıdır. Sürücülərin yığılması, göründüyü kimi, proqramların tərtib edilməsindən çox az fərqlənir:

make
sudo make install

lakin nüvə modullarını tərtib etmək üçün xüsusi versiyamız üçün kernel başlıq fayllarına ehtiyacımız var.

Anbarda paket var raspberrypi-kernel-headers, lakin o, faylların nüvə versiyasını ehtiva edir 4.19.66-v7l+və bu bizə yaraşmır. Ancaq tələb olunan versiyanın başlıqlarını əldə etmək üçün, məlum oldu ki, rahat bir vasitə var rpi-mənbə (Github-da sonunda link), lazımi başlıqları yükləyə bilərsiniz. Biz deponu klonlayırıq, skripti icra edilə bilən hala gətiririk və onu işə salırıq. İlk işə salınma bir səhv ilə uğursuz oldu - heç bir yardım proqramı yoxdur bc. Xoşbəxtlikdən, o, depodadır və biz onu sadəcə quraşdırırıq.

sudo apt-get install bc

Bundan sonra, başlıqları yenidən başlatmaq və yükləmək (və sonra bir şey qurmaq, indi xatırlamıram) bir az vaxt tələb edir və geri otura bilərsiniz və Windows bütün təzahürlərində daha yaxşı hala gəldi.

Bütün başlıqlar yükləndikdən sonra kataloqun göründüyünü yoxlayın /lib/modules/4.19.73-v7+ və orada simvolik keçid yüklənmiş faylların yerləşdiyi yerə işarə edir (mənim üçün bu /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

Hazırlıq mərhələsi tamamlandı, montaja başlaya bilərsiniz. Modulların yenidən yığılması bir az vaxt tələb edir, Raspberry sürətli heyvan deyil (32bit 900Mhz Cortex ARM v7 var).
Beləliklə, hər şey yığıldı. Sürücünü 2-ci addımda quraşdırırıq (quraşdırın), eyni zamanda sürücünün işləməsi üçün lazım olan daha çox proqram faylını kopyalayırıq:

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

Hissə 3. Bourne Ultimatumu

Mən fiti porta qoyuram və... heç nə olmur. Bütün bunlar boş yerə idi?

Mən layihə daxilindəki faylları öyrənməyə başlayıram və onlardan birində problemin nə olduğunu tapıram: sürücü xidmət edə biləcəyi VID/PID identifikatorlarının tam siyahısını müəyyən edir. Və cihazımızın bu sürücü ilə işləməsi üçün mən sadəcə olaraq id-i fayla əlavə etdim 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 */
};

Sürücünü yenidən tərtib etdim və sistemə yenidən quraşdırdım.

Və bu dəfə hər şey başladı. Adapterin işığı yandı və şəbəkə interfeysləri siyahısında yeni cihaz göründü.

Simsiz interfeyslərə baxmaq aşağıdakıları göstərir:

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

Sona qədər oxuyanlar üçün bonus

Yadınızdadırsa, adapterinizdə hansı maksimum sürətin göstərildiyinin əhəmiyyəti yoxdur demişdim?
Beləliklə, Malinka-da (4-cü modelin buraxılmasından əvvəl) bütün qurğular (ethernet adapteri daxil olmaqla) eyni usb avtobusunda oturur. Əla, hə? Və buna görə də usb avtobusunun bant genişliyi üzərindəki bütün cihazlar arasında bölünür. Həm ethernet vasitəsilə, həm də usb wi-fi (1 marşrutlaşdırıcıya qoşulmuş) vasitəsilə həm hava, həm də naqillə sürəti ölçəndə 20Mbit/s civarında idi.

PS Ümumiyyətlə, bu xüsusi adapter üçün sürücü tərtib etmək üçün bu təlimat yalnız RPI üçün etibarlı deyil. Sonra Linux Mint ilə masaüstümdə təkrarladım - hər şey orada da işlədi. Siz eyni şəkildə öz nüvə versiyanız üçün lazım olan başlıq fayllarını yükləməlisiniz.

UPD. Bilikli insanlar təklif etdilər: kernel versiyasından asılı olmamaq üçün dkms istifadə edərək drayverləri toplamaq və quraşdırmaq lazımdır. Sürücü üçün Readme də bu seçimi ehtiva edir.

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. Təklif olunur yamaq cihaz id-si lwfinger/rtl8188eu repozitoriyasının əsas filialına qəbul edildi.

References
- RPi USB Wi-Fi Adapterləri
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-mənbə

Mənbə: www.habr.com