Facemu amici RaspberryPi cù TP-Link TL-WN727N

Ehi Habr!

Una volta decisu di cunnette u mo raspberry à Internet per l'aria.

Nantu à dì chì fattu, per questu scopu aghju compru un usb wi-fi whistle da a famosa cumpagnia TP-Link da a tenda più vicina. Diciaraghju subitu chì questu ùn hè micca un tipu di modulu nano usb, ma un dispositivu abbastanza grande, circa a dimensione di una unità flash regulare (o, se vulete, a dimensione di l'indici di l'omu adultu). Prima di cumprà, aghju fattu un pocu di ricerca nantu à a lista di i pruduttori di whistle supportati per RPI è TP-Link era nantu à a lista (in ogni modu, cum'è hè stata dopu, ùn aghju micca pigliatu in contu i suttilità, perchè u diavulu, cum'è sapemu). , hè in i dettagli). Allora, a storia fredda di e mo disavventure principia; vi prisintàmu à a vostra attenzione una storia di detective in 3 parti. Per quelli interessati, fate riferimentu à cat.

Articulu Cunnettendu l'adattatore WiFi WN727N à Ubuntu/Mint M'hà aiutatu parzialmente, ma prima cose prima.

Cundizioni di u prublema

Dà:

  1. Computer à bordu unicu Raspberry Pi 2 B v1.1 - 1 pezzu
  2. usb wi-fi whistle WN727N - 1 pezza
  3. un paru di mani micca abbastanza curve - 2 pezzi
  4. L'ultimu Raspbian hè stallatu cum'è OS (basatu nantu à Debian 10 Buster)
  5. versione di u kernel 4.19.73-v7+

Truvate: cunnette à Internet (Wi-Fi hè distribuitu da u vostru router di casa)

Dopu avè sbulicatu l'adattatore, aghju lettu l'istruzzioni in l'internu:

Compatibilità di u Sistema: Windows 10/8/7/XP (ancu u celu, ancu XP) è MacOS 10.9-10.13

Hmm, cum'è di solitu, micca una parolla nantu à Linux. Era 2k19, è i drivers anu da sempre esse assemblati manualmente...

Avemu avutu cun noi 2 compilatori, 75 mila biblioteche, cinque blob binari, a mità di una mansa di donne nude cù un logu è un mare interu di intestazioni di tutte e lingue è markups. Ùn hè micca chì questu hè un settore necessariu per u travagliu. Ma una volta chì avete cuminciatu à assemblà un sistema per voi stessu, diventa difficiule di piantà. L'unicu ciò chì m'hà causatu preoccupazione era i cunduttori per u wi-fi. Ùn ci hè nunda di più impotente, irresponsibile è currutti chì custruisce i drivers da a fonte. Ma sapia chì, prima o poi, avemu da passà à sta spazzatura.

In generale, cum'è sapete, fidling with usb wi-fi in Linux hè doloroso è un pocu senza gustu (cum'è u sushi russu).

