Եկեք ընկերանանք RaspberryPi TP-Link TL-WN727N-ի հետ

Հե՜յ Հաբր։

Մի անգամ որոշեցի իմ Raspberry Pi-ն միացնել ինտերնետին անլար կապի միջոցով։

Ասվածից անմիջապես հետո, այս նպատակով մոտակա խանութում գնվեց հայտնի TP-Link ընկերության USB Wi-Fi սուլիչ։ Ես անմիջապես կասեմ, որ սա ինչ-որ նանո USB մոդուլ չէ, այլ բավականին մեծ սարք, մոտավորապես սովորական ֆլեշ կրիչի չափի (կամ, եթե նախընտրում եք, մեծահասակ տղամարդու ցուցամատի չափի): Գնելուց առաջ ես մի փոքր ուսումնասիրեցի RPI-ի համար աջակցվող սուլիչների արտադրողների ցանկը, և TP-Link-ը այդ ցուցակում էր (չնայած, ինչպես պարզվեց ավելի ուշ, ես հաշվի չէի առել նրբությունները, քանի որ սատանան, ինչպես գիտենք, մանրամասների մեջ է): Այսպիսով, սկսվում է իմ դժբախտությունների սառը պատմությունը, ձեր ուշադրությանն է ներկայացվում 3 մասից բաղկացած դետեկտիվ պատմություն։ Հետաքրքրվողները, խնդրում եմ, կարդան կտրվածքի տակ։

հոդված WN727N WiFi ադապտեր միացնելով Ubuntu/Mint-ին Դա ինձ մասամբ օգնեց, բայց առաջին հերթին՝ ամեն ինչ։

Խնդրի ձևակերպում

Տրված է.

  1. Միատախտակային համակարգիչ Raspberry Pi 2 B v1.1 - 1 հատ
  2. USB Wi-Fi սուլիչ WN727N - 1 հատ
  3. մի զույգ ոչ այնքան ծուռ ձեռքեր՝ 2 հատ
  4. Վերջին Raspbian-ը (հիմնված Debian 10 Buster-ի վրա) տեղադրված է որպես օպերացիոն համակարգ։
  5. միջուկի տարբերակ 4.19.73-v7+

Գտնել. միանալ ինտերնետին (Wi-Fi-ը տարածվում է տնային ռաութերից)

Ադապտերը բացելուց հետո ես կարդացի ներսում գրված հրահանգները.

Համակարգի համատեղելիություն՝ Windows 10/8/7/XP (նույնիսկ Sky, նույնիսկ XP) և MacOS 10.9-10.13

Դե, ինչպես միշտ, Linux-ի մասին ոչ մի խոսք։ 2k19 էր, բայց դրայվերները դեռ պետք է ձեռքով կոմպիլյացվեին...

Մենք մեզ հետ ունեինք 2 կոմպիլյատոր, 75 հազար գրադարան, հինգ երկուական բլոկ, մերկ կանանց կես զանգված՝ լոգոտիպով, և բոլոր լեզուների ու նշագրումների վերնագրերի մի ամբողջ ծով։ Ոչ թե դա աշխատանքի համար անհրաժեշտ հավաքածու էր։ Բայց երբ սկսում ես ինքներդ համակարգ հավաքել, դժվար է դառնում դադարեցնել այն։ Միակ բանը, որ ինձ անհանգստացնում էր, Wi-Fi-ի դրայվերներն էին։ Ավելի անօգնական, անպատասխանատու և կոռումպացված բան չկա, քան դրայվերներ ստեղծելը սկզբնաղբյուրից։ Բայց ես գիտեի, որ վաղ թե ուշ մենք կանցնենք այս անպետքությանը։

Ընդհանուր առմամբ, ինչպես հայտնի է, Linux-ում USB Wi-Fi-ով խաղալը... ցավոտ և մի փոքր անճաշակ (ինչպես ռուսական սուշին):

Տուփի մեջ կա նաև CD՝ դրայվերներով։ Ես առանց մեծ հույսի նայում եմ դրա վրա եղածին. նրանք անպայման չեն հոգացել դրա մասին։ Ինտերնետում որոնումը ինձ տարավ արտադրողի կայք, բայց այնտեղ կա միայն Linux դրայվեր՝ սարքի վերանայման համար։ v4, և ես այն ձեռքերումս ունեի v5.21. Եվ նաև շատ հին kernel տարբերակների համար՝ 2.6-3.16: Սկզբում ձախողումից հուսահատված՝ ես արդեն մտածում էի, որ պետք է վերցնեմ TL-WN727N-ը (այն մի փոքր ավելի թանկ է և կարող է ապահովել 300 Մբ/վ արագություն իմ 150-ի դիմաց, բայց, ինչպես պարզվեց, սա բացարձակապես կարևոր չէ Raspberry Pi-ի համար, դրա մասին կգրեմ ավելի ուշ): Բայց ամենակարևորն այն է, որ դրա համար նախատեսված դրայվերներն արդեն գոյություն ունեն և պարզապես տեղադրվում են որպես փաթեթ։ firmware-ralink. Սարքի վերանայված տարբերակը սովորաբար կարող եք տեսնել սարքի կորպուսի վրա՝ սերիական համարի կողքին գտնվող պիտակի վրա։

