Ni amikigu RaspberryPi kun TP-Link TL-WN727N

Hej Habr!

Mi iam decidis konekti mian frambon al Interreto per la aero.

Tuj dirite ol farite, tiucele mi aĉetis usb-wifi-fajfilon de la konata firmao TP-Link de la plej proksima vendejo. Mi tuj diros, ke ĉi tio ne estas ia nano-usb-modulo, sed sufiĉe granda aparato, proksimume la grandeco de regula poŝmemoro (aŭ, se vi volas, la grandeco de montrofingro de plenkreskulo). Antaŭ ol aĉeti, mi iom esploris la liston de subtenataj fajfilfabrikistoj por RPI kaj TP-Link estis en la listo (tamen, kiel montriĝis poste, mi ne konsideris la subtilaĵojn, ĉar la diablo, kiel ni scias. , estas en la detaloj). Do komenciĝas la malvarma rakonto pri miaj misaventuroj; ni prezentas al via atento detektivan rakonton en 3 partoj. Por interesatoj, bonvolu raporti al kato.

Artikolo Konektante la WiFi-adaptilon WN727N al Ubuntu/Mint Ĝi helpis min parte, sed unue.

Kondiĉoj de la problemo

Donita:

  1. ununura tabulo komputilo Raspberry Pi 2 B v1.1 - 1 peco
  2. usb wi-fi-fajfilo WN727N - 1 peco
  3. paro da ne tute kurbaj manoj - 2 pecoj
  4. La plej nova Raspbian estas instalita kiel la OS (bazita sur Debian 10 Buster)
  5. kerna versio 4.19.73-v7+

Trovu: konekti al la Interreto (Wi-Fi estas distribuita de via hejma enkursigilo)

Post malpakaĵo de la adaptilo, mi legis la instrukciojn ene:

Sistemkongruo: Vindozo 10/8/7/XP (eĉ la ĉielo, eĉ XP) kaj MacOS 10.9-10.13

Hmm, kiel kutime, eĉ unu vorton pri Linukso. Ĝi estis 2k19, kaj la ŝoforoj ankoraŭ devis esti kunvenitaj permane...

Ni havis kun ni 2 kompililojn, 75 mil bibliotekojn, kvin binarajn blobojn, duonan aron da nudaj virinoj kun emblemo kaj tutan maron da kaplinioj de ĉiuj lingvoj kaj markoj. Ne tio ĉi estas necesa aro por la laboro. Sed kiam vi komencas kunmeti sistemon por vi mem, fariĝas malfacile ĉesi. La sola afero, kiu kaŭzis min maltrankvilon, estis la ŝoforoj por wi-fi. Estas nenio pli senhelpa, nerespondeca kaj korupta ol konstrui ŝoforojn el la fonto. Sed mi sciis, ke pli aŭ malpli frue ni transiros al ĉi tiu rubo.

Ĝenerale, kiel vi scias, ludi kun usb-vifio en Linukso estas dolora kaj iom sengusta (kiel rusa suŝio).

La skatolo enhavas ankaŭ KD kun ŝoforoj. Sen multe da espero mi rigardas kio estas sur ĝi - ili certe ne prizorgis ĝin. Interreta serĉo venigis min al la retejo de la fabrikanto, sed ekzistas Linukso-ŝoforo tie nur por revizio de aparato v4, kaj en miaj brakoj estis v5.21. Kaj krome, por tre malnovaj kernaj versioj 2.6-3.16. Senkuraĝigita de la malsukceso ĉe la komenco, mi jam pensis, ke mi devus preni la TL-WN727N (ĝi estas iom pli multekosta kaj povas manipuli 300Mbps kontraŭ 150 por mia, sed kiel montriĝis, tio tute ne gravas. por la frambo, pri tio oni skribos poste). Sed la plej grava afero estas, ke ŝoforoj por ĝi jam ekzistas kaj estas simple instalitaj kiel pakaĵo firmware-ralink. Vi kutime povas vidi la aparaton revizion sur la aparato korpo sur glumarko apud la seria numero.