A scatula cuntene ancu un CD cù drivers. Senza assai speranza mi fighjulà ciò chì hè nantu à questu - ùn anu definitu micca cura di questu. Una ricerca in Internet m'hà purtatu à u situ web di u fabricatore, ma ci hè un driver Linux solu per a revisione di u dispositivu v4, è in i mo braccia era v5.21. È in più, per versioni di kernel assai vechji 2.6-3.16. Scoraggiatu da u fallimentu à l'iniziu, aghju digià pensatu chì duverebbe piglià u TL-WN727N (hè un pocu più caru è pò manighjà 300Mbps versus 150 per u meiu, ma cum'è resultò, questu ùn importa micca per tuttu. u lampone, questu serà scrittu dopu). Ma u più impurtante hè chì i cunduttori per questu esiste digià è sò simpliciamente installati cum'è un pacchettu firmware-ralink. Di solitu, pudete vede a rivisione di u dispusitivu nantu à u corpu di u dispusitivu nantu à un sticker accantu à u numeru di serie.

In più di Google è visità diversi fori ùn hà micca purtatu assai bè. Apparentemente nimu prima di mè hà pruvatu à cunnette un tali adattatore à Linux. Hmm, sò furtunatu cum'è un omu affucatu.

Ancu s'ellu, no, mi mente, visità i fori (per suprattuttu in lingua inglese) hà ancu purtatu u fruttu; in certi temi ci hè stata una menzione di un certu sgiò lwfinger, chì hè famosu per scrive una quantità di drivers per adattatori Wi-Fi. . U so repository git hè à a fine di l'articulu in i ligami. È a seconda lezzione chì aghju amparatu hè chì avete bisognu di identificà u vostru dispositivu per capisce quale driver pò esse adattatu per questu.

Parte 1: L'identità di Bourne

Quandu u dispusitivu hè stata cunnessa in u portu, sicuru, nisun LED illuminatu. È in generale ùn hè micca chjaru in ogni modu chì qualcosa funziona o micca.

Prima di tuttu, per sapè s'ellu u kernel vede u nostru dispositivu, guardu in 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

Hè risultatu chì vede, è hè ancu chjaru chì ci hè un chip Realtek è u VID / PID di u dispusitivu stessu nantu à u bus USB.

Andemu più in là è fighjemu lsusb, è quì ci aspetta un altru fallimentu

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

U sistema ùn sà micca chì tipu di dispusitivu hè, è ti mostra un spaziu viotu invece di u nome (ancu se u venditore = 2357 hè sicuramente TP-Link).

À questu stadiu, u lettore curiosu hà prubabilmente digià nutatu qualcosa interessante, ma l'abbanduneremu finu à u nostru tempu.

A ricerca di u prublema di i nomi vacanti m'hà purtatu à un situ cù identificatori, induve l'infurmazioni nantu à VID / PID cunnisciuti sò inseriti. U nostru 2357:0111 ùn era micca quì. Cum'è turnò dopu, l'utilità lsusb usa u schedariu /usr/share/misc/usb.ids, chì hè a stessa lista di ID da stu situ. Per a bellezza di a visualizazione, aghju aghjustatu solu linee per u venditore TP-Link in u mo sistema.

2357  TP-Link
        0111  TL-WN727N v5.21

Ebbè, avemu currettu a visualizazione in a lista di i dispositi, ma ùn ci hà micca purtatu un passu più vicinu à a scelta di un driver. Per selezziunà un driver, avete bisognu di sapè quale chip hè fattu u vostru fischiu. I prossimi tentativi senza successu di scopre questu nantu à Internet ùn anu purtatu à nunda di bonu. Armatu d'un cacciavite sottile, sguassate cù cura u capu di l'adattatore è u viziosu di u ziu Liao appare in tutta a so nudità pristina. Sutta una lente di ingrandimentu pudete vede u nome di u chip - RTL8188EUS. Questu hè digià bonu. In certi fori aghju vistu posti chì u cunduttore di quellu stessu signore lwfinger hè bè adattatu per questu chip (ancu s'ellu scrive solu nantu à RTL8188EU).

Parte 2: A supremazia Bourne

Aghju scaricatu e fonti di driver da Git.

Hè u tempu di reinstallà Windows è fà ciò chì l'utilizatori di Linux sò generalmente assuciati - assemble qualcosa da certi tipi. L'assemblea di i drivers, cum'è risulta, difiere pocu di i prugrammi di compilazione:

make
sudo make install

ma per compilà i moduli di u kernel avemu bisognu di i schedarii di l'intestazione di u kernel per a nostra versione specifica.

Ci hè un pacchettu in u repositoriu di stock raspberrypi-kernel-headers, ma cuntene a versione di u kernel di i schedari 4.19.66-v7l+, è chì ùn ci cunvene micca. Ma per uttene l'intestazione di a versione necessaria, cum'è hè risultatu, ci hè un strumentu convenientu rpi-source (ligame à a fine nantu à Github), cù quale pudete scaricà l'intestazione necessaria. Clonamu u repository, facemu u script eseguibile, è eseguimu. U primu lanciu falla cù un errore - ùn ci hè micca utilità bc. Fortunatamente, hè in u repository è simpliciamente l'installemu.

sudo apt-get install bc

Dopu à questu, riavvia è scaricate l'intestazione (è poi stallà qualcosa, ùn mi ricordu micca avà) piglia un pocu di tempu è pudete pusà in a vostra sedia, Windows hè diventatu megliu in tutte e so manifestazioni.

Dopu chì tutti l'intestazione sò stati scaricati, verificate chì u cartulare appare /lib/modules/4.19.73-v7+ è in questu u ligame simbolicu punta à u locu induve si trovanu i schedarii scaricati (per mè hè /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

A tappa preparatoria hè stata finita, pudete principià l'assemblea. L'assemblea di i moduli piglia un pocu di tempu, u Raspberry ùn hè micca una bestia veloce (hà un 32bit 900Mhz Cortex ARM v7).
Allora tuttu cumpilatu. Installemu u driver in u 2nd passu (fà installà), mentre cupiendu ancu più file di firmware necessarii per u driver per travaglià:

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

Parte 3. L'ultimatum di Bourne

Aghjunghjite u fischiu in u portu è... ùn passa nunda. Era tuttu per nunda ?

Accuminciamu à studià i schedarii in u prughjettu è in unu d'elli truvu ciò chì era u prublema: u cunduttore specifica una lista completa di identificatori VID / PID chì pò serve. È per u nostru dispositivu per travaglià cù questu driver, aghju aghjustatu solu u mo id à u schedariu 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 */
};

Aghju ricompilatu u driver è reinstallatu in u sistema.

È sta volta tuttu principia. A luce nantu à l'adattatore s'illumina è un novu dispositivu apparsu in a lista di interfacce di rete.

A visualizazione di l'interfaccia wireless mostra i seguenti:

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

Bonus per quelli chì leghjenu finu à a fine

Ricurdativi di cumu aghju dettu chì ùn importa micca a velocità massima indicata nantu à u vostru adattatore?
Allora, in Malinka (prima di a liberazione di u mudellu 4), tutti i dispositi (cumpresu l'adattatore ethernet) si trovanu nantu à u stessu bus USB. Grande, nò? È dunque a larghezza di banda di u bus USB hè spartuta trà tutti i dispositi nantu à questu. Quandu si misurà a vitezza via ethernet è via usb wi-fi (cunnessu à 1 router) sia per l'aria sia per u filu, era intornu à 20Mbit/s.

PS In generale, sta guida per cumpilà un driver per questu adattatore particulari hè validu micca solu per RPI. Allora l'aghju ripetutu nantu à u mo scrittore cù Linux Mint - tuttu hà travagliatu ancu quì. Basta à scaricà i fugliali di header necessarii per a vostra versione di u kernel in u listessu modu.

UPD. E persone cunniscenze suggerite: per ùn dipende micca da a versione di u kernel, avete bisognu di cullà è installà i drivers cù dkms. U readme per u driver cuntene ancu sta opzione.

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. Pruposta patch per l'ID di u dispositivu hè stata accettata in u ramu mainstream di u repository lwfinger/rtl8188eu.

referenze
- Adattatori Wi-Fi USB RPi
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-source

Source: www.habr.com