Loosst eis Frënn RaspberryPi mat TP-Link TL-WN727N maachen

Hey Habr!

Ech hunn emol beschloss meng Hambierbéier mam Internet iwwer d'Loft ze verbannen.

Net méi séier gesot wéi gemaach, fir dësen Zweck hunn ech en USB Wi-Fi Pfeife vun der bekannter Firma TP-Link aus dem nootste Geschäft kaaft. Ech wäert direkt soen datt dëst net eng Aart Nano-USB-Modul ass, awer e relativ groussen Apparat, ongeféier d'Gréisst vun engem normale Flash Drive (oder, wann Dir wëllt, d'Gréisst vun engem Zeigefanger vun engem erwuessene Mann). Ier ech kaaft hunn, hunn ech e bësse Fuerschung iwwer d'Lëscht vun de ënnerstëtzte Whistle-Fabrikanten fir RPI gemaach an TP-Link war op der Lëscht (awer, wéi et spéider erausgestallt gouf, hunn ech d'Subtletien net berücksichtegt, well den Däiwel, wéi mir wëssen , ass an den Detailer). Also fänkt déi kal Geschicht vu menge Misadventures un; mir presentéieren Iech eng Detektivgeschicht an 3 Deeler. Fir déi interesséiert, kuckt w.e.g. op Cat.

Artikel Den WN727N WiFi-Adapter mat Ubuntu / Mint verbannen Et huet mir deelweis gehollef, awer éischt Saache.

Konditioune vum Problem

Färdeg:

  1. eenzege Verwaltungsrot Computer Raspberry Pi 2 B v1.1 - 1 Stéck
  2. USB Wi-Fi Whistle WN727N - 1 Stéck
  3. e Paar net ganz kromme Hänn - 2 Stéck
  4. Déi lescht Raspbian ass als OS installéiert (baséiert op Debian 10 Buster)
  5. Kernel Versioun 4.19.73-v7+

Fannt: Verbindung mam Internet (Wi-Fi gëtt vun Ärem Heemrouter verdeelt)

Nodeems ech den Adapter ausgepackt hunn, liesen ech d'Instruktioune bannen:

Systemkompatibilitéit: Windows 10/8/7/XP (souguer den Himmel, souguer XP) a MacOS 10.9-10.13

Hmm, wéi gewinnt, kee Wuert iwwer Linux. Et war 2k19, an d'Chauffeuren mussen nach manuell zesummegesat ginn ...

Mir haten mat eis 2 Compileren, 75 Tausend Bibliothéiken, fënnef binär Blobs, eng hallef Array vu plakeg Fraen mat engem Logo an e ganze Mier vun Header vun alle Sproochen a Markups. Net datt dëst e noutwendege Set fir d'Aarbecht ass. Awer wann Dir ufänkt e System fir Iech selwer ze montéieren, gëtt et schwéier ze stoppen. Dat eenzegt wat mir Suerg gemaach huet waren d'Treiber fir Wi-Fi. Et gëtt näischt méi hëlleflos, onverantwortlech a korrupt wéi Chauffeuren aus der Quell bauen. Mee ech wousst, datt mir desto oder spéider op deen Dreck wiesselen.

Am Allgemengen, wéi Dir wësst, fiddelen mat USB Wi-Fi op Linux ass schmerzhaf an e bëssen ouni Goût (wéi russesch Sushi).