Plue guglado kaj vizitado de diversaj forumoj ne alportis multe da bono. Ŝajne neniu antaŭ mi provis konekti tian adaptilon al Linukso. Hmm, mi estas tiel bonŝanca kiel droninto.

Kvankam, ne, mi mensogas, ankaŭ la vizitado de forumoj (plejparte anglalingvaj) donis frukton;en kelkaj temoj estis mencio certa sinjoro lwfinger, kiu famas pro verkado de kelkaj ŝoforoj por WiFi-adaptiloj. . Lia git-deponejo estas ĉe la fino de la artikolo en la ligiloj. Kaj la dua leciono, kiun mi lernis, estas, ke vi devas identigi vian aparaton por kompreni, kiu ŝoforo povas esti taŭga por ĝi.

Parto 1: La Bourne Identeco

Kiam la aparato estis ŝtopita en la havenon, kompreneble neniu LED lumiĝis. Kaj ĝenerale ne estas klare ĉu io funkcias aŭ ne.

Antaŭ ĉio, por ekscii ĉu la kerno vidas nian aparaton, mi rigardas en 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

Montriĝis, ke ĝi vidas, kaj eĉ estas klare, ke ekzistas Realtek-blato kaj la VID/PID de la aparato mem sur la usb-buso.

Ni iru plu kaj rigardu lsusb, kaj jen alia fiasko atendas nin

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

La sistemo ne scias kia aparato ĝi estas, kaj timide montras malplenan spacon anstataŭ la nomo (kvankam vendisto=2357 certe estas TP-Link).

En ĉi tiu etapo, la scivola leganto verŝajne jam rimarkis ion interesan, sed ni lasos ĝin ĝis nia tempo.

Esplorado de la problemo de malplenaj nomoj kondukis min al retejo kun identigiloj, kie informoj pri konataj VID/PID estas enmetitaj. Nia 2357:0111 ne estis tie. Kiel ĝi rezultis poste, la utileco lsusb uzas dosieron /usr/share/misc/usb.ids, kiu estas la sama listo de identigiloj de ĉi tiu retejo. Por la beleco de la ekrano, mi simple aldonis liniojn por la vendisto TP-Link en mia sistemo.

2357  TP-Link
        0111  TL-WN727N v5.21

Nu, ni korektis la ekranon en la listo de aparatoj, sed ĝi ne proksimigis nin unu paŝon al la elekto de ŝoforo. Por elekti ŝoforon, vi devas scii sur kiu blato estas farita via fajfilo. La sekvaj malsukcesaj provoj ekscii tion en la Interreto ne kondukis al io bona. Armita per maldika fendita ŝraŭbturnilo, mi zorge forprenas la adaptigan ĉapon kaj la malica ideo de Onklo Liao aperas en sia tuta pura nudeco. Sub lupeo oni povas vidi la nomon de la blato - RTL8188EUS. Ĉi tio jam estas bona. En kelkaj forumoj mi vidis afiŝojn, ke la ŝoforo de tiu sama sinjoro lwfinger bone taŭgas por ĉi tiu blato (kvankam li skribas nur pri RTL8188EU).

Parto 2: La Bourne Supereco

Mi elŝutas la ŝoforfontojn de Git.

Estas tempo reinstali Vindozon kaj fari tion, al kio Linukso-uzantoj kutime asocias - kunmeti ion el iuj specoj. Kunveni ŝoforojn, kiel rezultas, malmulte diferencas de kompili programojn:

make
sudo make install

sed por kompili kernmodulojn ni bezonas la kernajn kapdosierojn por nia specifa versio.

