Freunde RaspberryPi mit TP-Link TL-WN727N

Hallo Habr!

Irgendwie dachte ich daran, meine Himbeere über die Luft mit dem Internet zu verbinden.

Kaum gesagt als getan, wurde dafür eine Pfeife der bekannten TP-Link-Firma im nächstgelegenen USB-WLAN-Laden gekauft. Ich muss sofort sagen, dass dies kein Nano-USB-Modul ist, sondern ein ziemlich dimensionales Gerät von der Größe eines normalen Flash-Laufwerks (na ja, oder wenn Sie es mit dem Zeigefinger eines erwachsenen Mannes mögen). Vor dem Kauf habe ich ein wenig die Liste der unterstützten Hersteller von Pfeifen für RPI und TP-Link in der Liste studiert (obwohl ich, wie sich später herausstellte, die Feinheiten nicht berücksichtigt habe, da bekannt ist, dass der Teufel im Detail steckt). So beginnt die kalte Geschichte meiner Missgeschicke, eine Detektivgeschichte in drei Teilen wird Ihrer Aufmerksamkeit angeboten. Interessiert bitte unter Katze.

Der Artikel Verbinden des WN727N WiFi-Adapters mit Ubuntu / Mint hat mir teilweise geholfen, aber das Wichtigste zuerst.

Aufgabenbedingungen


Gegeben:

  1. Raspberry Pi 2 B v1.1 Einplatinencomputer - 1 Stck.
  2. USB Wifi Pfeife WN727N - 1 Stück
  3. ein Paar nicht ganz krumme Hände - 2 Stück
  4. Das neueste Raspbian wird als Betriebssystem installiert (basierend auf Debian 10 Buster).
  5. Kernel-Version 4.19.73-v7 +

Suchen: Verbindung zum Internet herstellen (WLAN wird von einem Heimrouter gehört)

Nach dem Auspacken des Adapters habe ich die folgenden Anweisungen gelesen:
Systemkompatibilität: Windows 10/8/7 / XP (sogar Himmel, sogar XP) und MacOS 10.9-10.13

Hmm, über Linux, wie immer, kein Wort. Es war 2k19, aber die Treiber mussten noch manuell zusammengebaut werden ...
Wir hatten 2 Compiler, 75.000 Bibliotheken, fünf binäre Blobs, eine halbe Masse nackter Frauen mit einem Logo und ein ganzes Meer von Headern aller Sprachen und Markups. Nicht, dass es ein notwendiger Satz für die Arbeit gewesen wäre. Aber wenn Sie anfingen, das System für sich selbst zusammenzubauen, wird es schwierig, es zu stoppen. Das einzige, was mich beunruhigte, waren Fahrer unter Wi-Fi. Es gibt nichts Hilfloseres, Verantwortungsloseres und Verwöhnteres als die Versammlung von Fahrern aus der Quelle. Aber ich wusste, dass wir früher oder später zu diesem Müll übergehen werden.


Wie Sie wissen, ist die Arbeit mit USB-WLAN unter Linux im Allgemeinen schmerzhaft und etwas geschmacklos (wie russisches Sushi).

Die Box enthält auch eine Treiber-CD. Ohne viel Hoffnung schaue ich mir an, was drauf ist - sicher haben sie sich nicht darum gekümmert. Eine Suche im Internet brachte mich auf die Website des Herstellers, aber es gibt nur einen Linux-Treiber für die Überarbeitung des v4- Geräts, und ich hatte v5.21 zur Hand. Und außerdem unter sehr alten Versionen des Kernels 2.6-3.16. Von dem Fehler am Anfang entmutigt, dachte ich bereits, dass es notwendig ist, TL-WN727N zu nehmen (es ist etwas teurer und kann 300 Mbit / s gegenüber 150 Mbit / s für meine, aber dies stellte sich als irrelevant für Himbeeren heraus, es wird später geschrieben). Vor allem aber gibt es bereits Treiber dafür, die einfach vom Firmware-Ralink-Paket installiert werden . Normalerweise können Sie die Revision des Geräts auf dem Gehäuse des Geräts auf dem Aufkleber neben der Seriennummer sehen.

