Wy binne freonen RaspberryPi mei TP-Link TL-WN727N

Hoi Habr!

Ik tocht oan it ferbinen fan myn raspberry mei it ynternet troch de loft.

Net earder sein as dien, hjirfoar waard in fluit fan it beruchte TP-Link-bedriuw kocht by de tichtstbye usb wi-fi-winkel. Ik moat fuortdaliks sizze dat dit net in soarte fan nano-usb-module is, mar in hiel algemien apparaat oer de grutte fan in gewoane USB-flashdrive (goed, of as jo wolle, mei de wiisfinger fan in folwoeksen man). Foardat ik kocht, studearre ik de list mei stipe fluitfabrikanten foar RPI en TP-Link in bytsje (lykwols, sa't letter bliken die, haw ik de subtiliteiten net rekken holden, om't de duvel, lykas jo witte, yn 'e details leit) . Dat, in kâld ferhaal oer myn misadventures begjint, in detectiveferhaal yn 3 dielen wurdt jo oandacht oanbean. Ynteressearre asjebleaft ûnder kat.

Kêst Ferbine WiFi-adapter WN727N mei Ubuntu / Mint Ik holp foar in part, mar earst dingen earst.

Betingsten fan it probleem

Jûn:

  1. single-board kompjûter Raspberry Pi 2 B v1.1 - 1 stik
  2. usb wi-fi fluit WN727N - 1 stik
  3. in pear net hielendal krom hannen - 2 stikken
  4. lêste Raspbian ynstalleare as OS (basearre op debian 10 Buster)
  5. kernel ferzje 4.19.73-v7+

Fyn: ferbine mei it ynternet (Wi-Fi wurdt ferspraat fan 'e thúsrouter)

Nei it útpakken fan de adapter, lês ik de ynstruksjes binnen:

Systeemkompatibiliteit: Windows 10/8/7/XP (sels sky, sels XP) en MacOS 10.9-10.13

Мда, о линуксах как обычно ни слова. Шел 2к19, а драйвера было нужно все еще собирать вручную…

Wy hiene 2 kompilatoren by ús, 75 tûzen biblioteken, fiif binêre blobs, in heale array fan neakene froulju mei in logo en in hiele see fan headers fan alle talen en markups. Net dat it in needsaaklike set wie foar it wurk. Mar as jo ienris begjinne om it systeem foar josels te sammeljen, wurdt it lestich om te stopjen. It iennichste ding dat my soargen makke wie de sjauffeurs foar wi-fi. D'r is neat mear helpleas, ûnferantwurdlik en korrupt as it bouwen fan bestjoerders fan boarne. Mar ik wist wol dat wy ier of let oerstappe soene op dizze rommel.

Yn 't algemien, lykas jo witte, is drokte mei usb wi-fi op Linux pynlik en wat ûngemaklik (lykas Russyske sushi).

D'r is ek in bestjoerder-cd yn 'e doaze. Sûnder folle hoop sjoch ik nei wat der op stiet - se hawwe der wis net foar soarge. In sykaksje op it ynternet brocht my nei de webside fan 'e fabrikant, mar d'r is in Linux-bestjoerder allinich foar apparaatferzje v4en ik hie yn myn earms v5.21. En boppedat, ûnder heul âlde ferzjes fan 'e kernel 2.6-3.16. Untmoedige troch it mislearjen al oan it begjin, tocht ik al dat ik de TL-WN727N hie moatte nimme (it is wat djoerder en kin 300Mbps tsjin 150 foar my dwaan, mar sa die bliken, makket it net út foar de framboos hielendal, dit sil letter skreaun wurde). Mar it wichtichste is dat d'r al stjoerprogramma's foar binne en se binne gewoan ynstalleare as in pakket firmware-ralink. Посмотреть ревизию устройства обычно можно на корпусе устройства на наклейке рядом с серийным номером.

Fierder googelen en besykje ferskate foarums hat net folle goed brocht. Blykber hat gjinien foar my besocht sa'n adapter oan Linux te ferbinen. Hmm, ik ha gelok as in ferdronken man.

Hoewol't nee, ik liig, it besykjen fan foarums (meast Ingelsktalich) brocht ek frucht, yn guon ûnderwerpen wie der in fermelding fan in bepaalde hear lwfinger, dy't ferneamd is troch it skriuwen fan in oantal drivers foar Wi-Fi-adapters. Syn git-repository is oan 'e ein fan it artikel yn' e keppelings. En de twadde les dy't ik learde is dat jo jo apparaat moatte identifisearje om te begripen hokker bestjoerder it kin passe.

Diel 1. Bourne Identifikaasje

As it apparaat is ynstútsenComment yn de haven, gjin LED ljocht op, fansels. En yn 't algemien is it op gjin inkelde manier dúdlik dat wat wurket of net.

As earste, om út te finen oft de kernel ús apparaat sjocht, sjoch ik yn 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

It die bliken dat hy sjocht, en it is sels dúdlik dat d'r in Realtek-chip is en de VID / PID fan it apparaat sels op 'e usb-bus.

Lit ús fierder, lit sjen lsusb, en hjir wachtsje wy op in oare mislearring

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

It systeem wit net hokker soarte fan apparaat it is, en bashfully toant in lege romte ynstee fan in namme (hoewol't ferkeaper = 2357 is perfoarst TP-Link).

Yn dit stadium hat de nijsgjirrige lêzer wierskynlik al wat nijsgjirrichs opmurken, mar wy sille it útstelle oant ús tiid.

Undersykjen fan it probleem fan lege nammen late my nei in side mei identifiers, wêryn ynformaasje oer bekende VID / PID wurdt ynfierd. Us 2357:0111 wie der net. Sa die bliken letter, it nut lsusb brûkt triem /usr/share/misc/usb.ids, dat is deselde list fan ids fan dy side. Foar de skientme fan it display haw ik gewoan rigels tafoege foar de TP-Link-ferkeaper yn myn systeem.

2357  TP-Link
        0111  TL-WN727N v5.21

No, wy korrizjearre it display yn 'e list mei apparaten, mar dit brocht ús net ien stap tichter by it kiezen fan in bestjoerder. Om in bestjoerder te selektearjen, moatte jo witte op hokker chip jo fluit is makke. De folgjende mislearre besykjen om út te finen op it ynternet hawwe net liede ta neat goed. Bewapene mei in tinne sleatskroevendraaier wriuw ik foarsichtich it deksel fan de adapter ôf en myn blik ferskynt yn al syn oarspronklike neakenens, it wrede tinkbyld fan omke Liao. Under in fergrutglês kinne jo de namme fan 'e chip sjen - RTL8188EUS. It is al goed. Op guon foarums, Ik seach berjochten dy't krekt de bestjoerder fan deselde gentleman lwfinger is goed geskikt foar dizze chip (ek al seit er allinnich oer RTL8188EU).

Diel 2. De Bourne Supremacy

Ik download de boarnekoade fan 'e bestjoerder fan' e git.

It is tiid om de finsters opnij te ynstallearjen om te dwaan wat Linuxoids normaal wurde assosjearre mei - it sammeljen fan wat fan soarten. As it die bliken, ferskilt it gearstallen fan bestjoerders net folle fan it kompilearjen fan programma's:

make
sudo make install

mar om kernelmodules te kompilearjen, hawwe wy de kernel-header-bestannen nedich foar ús bepaalde ferzje.

D'r is in pakket yn 'e stock repository raspberrypi-kernel-headers, mar it befettet de kernel ferzje fan de triemmen 4.19.66-v7l+en dat wurket net foar ús. Mar om de kopteksten fan 'e winske ferzje te krijen, sa die bliken, is d'r in handich ark rpi boarne (keppeling oan 'e ein fan' e github), wêrmei jo de winske kopteksten kinne downloade. Wy klonje it repository, meitsje it skript útfierber, rinne it út. De earste lansearring mislearret mei in flater - d'r is gjin nut bc. Gelokkich is it yn 'e repository en wy ynstallearje it gewoan.

sudo apt-get install bc

Dêrnei duorret it op 'e nij opstarten en downloaden fan kopteksten (en dan wat ynstelle, wit ik it no net) wat tiid en kinne jo op jo stoel efteroer leanje Windows is better wurden yn al syn manifestaasjes.

Nei't alle kopteksten binne ynladen, kontrolearje wy dat de map is ferskynd /lib/modules/4.19.73-v7+ en dêryn wiist de symlink nei it plak wêr't de ynladen bestannen lizze (ik haw it /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

De tariedende poadium is foltôge, jo kinne begjinne mei gearstalling. De gearstalling fan modules nimt wer in bepaalde tiid, de framboos is gjin fluch bist (it hat in 32bit 900Mhz Cortex ARM v7 stien).
Dus alles gearstald. Wy ynstallearje de stjoerprogramma yn 'e 2e stap (ynstallearje meitsje), wylst wy mear firmware-bestannen kopiearje dy't nedich binne foar it wurk fan de bestjoerder:

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

Diel 3. The Bourne Ultimatum

Ik stek in fluitsje de haven yn en ... der bart neat. Wie it allegear foar neat?

Ik begjin de bestannen yn it projekt te studearjen en yn ien fan har fyn ik wat it probleem wie: de bestjoerder hat in folsleine list mei VID / PID-identifikaasjes dy't it kin tsjinje. En om ús apparaat te wurkjen mei dizze stjoerprogramma, haw ik gewoan myn id tafoege oan it bestân 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 */
};

It stjoerprogramma opnij kompilearre en opnij ynstalleare yn it systeem.

И уж на этот раз все завелось. Лампочка на адаптере загорелась и в списке сетевых интерфейсов появилось новое устройство.

It besjen fan draadloze ynterfaces jout it folgjende:

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 foar dyjingen dy't lêze oant it ein

Unthâld hoe't ik sei dat it makket neat út hokker maksimum snelheid wurdt ferklearre op jo adapter?
Dus, op 'e raspberry (foar de frijlitting fan model 4) sitte alle apparaten (ynklusyf de ethernetadapter) op deselde usb-bus. It is geweldich, krekt? En sa wurdt de bânbreedte fan de usb-bus dield tusken alle apparaten dêrop. By it mjitten fan de snelheid sawol fia ethernet as fia usb wi-fi (ferbûn mei 1 router) sawol oer de loft as oer de draad joech it sawat 20Mbps út.

PS Yn it algemien is dizze gids foar it kompilearjen fan in stjoerprogramma foar dizze bepaalde adapter jildich net allinich foar RPI. Ik werhelle it doe op myn buroblêd mei Linux Mint - alles wurke dêr ek. Jo moatte gewoan de nedige koptekstbestannen foar jo kernelferzje op deselde manier downloade.

UPD. Kundige minsken suggerearren: om net ôfhinklik te wêzen fan 'e kearnferzje, moatte jo bestjoerders bouwe en ynstallearje mei dkms. De readme foar de bestjoerder hat ek dizze opsje.

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. Foarsteld patch foar apparaat id is akseptearre yn 'e mainstream tûke fan it lwfinger/rtl8188eu repository.

referinsjes
- RPi USB WiFi Adapters
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi boarne

Boarne: www.habr.com