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

Հե՜յ Հաբր։

Մի անգամ որոշեցի ազնվամորիս միացնել ինտերնետին օդով:

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

հոդված 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 (նույնիսկ երկինք, նույնիսկ XP) և MacOS 10.9-10.13

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

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

Ընդհանրապես, ինչպես գիտեք, Linux-ում usb wi-fi-ի հետ շփվելն է ցավոտ և որոշ չափով անճաշակ (ինչպես ռուսական սուշի):

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

Հետագա գուգլելը և տարբեր ֆորումներ այցելելը շատ լավ բան չբերեց: Ըստ երևույթին, ինձնից առաջ ոչ ոք չի փորձել նման ադապտեր միացնել Linux-ին: Հմմ, ես խեղդված մարդու պես բախտավոր եմ։

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

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

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

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

Համակարգը չգիտի, թե դա ինչ տեսակի սարք է, և ամոթխած կերպով անունի փոխարեն դատարկ տարածություն է ցույց տալիս (չնայած se 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-ն արագ գազան չէ (այն ունի 32 բիթ 900 ՄՀց 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

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

Հիշո՞ւմ եք, թե ինչպես ասացի, որ կարևոր չէ, թե ինչ առավելագույն արագություն է նշված ձեր ադապտերի վրա:
Այսպիսով, Malinka-ի վրա (մինչև 4-րդ մոդելի թողարկումը) բոլոր սարքերը (ներառյալ ethernet ադապտերը) նստում են նույն USB ավտոբուսի վրա: Հիանալի, ճիշտ է: Եվ, հետևաբար, USB ավտոբուսի թողունակությունը բաժանվում է դրա վրա գտնվող բոլոր սարքերի միջև: Արագությունը թե՛ ethernet-ի, թե՛ usb wi-fi-ի միջոցով (միացված 1 երթուղիչին) չափելիս թե՛ օդային, թե՛ լարով, այն եղել է մոտ 20 Մբիթ/վրկ։

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

UPD. Գիտակ մարդիկ առաջարկեցին՝ միջուկի տարբերակից կախված չլինելու համար պետք է հավաքել և տեղադրել դրայվերներ՝ օգտագործելով 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 սարքի ID-ն ընդունվել է lwfinger/rtl8188eu պահեստի հիմնական մասնաճյուղում:

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

Source: www.habr.com