Wacha tufanye marafiki RaspberryPi na TP-Link TL-WN727N

Habari Habr!

Wakati mmoja niliamua kuunganisha raspberry yangu kwenye mtandao kwa njia ya hewa.

Punde si punde, kwa kusudi hili nilinunua filimbi ya wi-fi ya usb kutoka kwa kampuni inayojulikana ya TP-Link kutoka duka la karibu. Nitasema mara moja kwamba hii sio aina fulani ya moduli ya nano usb, lakini kifaa kikubwa kabisa, kuhusu ukubwa wa gari la kawaida la flash (au, ikiwa ungependa, ukubwa wa kidole cha index cha mtu mzima). Kabla ya kununua, nilifanya utafiti mdogo juu ya orodha ya watengenezaji wa filimbi wanaoungwa mkono kwa RPI na TP-Link ilikuwa kwenye orodha (walakini, kama ilivyotokea baadaye, sikuzingatia hila, kwa sababu shetani, kama tunavyojua. , iko katika maelezo). Kwa hivyo, hadithi baridi ya matukio yangu mabaya huanza; tunawasilisha kwa usikivu wako hadithi ya upelelezi katika sehemu 3. Kwa wale wanaopenda, tafadhali rejelea paka.

Kifungu Kuunganisha adapta ya WiFi ya WN727N kwa Ubuntu/Mint Ilinisaidia kwa kiasi, lakini mambo ya kwanza kwanza.

Masharti ya tatizo

Imetolewa:

  1. kompyuta ya bodi moja Raspberry Pi 2 B v1.1 - kipande 1
  2. usb wi-fi filimbi WN727N - 1 kipande
  3. jozi ya mikono isiyopotoka kabisa - vipande 2
  4. Raspbian ya hivi karibuni imewekwa kama OS (kulingana na Debian 10 Buster)
  5. toleo la kernel 4.19.73-v7+

Tafuta: unganisha kwenye Mtandao (Wi-Fi inasambazwa kutoka kwa kipanga njia chako cha nyumbani)

Baada ya kufungua adapta, nilisoma maagizo ndani:

Utangamano wa Mfumo: Windows 10/8/7/XP (hata anga, hata XP) na MacOS 10.9-10.13

Hmm, kama kawaida, hakuna neno kuhusu Linux. Ilikuwa 2k19, na madereva bado walihitaji kuunganishwa kwa mikono ...

Tulikuwa na watunzi 2, maktaba elfu 75, blobs tano za binary, nusu ya safu ya wanawake uchi na nembo na bahari nzima ya vichwa vya lugha zote na alama. Sio kwamba hii ni seti ya lazima kwa kazi. Lakini mara tu unapoanza kukusanya mfumo kwako mwenyewe, inakuwa ngumu kuacha. Kitu pekee kilichoniletea wasiwasi ni madereva ya wi-fi. Hakuna wanyonge, wasiowajibika na wala rushwa kuliko kujenga madereva kutoka chanzo. Lakini nilijua kwamba mapema au baadaye tungebadili takataka hizi.

Kwa ujumla, kama unavyojua, kugombana na usb wi-fi kwenye Linux ni chungu na isiyo na ladha kwa kiasi fulani (kama sushi ya Kirusi).

Sanduku pia lina CD na viendeshi. Bila tumaini kubwa ninaangalia kile kilicho juu yake - hakika hawajaitunza. Utafutaji wa Mtandao ulinileta kwenye tovuti ya mtengenezaji, lakini kuna kiendeshi cha Linux huko kwa ajili ya marekebisho ya kifaa pekee v4, na mikononi mwangu ilikuwa v5.21. Na zaidi ya hayo, kwa matoleo ya zamani sana ya kernel 2.6-3.16. Nikiwa nimekatishwa tamaa na kutofaulu hapo mwanzoni, tayari nilifikiria kwamba nilipaswa kuchukua TL-WN727N (ni ghali zaidi na inaweza kushughulikia 300Mbps dhidi ya 150 kwa yangu, lakini kama ilivyotokea, hii haijalishi hata kidogo. kwa raspberry, hii itaandikwa kuhusu baadaye). Lakini jambo muhimu zaidi ni kwamba madereva yake tayari yapo na yamewekwa tu kama kifurushi firmware-ralink. Kwa kawaida unaweza kuona masahihisho ya kifaa kwenye mwili wa kifaa kwenye kibandiko karibu na nambari ya ufuatiliaji.