Հետագա Google-ում որոնումները և տարբեր ֆորումներ այցելելը ոչ մի լավ բան չբերեցին։ Պարզվում է՝ ինձնից առաջ ոչ ոք չէր փորձել այս կոնկրետ ադապտերը միացնել Linux-ին։ Դե, ես նույնքան բախտավոր եմ, որքան խեղդված մարդը։

Չնայած ոչ, ստում եմ, ֆորումներ այցելելը (հիմնականում անգլերեն լեզվով) նույնպես արդյունք տվեց, որոշ թեմաներում հիշատակվում էր ոմն պարոն լվֆինգերի մասին, որը հայտնի է Wi-Fi ադապտերների համար մի շարք դրայվերներ գրելով։ Նրա git պահոցը հոդվածի վերջում՝ հղումներում է։ Եվ երկրորդ դասը, որ ես սովորեցի, այն է, որ դուք պետք է նույնականացնեք ձեր սարքը՝ հասկանալու համար, թե որ դրայվերն է հարմար դրա համար։

Մաս 1. Բորնի ինքնությունը

Երբ սարքը միացրի միացքին, իհարկե, ոչ մի LED չվառվեց։ Եվ ընդհանրապես, ոչ մի կերպ պարզ չէ՝ ինչ-որ բան աշխատում է, թե ոչ։

Առաջին բանը, որ ես անում եմ՝ պարզելու համար, թե արդյոք միջուկը տեսնում է մեր սարքը, 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

Պարզվեց, որ այն տեսնում է այն, և նույնիսկ պարզ է, որ USB միակցիչի վրա կա Realtek չիպ և սարքի VID/PID-ը։

Եկեք առաջ շարժվենք և նայենք լսուսբև ահա մեզ սպասում է ևս մեկ անհաջողություն

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

Համակարգը չգիտի, թե ինչ տեսակի սարք է դա, և ամաչկոտորեն անվան փոխարեն դատարկ տարածություն է ցույց տալիս (չնայած vendor=2357-ը անկասկած TP-Link-ն է):

Այս պահին հետաքրքրասեր ընթերցողը, հավանաբար, արդեն նկատած կլինի ինչ-որ հետաքրքիր բան, բայց մենք դա կհետաձգենք մինչև հարմար ժամանակը։

Դատարկ անվանման խնդրի ուսումնասիրությունը ինձ տարավ նույնականացուցիչներով մի կայք, որտեղ մուտքագրվում են հայտնի VID/PID-ների վերաբերյալ տեղեկություններ։ Մեր 2357:0111-ը այնտեղ չէր։ Ինչպես ավելի ուշ պարզվեց, կոմունալ ծառայությունը լսուսբ օգտագործում է ֆայլը /usr/share/misc/usb.ids, որը այս կայքի նույնականացուցիչների ցանկն է։ Էկրանն ավելի գեղեցիկ դարձնելու համար ես պարզապես TP-Link մատակարարի համար տողեր ավելացրի իմ համակարգում։

2357  TP-Link
        0111  TL-WN727N v5.21

Դե, մենք շտկեցինք սարքերի ցանկի էկրանը, բայց դա մեզ ավելի մոտ չդարձրեց դրայվեր ընտրելուն։ Վարորդ ընտրելու համար դուք պետք է իմանաք, թե ինչ չիպի վրա է պատրաստված ձեր սուլիչը։ Ինտերնետում սա պարզելու հետագա անհաջող փորձերը ոչ մի լավ բանի չհանգեցրին։ Բարակ ակոսավոր պտուտակահանով զինված՝ զգուշորեն հանում եմ ադապտերի կափարիչը, և հայացքս իր ողջ անաղարտ մերկությամբ ներկայացվում է Լիաո քեռու չարագործին։ Խոշորացույցի տակ կարող եք տեսնել չիպի անունը՝ RTL8188EUS. Սա արդեն լավ է։ Որոշ ֆորումներում ես տեսա գրառումներ, որ նույն պարոն lwfinger-ի դրայվերը լավ է համապատասխանում այս չիպին (չնայած նա գրել է միայն RTL8188EU-ի մասին):

Մաս 2. Բորնի գերակայությունը

Ես դրայվերի կոդը ներբեռնում եմ git-ից։

Ժամանակն է վերագործարկել Windows-ը և անել այն, ինչի հետ սովորաբար կապված են Linux-ի օգտատերերը՝ ինչ-որ բան հավաքել աղբյուրներից։ Դրայվերների կառուցումը, ինչպես պարզվեց, շատ չի տարբերվում ծրագրերի կազմումից.

make
sudo make install

բայց միջուկի մոդուլները կազմելու համար մեզ անհրաժեշտ են մեր կոնկրետ տարբերակի միջուկի վերնագրի ֆայլերը։