Estas pako en la stoko-deponejo raspberrypi-kernel-kapoj, sed ĝi enhavas la kernan version de la dosieroj 4.19.66-v7l+, kaj tio ne konvenas al ni. Sed por akiri la kapliniojn de la bezonata versio, kiel evidentiĝis, ekzistas oportuna ilo rpi-fonto (ligilo ĉe la fino ĉe Github), per kiu vi povas elŝuti la necesajn kapliniojn. Ni klonas la deponejon, faras la skripton plenumebla kaj rulas ĝin. La unua lanĉo malsukcesas kun eraro - ne ekzistas utileco bc. Feliĉe, ĝi estas en la deponejo kaj ni simple instalas ĝin.

sudo apt-get install bc

Post ĉi tio, rekomenci kaj elŝuti la kapliniojn (kaj poste agordi ion, mi nun ne memoras) daŭras iom da tempo kaj vi povas sidiĝi en via seĝo, Vindozo pliboniĝis en ĉiuj ĝiaj manifestiĝoj.

Post kiam ĉiuj kaplinioj estas elŝutitaj, kontrolu, ke la dosierujo aperas /lib/modules/4.19.73-v7+ kaj en ĝi la simbolligo montras al la loko kie troviĝas la elŝutitaj dosieroj (por mi ĝi estas /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

La prepara etapo estas finita, vi povas komenci kunigon. Kunveni la modulojn denove prenas iom da tempo, la Raspberry ne estas rapida besto (ĝi havas 32bit 900Mhz Cortex ARM v7).
Do ĉio kompilita. Ni instalas la ŝoforon en la 2-a paŝo (faru instali), samtempe kopiante pli da firmware-dosieroj necesaj por ke la ŝoforo funkciu:

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

Parto 3. La Bourne Ultimato

Mi ŝtopas la fajfilon en la havenon kaj... nenio okazas. Ĉu ĉio estis por nenio?

Mi komencas studi la dosierojn ene de la projekto kaj en unu el ili mi trovas, kio estis la problemo: la pelilo specifas kompletan liston de VID/PID-identigiloj, kiujn ĝi povas servi. Kaj por ke nia aparato funkciu kun ĉi tiu pelilo, mi simple aldonis mian identigilon al la dosiero 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 */
};

Mi rekompilis la ŝoforon kaj reinstalis ĝin en la sistemo.

Kaj ĉi-foje ĉio komenciĝis. La lumo sur la adaptilo eklumis kaj nova aparato aperis en la listo de retaj interfacoj.

Vidante sendratajn interfacojn montras la jenon:

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

Gratifiko por tiuj, kiuj legas ĝis la fino

Memoru, kiel mi diris, ke ne gravas, kia maksimuma rapido estas deklarita sur via adaptilo?
Do, ĉe Malinka (antaŭ la ĵeto de modelo 4), ĉiuj aparatoj (inkluzive de la eterreta adaptilo) sidas sur la sama usb-buso. Bonege, ĉu ne? Kaj tial la larĝa de bando de la usb-buso estas dividita inter ĉiuj aparatoj sur ĝi. Dum mezurado de la rapido kaj per ethernet kaj per usb wi-fi (konektita al 1 enkursigilo) kaj per aero kaj per drato, ĝi estis ĉirkaŭ 20Mbit/s.

PS Ĝenerale, ĉi tiu gvidilo por kompili pelilon por ĉi tiu aparta adaptilo validas ne nur por RPI. Mi tiam ripetis ĝin sur mia labortablo kun Linux Mint - ĉio funkciis ankaŭ tie. Vi nur bezonas elŝuti la necesajn kapdosierojn por via kernversio sammaniere.

UPD. Konataj homoj sugestis: por ne dependi de la kerna versio, vi devas kolekti kaj instali ŝoforojn per dkms. La legu min por la ŝoforo ankaŭ enhavas ĉi tiun opcion.

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. Proponita flikaĵo por aparato-identigilo estis akceptita en la ĉefa branĉo de la lwfinger/rtl8188eu-deponejo.

referencoj
- RPi USB Wifi-Adaptiloj
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-fonto

fonto: www.habr.com