Weiteres googeln und das Besuchen verschiedener Foren brachte nichts Gutes. Anscheinend hat noch niemand vor mir versucht, einen solchen Adapter an Linux anzuschließen. Hmm, ich habe Glück als Ertrunkener.

Obwohl nein, ich lüge, hat sich der Besuch von Foren (meistens englische) ebenfalls ausgezahlt. In einigen Themen wurde ein bestimmter Herr lwfinger erwähnt, der dafür bekannt ist, eine Reihe von Treibern für Wi-Fi-Adapter zu schreiben. Sein Git-Repository am Ende des Artikels in den Links. Und die zweite Lektion, die ich gelernt habe, ist, dass Sie Ihr Gerät identifizieren müssen, um zu verstehen, welcher Treiber dafür geeignet sein könnte.

Teil 1. Bourne Identifikation


Wenn Sie das Gerät im Anschluss einschalten, leuchtet natürlich keine LED auf. Und im Allgemeinen ist in gewisser Weise nicht klar, ob etwas funktioniert oder nicht.

Um herauszufinden, ob der Kernel unser Gerät sieht, schaue ich zunächst 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 

Es stellte sich heraus, dass es gesehen wurde, und es ist sogar klar, dass sich ein Realtek-Chip und das VID / PID-Gerät am USB-Bus selbst befinden.

Wir gehen weiter, schauen uns lsusb an und dann erwartet uns ein weiterer Fehler

 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 

Das System weiß nicht, was dieses Gerät ist, und zeigt schüchtern ein leeres Feld anstelle eines Namens an (obwohl Hersteller = 2357 genau TP-Link ist).

Zu diesem Zeitpunkt hat der neugierige Leser wahrscheinlich bereits etwas Interessantes bemerkt, aber wir werden es auf unsere Zeit verschieben.

Die Untersuchung des Problems der leeren Namen führte mich zu einer Site mit Kennungen, auf der Informationen zu bekannten VID / PID eingegeben werden. Unser 2357: 0111 war nicht da. Wie sich später herausstellte, verwendet lsusb die Datei /usr/share/misc/usb.ids , bei der es sich um dieselbe Liste von Bezeichnern dieser Site handelt. Aus Gründen der Schönheit des Displays habe ich meinem System gerade Zeilen für den TP-Link-Anbieter hinzugefügt.

 2357 TP-Link 0111 TL-WN727N v5.21 

Nun, wir haben die Anzeige in der Liste der Geräte korrigiert, aber dies hat uns der Auswahl eines Treibers keinen Schritt näher gebracht. Um einen Fahrer auszuwählen, müssen Sie wissen, auf welchem ​​Chip Ihre Pfeife gemacht wird. Die nächsten erfolglosen Versuche, dies im Internet herauszufinden, führten zu nichts Gutem. Mit einem dünnen Schlitzschraubendreher bewaffnet hebe ich vorsichtig die Adapterkappe auf und sehe Onkel Liaos bösartige Idee in all ihrer makellosen Nacktheit. Unter der Lupe sehen Sie den Namen des Chips - RTL8188EUS . Das ist schon gut In einigen Foren habe ich Beiträge gesehen, die besagen, dass der Treiber dieses Herrn lwfinger für diesen Chip gut geeignet ist (obwohl er nur über RTL8188EU aussagt).

Teil 2. Die Bourne-Vorherrschaft


Ich lade Treiberquellen von einer Gita herunter.

Es ist an der Zeit, die Shindous neu zu installieren, um das zu tun, womit Linux normalerweise verbunden ist - etwas aus einer Art zusammenzusetzen. Die Zusammenstellung der Treiber unterschied sich kaum vom Kompilieren von Programmen:

 make sudo make install 

Zum Kompilieren von Kernelmodulen benötigen wir jedoch Kernel-Header-Dateien für unsere spezifische Version.