Kuvinjari zaidi na kutembelea vikao mbali mbali hakujaleta nzuri sana. Inavyoonekana hakuna mtu kabla yangu ambaye amejaribu kuunganisha adapta kama hiyo kwa Linux. Hmm, nina bahati kama mtu aliyezama.

Ingawa, hapana, nasema uwongo, kutembelea majukwaa (haswa ya lugha ya Kiingereza) pia ilizaa matunda; katika mada zingine kulikuwa na kutajwa kwa Bw. lwfinger, ambaye ni maarufu kwa kuandika idadi ya madereva kwa adapta za Wi-Fi. . Hifadhi yake ya git iko mwisho wa kifungu kwenye viungo. Na somo la pili nililojifunza ni kwamba unahitaji kutambua kifaa chako ili kuelewa ni dereva gani anayefaa kwa hiyo.

Sehemu ya 1: Utambulisho wa Bourne

Wakati kifaa kilipoingizwa kwenye bandari, bila shaka, hakuna LED iliyowaka. Na kwa ujumla haijulikani kwa njia yoyote ikiwa kitu kinafanya kazi au la.

Kwanza kabisa, ili kujua ikiwa kernel inaona kifaa chetu, ninaangalia 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

Ilibadilika kuwa inaona, na ni wazi hata kuwa kuna chip ya Realtek na VID / PID ya kifaa yenyewe kwenye basi ya usb.

Twende mbele zaidi tuangalie lsusb, na hapa kushindwa kwingine kunatungoja

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

Mfumo haujui ni aina gani ya kifaa, na unaonyesha kwa aibu nafasi tupu badala ya jina (ingawa vendor=2357 hakika ni TP-Link).

Katika hatua hii, msomaji anayeuliza labda tayari amegundua kitu cha kufurahisha, lakini tutaiacha hadi wakati wetu.

Kutafiti tatizo la majina tupu kulinipeleka kwenye tovuti iliyo na vitambulisho, ambapo taarifa kuhusu VID/PID inayojulikana huingizwa. Yetu 2357:0111 haikuwepo. Kama aligeuka baadaye, shirika lsusb hutumia faili /usr/share/misc/usb.ids, ambayo ni orodha sawa ya vitambulisho kutoka kwa tovuti hii. Kwa uzuri wa onyesho, niliongeza tu mistari kwa muuzaji TP-Link kwenye mfumo wangu.

2357  TP-Link
        0111  TL-WN727N v5.21

Naam, tulirekebisha maonyesho katika orodha ya vifaa, lakini haikuleta hatua moja karibu na kuchagua dereva. Ili kuchagua kiendeshaji, unahitaji kujua filimbi yako imetengenezwa kwa kutumia chip gani. Majaribio yaliyofuata yasiyofanikiwa ya kujua hii kwenye mtandao hayakusababisha chochote kizuri. Nikiwa na bisibisi chembamba chembamba, niliondoa kwa uangalifu kofia ya adapta na ubongo mbovu wa Mjomba Liao unaonekana katika uchi wake wote. Chini ya glasi ya kukuza unaweza kuona jina la chip - RTL8188EUS. Hii tayari ni nzuri. Kwenye mabaraza mengine niliona machapisho ambayo dereva kutoka kwa bwana huyo huyo lwfinger anafaa kwa chip hii (ingawa anaandika tu kuhusu RTL8188EU).

Sehemu ya 2: Ukuu wa Bourne

Ninapakua vyanzo vya dereva kutoka kwa Git.

Ni wakati wa kusakinisha tena Windows na kufanya kile ambacho watumiaji wa Linux kwa kawaida huhusishwa nacho - kukusanya kitu kutoka kwa aina fulani. Kukusanya madereva, kama inavyotokea, hutofautiana kidogo na kuandaa programu:

make
sudo make install

lakini ili kuunda moduli za kernel tunahitaji faili za kichwa cha kernel kwa toleo letu maalum.