D'Këscht enthält och eng CD mat Chauffeuren. Ouni vill Hoffnung kucken ech wat drop ass - si hunn sech definitiv net ëm dat gekëmmert. Eng Internet Sich huet mech op d'Websäit vum Hiersteller bruecht, awer et gëtt e Linux Chauffer do nëmme fir Gerätrevisioun v4, an a mengem Waffen war v5.21. An doriwwer eraus, fir ganz al Kernel Versiounen 2.6-3.16. Decouragéiert vum Echec am Ufank, hunn ech scho geduecht datt ech den TL-WN727N sollt huelen (en ass e bësse méi deier a kann 300Mbps versus 150 fir mäin handhaben, awer wéi et erausgestallt huet, ass dat guer net wichteg fir d'Hambierbéier, iwwer dëst wäert spéider geschriwwe ginn). Awer déi wichtegst Saach ass datt d'Treiber fir et scho existéieren an einfach als Package installéiert sinn firmware-ralink. Dir kënnt normalerweis d'Apparatversioun um Apparatkierper op engem Sticker nieft der Seriennummer kucken.

Weider Googelen a verschidde Foren besichen hunn net vill gutt bruecht. Anscheinend huet keen viru mir probéiert esou en Adapter op Linux ze verbannen. Hmm, ech hunn esou Gléck wéi en erdronk.

Och wann, nee, ech léien, besicht Forum'en (meeschtens engleschsproocheg) och Friichten, an e puer Themen gouf et vun engem gewëssen Här lwfinger ernimmt, dee berühmt ass fir eng Rei vun Chauffeuren fir Wi-Fi Adapter ze schreiwen . Säi Git Repository ass um Enn vum Artikel an de Linken. An déi zweet Lektioun, déi ech geléiert hunn, ass datt Dir Ären Apparat z'identifizéieren musst fir ze verstoen, wéi ee Chauffer dofir gëeegent ass.

Deel 1: D'Bourne Identitéit

Wann den Apparat an den Hafen ugeschloss ass, ass natierlech keng LED opgehuewen. An allgemeng ass et op iergendeng Manéier net kloer ob eppes funktionnéiert oder net.

Als éischt, fir erauszefannen ob de Kernel eisen Apparat gesäit, kucken ech an 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

Et huet sech erausgestallt datt et gesäit, an et ass souguer kloer datt et e Realtek Chip an de VID / PID vum Apparat selwer um USB Bus ass.

Loosst eis méi wäit goen a kucken lsusb, an hei waart op eis nach en Echec

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

De System weess net wéi eng Zort Apparat et ass, a weist bashfully eng eidel Plaz amplaz vum Numm (obwuel Verkeefer = 2357 definitiv TP-Link ass).

Op dëser Etapp huet de virwëtzeg Lieser wuel schonn eppes Interessantes gemierkt, mä mir loossen et bis eis Zäit.

D'Fuerschung vum Problem vun eidelen Nimm huet mech op e Site mat Identifizéierer gefouert, wou Informatioun iwwer bekannte VID / PID aginn ass. Eis 2357:0111 war net do. Wéi et sech méi spéit erausstellt, ass d'Utility lsusb benotzt Fichier /usr/share/misc/usb.ids, dat ass déi selwecht Lëscht vun IDen vun dësem Site. Fir d'Schéinheet vum Display hunn ech einfach Zeilen fir de Verkeefer TP-Link a mengem System bäigefüügt.

2357  TP-Link
        0111  TL-WN727N v5.21

Gutt, mir korrigéiert den Affichage an der Lëscht vun den Apparater, awer et huet eis net ee Schrëtt méi no bruecht fir e Chauffer ze wielen. Fir e Chauffeur ze wielen, musst Dir wëssen op wéi engem Chip Är Pfeife gemaach gëtt. Déi nächst Mëssgléckt Versich dëst um Internet erauszefannen, hunn näischt gutt gefouert. Bewaffnet mat engem dënnen Schrauberschrauwen, wéckelen ech virsiichteg den Adapterkappe of an dem Monni Liao säi béise Gehir erschéngt an all senger onbestänneg Plakegkeet. Ënnert enger Lupe kënnt Dir den Numm vum Chip gesinn - RTL8188EU. Dëst ass scho gutt. Op e puer Foren hunn ech Posts gesinn datt de Chauffeur vun deemselwechten Här lwfinger gutt fir dësen Chip gëeegent ass (och wann hien nëmmen iwwer RTL8188EU schreift).

Deel 2: The Bourne Supremacy

Ech download de Chauffer Quelle vu Git.

Et ass Zäit Windows nei z'installéieren an ze maachen wat Linux Benotzer normalerweis verbonne sinn - eppes aus verschiddenen Zorten ze montéieren. Assemblée Chauffeuren, wéi et sech erausstellt, ënnerscheet sech wéineg vu Programmer ze kompiléieren:

make
sudo make install

awer fir Kernel Moduler ze kompiléieren brauche mir d'Kernel Header Dateien fir eis spezifesch Versioun.

Et gëtt e Package am Stock Repository raspberrypi-kernel-headers, awer et enthält d'Kernelversioun vun de Dateien 4.19.66-v7l+, an dat passt eis net. Awer fir d'Header vun der erfuerderter Versioun ze kréien, wéi et sech erausstellt, gëtt et e praktescht Tool rpi-Quell (Link um Enn op Github), mat deem Dir déi néideg Header erofluede kënnt. Mir klonen de Repository, maachen de Skript ausführbar a lafen et. Den éischte Start feelt mat engem Feeler - et gëtt keen Utility bc. Glécklecherweis ass et am Repository a mir installéieren et einfach.

sudo apt-get install bc

Duerno dauert et e bëssen Zäit fir d'Header nei ze starten an erofzelueden (an dann eppes opzestellen, ech erënnere mech elo net) an Dir kënnt zréck op Ärem Stull sëtzen, Windows ass an all senge Manifestatiounen besser ginn.

Nodeems all d'Header erofgeluede goufen, kontrolléiert datt de Verzeichnis erschéngt /lib/modules/4.19.73-v7+ an dran weist de Symlink op d'Plaz wou déi erofgeluede Dateie sinn (fir mech ass et /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

D'Virbereedungsstadium ass ofgeschloss, Dir kënnt d'Versammlung ufänken. D'Module erëm ze montéieren dauert e bëssen Zäit, de Raspberry ass net e séier Béischt (et huet en 32bit 900Mhz Cortex ARM v7).
Also alles kompiléiert. Mir installéieren de Chauffer am 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/.

Deel 3. De Bourne Ultimatum

Ech stecken d'Päif an den Hafen an ... näischt geschitt. War et alles fir näischt?

Ech fänken un d'Fichier'en am Projet ze studéieren an an engem vun hinnen fannen ech wat de Problem war: de Chauffer spezifizéiert eng komplett Lëscht vu VID / PID Identifizéierer déi et kann déngen. A fir datt eisen Apparat mat dësem Chauffer funktionnéiert, hunn ech einfach meng ID an d'Datei bäigefüügt 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 */
};

Ech hunn de Chauffer nei kompiléiert an et op de System nei installéiert.

An dës Kéier huet alles ugefaang. D'Luucht um Adapter huet opgestan an en neien Apparat erschéngt an der Lëscht vun den Netzwierkschnëttplazen.

Wireless Interfaces kucken weist déi folgend:

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 fir déi, déi bis zum Schluss liesen

Denkt drun wéi ech gesot hunn datt et egal ass wéi eng maximal Geschwindegkeet op Ärem Adapter steet?
Also, op Malinka (virun der Verëffentlechung vum Modell 4), sëtzen all Apparater (inklusiv den Ethernet Adapter) um selwechten USB Bus. Flott, richteg? An dofir ass d'Bandbreed vum USB Bus tëscht allen Apparater opgedeelt. Wann Dir d'Geschwindegkeet souwuel iwwer Ethernet an iwwer USB Wi-Fi gemooss gouf (verbonne mat 1 Router) souwuel duerch Loft wéi och duerch Drot, war et ongeféier 20Mbit / s.

PS Am Allgemengen ass dëse Guide fir e Chauffer fir dëse speziellen Adapter ze kompiléieren net nëmme valabel fir RPI. Ech hunn et dunn op mengem Desktop mat Linux Mint widderholl - alles huet och do geschafft. Dir musst just déi néideg Headerdateien fir Är Kernel Versioun eroflueden op déiselwecht Manéier.

UPD. Wëssenschaftlech Leit hu virgeschloen: Fir net vun der Kernel Versioun ofhängeg ze sinn, musst Dir Chauffeuren sammelen an installéieren mat dkms. De Readme fir de Chauffer enthält och dës Optioun.

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

UPD 2. proposéiert Patch fir Apparat ID gouf an der Mainstream Branche vum lwfinger/rtl8188eu Repository ugeholl.

Referenze
- RPi USB Wi-Fi Adapter
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-Quell

Source: will.com