Es gibt ein raspberrypi-kernel-headers- Paket im Bestandsrepository, das jedoch die Version der Dateien für den Kernel 4.19.66-v7l + enthält , und dies passt nicht zu uns. Um die Header der gewünschten Version zu erhalten, gibt es jedoch ein praktisches rpi- source-Tool (Link am Ende des Githubs), mit dem Sie die erforderlichen Header herunterladen können. Wir klonen das Repository, machen das Skript ausführbar und führen es aus. Der erste Start schlägt mit einem Fehler fehl - es gibt kein Dienstprogramm bc . Zum Glück befindet es sich im Repository und wir installieren es einfach.

 sudo apt-get install bc 

Danach dauert es einige Zeit, die Header neu zu starten und herunterzuladen (und dann etwas einzurichten, an das ich mich jetzt nicht mehr erinnere), und Sie können sich zurücklehnen und in all seinen Erscheinungsformen besser werden .

Nachdem alle Header heruntergeladen wurden, überprüfen wir, ob das Verzeichnis /lib/modules/4.19.73-v7+ angezeigt wird und der Symlink auf den Ort verweist, an dem sich die heruntergeladenen Dateien befinden (ich habe dieses / 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 

Die Vorbereitungsphase ist abgeschlossen, Sie können mit dem Zusammenbau beginnen. Der Zusammenbau der Module dauert wieder eine gewisse Zeit, das Himbeertier ist nicht schnell (es hat einen 32bit 900Mhz Cortex ARM v7 Stein).
Also alles zusammengestellt. Wir installieren den Treiber im 2. Schritt (Installation durchführen), während wir auch die Firmware-Dateien kopieren, die erforderlich sind, damit der Treiber funktioniert:

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

Teil 3. Das Bourne Ultimatum


Ich pfeife in den Hafen und ... nichts passiert. War alles verschwendet?

Ich beginne, die Dateien im Projekt zu studieren, und in einer davon finde ich das Problem: Der Treiber gibt die vollständige Liste der VIDs / PIDs an, die er bedienen kann. Damit unser Gerät mit diesem Treiber funktioniert, habe ich gerade meine ID zur Datei rtl8188eu / os_dep / usb_intf.c hinzugefügt

 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 */ }; 

Kompilierte den Treiber neu und installierte ihn erneut im System.

Und diesmal fing alles an. Das Licht am Adapter leuchtet auf und ein neues Gerät wird in der Liste der Netzwerkschnittstellen angezeigt.

Das Anzeigen von drahtlosen Schnittstellen bietet Folgendes:

 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 für diejenigen, die bis zum Ende gelesen haben


Erinnern Sie sich, wie ich sagte, dass es keine Rolle spielt, welche Höchstgeschwindigkeit auf Ihrem Adapter angegeben ist?
Auf der Himbeere (vor der Veröffentlichung von Modell 4) befinden sich alle Geräte (einschließlich des Ethernet-Adapters) auf demselben USB-Bus. Großartig, richtig? Die USB-Bus-Bandbreite wird also von allen Geräten gemeinsam genutzt. Bei der Messung der Geschwindigkeit über Ethernet und über USB-WLAN (verbunden mit 1 Router) sowohl über die Luft als auch über das Kabel ergab sich eine Geschwindigkeit im Bereich von 20 Mbit / s.

PS Im Allgemeinen gilt diese Treiberkompilierungsanleitung für diesen bestimmten Adapter nicht nur für RPI. Ich habe es dann wiederholt und auf meinem Desktop mit Linux Mint - dort hat auch alles funktioniert. Sie müssen lediglich die erforderlichen Header-Dateien für Ihre Kernel-Version herunterladen.

UPD Fachleute schlugen vor: Um nicht von der Kernel-Version abhängig zu sein, müssen Sie Treiber mit dkms erstellen und installieren. In der Readme-Datei für den Treiber ist diese Option ebenfalls vorhanden
 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. Der vorgeschlagene Patch für die Geräte-ID wurde in den Mainstream-Repository-Zweig lwfinger / rtl8188eu aufgenommen.

Referenzen
- RPi USB Wi-Fi Adapter
- gitbub lwfinger / rtl8188eu
- usb.ids
- RPI-Quelle

Source: https://habr.com/ru/post/de471564/


All Articles