Kuna kifurushi kwenye hifadhi ya hisa vichwa vya raspberrypi-kernel, lakini ina toleo la kernel la faili 4.19.66-v7l+, na hiyo haitufai. Lakini kupata vichwa vya toleo linalohitajika, kama ilivyotokea, kuna zana inayofaa rpi-chanzo (kiungo mwishoni kwenye Github), ambayo unaweza kupakua vichwa muhimu. Tunaunganisha hazina, fanya hati iweze kutekelezwa, na kuiendesha. Uzinduzi wa kwanza unashindwa na kosa - hakuna matumizi bc. Kwa bahati nzuri, iko kwenye hazina na tunaisakinisha tu.

sudo apt-get install bc

Baada ya hayo, kuanzisha upya na kupakua vichwa vya habari (na kisha kuanzisha kitu, sikumbuki sasa) inachukua muda na unaweza kukaa kwenye kiti chako, Windows imekuwa bora katika maonyesho yake yote.

Baada ya vichwa vyote kupakuliwa, angalia kwamba saraka inaonekana /lib/modules/4.19.73-v7+ na ndani yake ulinganifu unaelekeza mahali faili zilizopakuliwa ziko (kwangu mimi ni /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

Hatua ya maandalizi imekamilika, unaweza kuanza mkusanyiko. Kukusanya moduli tena inachukua muda, Raspberry sio mnyama wa haraka (ina 32bit 900Mhz Cortex ARM v7).
Kwa hivyo kila kitu kilikusanywa. Tunasanikisha dereva katika hatua ya 2 (fanya kusakinisha), huku pia tunakili faili zaidi za firmware zinazohitajika kwa dereva kufanya kazi:

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

Sehemu ya 3. The Bourne Ultimatum

Ninaingiza filimbi kwenye bandari na ... hakuna kinachotokea. Je, yote yalikuwa bure?

Ninaanza kusoma faili ndani ya mradi na katika moja yao napata shida ilikuwa nini: dereva anataja orodha kamili ya vitambulisho vya VID/PID ambavyo vinaweza kutumika. Na ili kifaa chetu kifanye kazi na dereva huyu, niliongeza tu kitambulisho changu kwenye faili 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 */
};

Nilikusanya tena dereva na kuiweka tena kwenye mfumo.

Na wakati huu kila kitu kilianza. Nuru kwenye adapta iliwaka na kifaa kipya kilionekana kwenye orodha ya miingiliano ya mtandao.

Kuangalia miingiliano isiyo na waya inaonyesha yafuatayo:

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

Bonasi kwa wale wanaosoma hadi mwisho

Kumbuka jinsi nilivyosema kuwa haijalishi kasi ya juu imesemwa kwenye adapta yako?
Kwa hiyo, kwenye Malinka (kabla ya kutolewa kwa mfano wa 4), vifaa vyote (ikiwa ni pamoja na adapta ya ethernet) hukaa kwenye basi moja ya usb. Kubwa, sawa? Na kwa hiyo bandwidth ya basi ya usb imegawanywa kati ya vifaa vyote juu yake. Wakati wa kupima kasi kupitia ethaneti na kupitia usb wi-fi (iliyounganishwa kwenye kipanga njia 1) kwa hewa na kwa waya, ilikuwa karibu 20Mbit/s.

PS Kwa ujumla, mwongozo huu wa kuandaa kiendeshi kwa adapta hii ni halali si kwa RPI pekee. Kisha niliirudia kwenye eneo-kazi langu na Linux Mint - kila kitu kilifanya kazi huko pia. Unahitaji tu kupakua faili muhimu za kichwa kwa toleo lako la kernel kwa njia ile ile.

UPD. Watu wenye ujuzi walipendekeza: ili usitegemee toleo la kernel, unahitaji kukusanya na kufunga madereva kwa kutumia dkms. Usomaji wa dereva pia una chaguo hili.

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. Imependekezwa kiraka kwa kitambulisho cha kifaa kilikubaliwa katika tawi kuu la hazina ya lwfinger/rtl8188eu.

marejeo
- Adapta za Wi-Fi za USB za RPi
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-chanzo

Chanzo: mapenzi.com