Պահեստում կա փաթեթ raspberrypi-kernel-headers, բայց այն պարունակում է ֆայլերի միջուկի տարբերակը 4.19.66-v7l+, և սա մեզ չի համապատասխանում։ Բայց անհրաժեշտ տարբերակի վերնագրերը ստանալու համար, ինչպես պարզվեց, կա հարմար գործիք rpi-աղբյուր (հղումը վերջում է github-ում), որի միջոցով կարող եք ներբեռնել անհրաժեշտ վերնագրերը։ Մենք կլոնավորում ենք պահոցը, դարձնում սկրիպտը կատարվող և գործարկում այն։ Առաջին մեկնարկը ձախողվում է սխալի պատճառով՝ օգտակարություն չկա bc. Բարեբախտաբար, այն պահոցում է, և մենք պարզապես տեղադրում ենք այն։

sudo apt-get install bc

Դրանից հետո վերագործարկումը և վերնագրերի ներբեռնումը (և հետո ինչ-որ բան կարգավորելը, հիմա չեմ հիշում) որոշ ժամանակ է պահանջում, և դուք կարող եք հարմարավետ նստել ձեր աթոռին, Windows-ը դարձել է ավելի լավը իր բոլոր դրսևորումներով։

Բոլոր վերնագրերը ներբեռնելուց հետո ստուգեք, որ գրացուցակը հայտնվել է /lib/modules/4.19.73-v7+ և դրանում սիմվոլիկ հղումը ցույց է տալիս ներբեռնված ֆայլերի գտնվելու վայրը (ինձ համար դա /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

Նախապատրաստական ​​​​փուլն ավարտված է, կարող եք սկսել հավաքը: Մոդուլների հավաքումը կրկին որոշակի ժամանակ է պահանջում, Raspberry Pi-ն արագաշարժ չէ (այն ունի 32բիթանոց 900Mhz Cortex ARM v7 պրոցեսոր):
Այսպիսով, ամեն ինչ հավաքված է։ Մենք տեղադրում ենք դրայվերը 2-րդ քայլում (կատարել տեղադրում), միաժամանակ պատճենվում են դրայվերի աշխատանքի համար անհրաժեշտ որոնվածի ֆայլերը.

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. Բորնի վերջնագիրը

Ես սուլիչը մտցնում եմ նավահանգստի մեջ և... ոչինչ չի պատահում։ Ամբողջը ապարդյուն էր՞

Ես սկսեցի ուսումնասիրել նախագծի ներսում գտնվող ֆայլերը, և դրանցից մեկում գտա խնդիրը. դրայվերը նշում է VID/PID նույնականացուցիչների ամբողջական ցանկը, որոնք կարող է սպասարկել։ Եվ որպեսզի մեր սարքը աշխատի այս դրայվերի հետ, ես պարզապես ավելացրեցի իմ 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 */
};

Վերակազմավորեցի դրայվերը և վերստին տեղադրեցի այն համակարգում։

Եվ այս անգամ ամեն ինչ սկսեց աշխատել։ Ադապտերի լույսը վառվեց, և ցանցային ինտերֆեյսների ցանկում հայտնվեց նոր սարք։

Անլար ինտերֆեյսների դիտումը ցույց է տալիս հետևյալը.

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

Բոնուս նրանց համար, ովքեր մինչև վերջ կարդային

Հիշո՞ւմ եք, թե ինչպես ասացի, որ կարևոր չէ, թե ձեր ադապտերի վրա որքան առավելագույն արագություն է նշված։
Այսպիսով, Raspberry Pi-ի վրա (մինչև մոդել 4-ի թողարկումը) բոլոր սարքերը (ներառյալ Ethernet ադապտերը) տեղակայված էին մեկ USB ավտոբուսի վրա։ Շատ լավ է, չէ՞։ Եվ, հետևաբար, USB ավտոբուսի թողունակությունը բաժանված է դրա վրա գտնվող բոլոր սարքերի միջև: Ethernet-ի, USB Wi-Fi-ի (միացված 1 ռաութերի) և օդային ու լարային կապի միջոցով արագությունը չափելիս այն ցույց տվեց մոտ 20 Մբիթ/վրկ։

Հ.Գ. Ընդհանուր առմամբ, այս կոնկրետ ադապտերի համար դրայվեր կազմելու այս ուղեցույցը վավեր է ոչ միայն RPI-ի համար։ Այնուհետև ես կրկնեցի այն իմ համակարգչի վրա Linux Mint-ով. այնտեղ էլ ամեն ինչ աշխատեց։ Դուք պարզապես պետք է նույն ձևով ներբեռնեք ձեր օգտագործած միջուկի տարբերակի համար անհրաժեշտ վերնագրի ֆայլերը։

Թարմացված տարբերակ։ Գիտակ մարդիկ առաջարկեցին. որպեսզի կախված չլինեք միջուկի տարբերակից, անհրաժեշտ է կոմպիլյացիա անել և տեղադրել դրայվերներ՝ օգտագործելով dkms: Այս տարբերակը նաև դրայվերի readme-ում է։

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. Առաջարկված patch for device id-ն ընդունվել է lwfinger/rtl8188eu պահոցի հիմնական մասնաճյուղում։

Սայլակ
- RPi USB Wi-Fi ադապտերներ
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-աղբյուր

Source: www.habr.com