Werin em bi TP-Link TL-WN727N re heval RaspberryPi bikin

Hey Habr!

Min carekê biryar da ku raspberry xwe bi hewayê ve bi Înternetê ve girêbide.

Ji zû de got, ji bo vê armancê min whistle wi-fi usb ji pargîdaniya naskirî TP-Link ji firotgeha herî nêzîk kirî. Ez ê tavilê bibêjim ku ev ne cûreyek modulek nano-usb ye, lê amûrek pir mezin e, bi qebareya ajokerek flashek birêkûpêk (an, heke hûn bixwazin, mezinahiya tiliya nîşana zilamek mezin e). Berî kirînê, min lêkolînek piçûk li ser navnîşa hilberînerên bilbilên piştgirîkirî yên ji bo RPI kir û TP-Link di navnîşê de bû (lêbelê, wekî ku paşê derket holê, min hûrgulî hesab nekir, ji ber ku şeytan, wekî ku em dizanin , di hûrguliyan de ye). Ji ber vê yekê, çîroka sar a serpêhatiyên min dest pê dike; em ji 3 beşan çîrokek detektîf pêşkêşî we dikin. Ji bo kesên eleqedar, ji kerema xwe serî li pisîkê bidin.

Made Girêdana adapterê WiFi WN727N bi Ubuntu/Mint Ew bi qismî alîkariya min kir, lê yekem tiştên pêşîn.

Şertên pirsgirêkê

Dayîn:

  1. komputera yek panelê Raspberry Pi 2 B v1.1 - 1 perçe
  2. USB wi-fi whistle WN727N - 1 perçe
  3. cotek destên ne pir xerabûyî - 2 perçe
  4. Raspbian-a herî dawî wekî OS-ê hatî saz kirin (li ser bingeha Debian 10 Buster)
  5. guhertoya kernel 4.19.73-v7+

Bibînin: bi Înternetê ve girêdin (Wi-Fi ji routerê weya malê tê belav kirin)

Piştî vekirina adapterê, min rêwerzên hundur xwend:

Lihevhatina pergalê: Windows 10/8/7/XP (tevî ezman, tewra XP) û MacOS 10.9-10.13

Hmm, wekî gelemperî, ne peyvek li ser Linux. Ew 2k19 bû, û ajoker hîn jî hewce bû ku bi destan werin berhev kirin ...

Bi me re 2 berhevkar, 75 hezar pirtûkxane, pênc blobên binary, nîv rêzek jinên tazî bi logo û deryayek tevahî ji sernavên hemî ziman û nîşanan hebûn. Ne ku ev ji bo kar set pêwîst e. Lê gava ku hûn dest bi komkirina pergalek ji bo xwe bikin, rawestandina wê dijwar dibe. Tiştê ku bû sedema xemgîniya min ajokarên wi-fi bûn. Ji çêkirina ajokaran ji çavkaniyê wêdetir tiştek bêçare, bêberpirsiyarî û xirabtir tune. Lê min dizanibû ku zû yan dereng em ê berê xwe bidin vê çopê.

Bi gelemperî, wekî ku hûn dizanin, li Linux-ê bi wi-fi-ya usb-ê re mijûl dibe bi êş û hinekî bê tam (mîna sushi ya rûsî).

Di sindoqê de CDyek bi ajokar jî heye. Bêyî pir hêviyek ez li tiştê ku li ser heye dinihêrim - wan bê guman lênihêrî nekiriye. Lêgerînek Înternetê min anî malpera çêker, lê li wir tenê ji bo guhertoya cîhazê ajokerek Linux heye v4, û di destên min de bû v5.21. Û ji bilî, ji bo guhertoyên kernel ên pir kevn 2.6-3.16. Di destpêkê de ji têkçûnê dilgiran bûm, min jixwe difikirî ku divê min TL-WN727N bigirta (ew hinekî bihatir e û dikare 300Mbps beramberî 150 ji bo ya min bigire, lê wekî ku derket holê, ev ji bo min qet ne girîng e. raspberry, ev dê paşê were nivîsandin). Lê ya herî girîng ev e ku ajokarên wê jixwe hene û bi tenê wekî pakêtek têne saz kirin firmware-ralink. Hûn dikarin bi gelemperî guhertoya cîhazê li ser laşê cîhazê li ser pêçekek li tenişta jimareya rêzê bibînin.

Zêdetir googlkirin û seredana forumên cihêreng zêde xêrek neanî. Xuya ye ku berî min kesek hewl nedaye ku adapterek wusa bi Linux-ê ve girêbide. Hmm, ez wek mirovekî xeniqî bextewar im.

Her çend, na, ez derewan dikim, lê seredana foruman (bi piranî yên bi zimanê îngilîzî) jî fêkiyê dide; di hin mijaran de behsa hin birêz lwfinger hebû, ku bi nivîsandina hejmarek ajokaran ji bo adapterên Wi-Fi navdar e. . Depoya git ya wî di dawiya gotarê de di girêdanan de ye. Û dersa duyemîn ku ez fêr bûm ev e ku hûn hewce ne ku amûrê xwe nas bikin da ku hûn fêm bikin ka kîjan ajoker dikare ji bo wê maqûl be.

Beş 1: Nasnameya Bourne

Dema ku cîhaz di portê de hate girêdan, bê guman, ti LED ronî nebû. Û bi gelemperî bi tu awayî ne diyar e ka tiştek dixebite an na.

Berî her tiştî, ji bo ku ez bibînim ka kernel amûrê me dibîne, ez li dmesg mêze dikim:

[  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

Derket holê ku ew dibîne, û tewra diyar e ku li ser otobusa USB-ê çîpek Realtek û VID/PID-a cîhazê bixwe heye.

Were em pêşda herin û binihêrin lsusb, û li vir têkçûnek din li benda me ye

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

Pergal nizane ew çi celeb cîhaz e, û li şûna navê bi şikestî cîhek vala nîşan dide (her çend vendor=2357 bê guman TP-Link e).

Di vê qonaxê de, xwendevanê lêkolîner belkî berê tiştek balkêş dîtiye, lê em ê heya dema xwe bihêlin.

Lêkolîna pirsgirêka navên vala min birin malperek bi nasname, ku agahdariya li ser VID/PID-a naskirî tê navnîş kirin. 2357:0111 me ne li wir bû. Wekî ku paşê derket holê, kêrhatî lsusb pelê bikar tîne /usr/share/misc/usb.ids, ku heman navnîşa nasnameyên vê malperê ye. Ji bo bedewiya pêşandanê, min tenê di pergala xwe de xetên ji bo firoşkarê TP-Link zêde kir.

2357  TP-Link
        0111  TL-WN727N v5.21

Welê, me dîmendera di navnîşa cîhazan de rast kir, lê ev yek me yek gav nêzikî hilbijartina ajokerek nekir. Ji bo bijartina ajokerek, hûn hewce ne ku hûn zanibin bilbila we li ser kîjan çîpê hatî çêkirin. Hewldanên neserkeftî yên din ên ku vê yekê li ser Înternetê bibînin, nebûn sedema tiştek baş. Çekdar bi pîvazek ziravî ya tenik, ez bi baldarî kapa adapterê radikim û mejiyê xerab ê Apê Liao bi tevahî tazîbûna xwe ya bêkêmasî xuya dike. Di bin camek mezin de hûn dikarin navê çîpê bibînin - RTL8188EUS. Ev jixwe baş e. Li ser hin foruman min postan dît ku ajokarê heman birêz lwfinger ji bo vê çîpê xweş e (her çend ew tenê li ser RTL8188EU dinivîse).

Beş 2: Serweriya Bourne

Ez çavkaniyên ajokerê ji Git dakêşim.

Wext e ku hûn Windows-ê ji nû ve saz bikin û tiştê ku bikarhênerên Linux bi gelemperî pê re têkildar in bikin - ji hin cûre tiştan berhev bikin. Komkirina ajokaran, wekî ku xuya dike, ji berhevkirina bernameyan hindik cûda dibe:

make
sudo make install

lê ji bo berhevkirina modulên kernelê ji bo guhertoya meya taybetî pelên sernavê kernel hewce ne.

Di depoya stokê de pakêtek heye raspberrypi-kernel-headers, lê guhertoya kernelê ya pelan dihewîne 4.19.66-v7l+, û ew ne li gorî me ye. Lê ji bo bidestxistina sernavên guhertoya pêwîst, wekî ku derket holê, amûrek hêsan heye rpi-çavkanî (girêdana li dawiyê li ser Github), bi ku hûn dikarin sernavên pêwîst dakêşin. Em depoyê klon dikin, skrîptê çêdikin û dimeşînin. Destpêka yekem bi xeletiyek têk diçe - karûbar tune bc. Xwezî, ew di depoyê de ye û em tenê wê saz dikin.

sudo apt-get install bc

Piştî vê yekê, ji nû ve destpêkirin û dakêşana sernavan (û dûv re sazkirina tiştek, nuha nayê bîra min) hin dem digire û hûn dikarin li ser kursiya xwe rûnin, Windows di hemî xuyangên xwe de çêtir bûye.

Piştî ku hemî sernivîs hatin daxistin, kontrol bikin ka pelrêça xuya dike /lib/modules/4.19.73-v7+ û di wê de symlink nîşan dide cîhê ku pelên dakêşandî lê ne (ji bo min ew /home/pi/linux e):

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

Qonaxa amadekariyê qediya, hûn dikarin dest bi kombûnê bikin. Komkirina modulan dîsa hin dem digire, Raspberry ne heywanek bilez e (ew xwedan 32bit 900Mhz Cortex ARM v7 ye).
Ji ber vê yekê her tişt berhev kirin. Em di gava duyemîn de ajokerê saz dikin (saz bikin), di heman demê de bêtir pelên firmware yên ku ji bo xebitandina ajoker hewce ne jî kopî dikin:

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

Part 3. The Bourne Ultimatum

Ez bilbilê dixe benderê û... tiştek nabe. Ma ew hemî ji bo tiştek bû?

Ez dest bi lêkolîna pelên di hundurê projeyê de dikim û di yek ji wan de ez dibînim ku pirsgirêk çi bû: ajoker navnîşek bêkêmasî ya nasnavên VID/PID ku ew dikare xizmet bike diyar dike. Û ji bo ku cîhaza me bi vê ajokerê re bixebite, min tenê nasnameya xwe li pelê zêde kir 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 */
};

Min ajoker ji nû ve berhev kir û li ser pergalê ji nû ve saz kir.

Û vê carê her tişt dest pê kir. Ronahiya li ser adapterê ronî bû û amûrek nû di navnîşa navgînên torê de xuya bû.

Dîtina pêwendiyên wireless yên jêrîn nîşan dide:

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 ji bo kesên ku heta dawiyê dixwînin

Bînin bîra xwe ku min çawa got ku ne girîng e ka çi leza herî zêde li ser adapterê we hatî destnîşan kirin?
Ji ber vê yekê, li ser Malinka (berî berdana modela 4), hemî cîhaz (tevî adapterê ethernet) li ser heman otobusê USB rûniştin. Mezin, rast? Û ji ber vê yekê bandfirehiya otobusê USB di navbera hemî cîhazên li ser wê de tê dabeş kirin. Dema ku leza hem bi ethernetê û hem jî bi usb wi-fi (bi 1 router ve girêdayî ye) hem bi hewa û hem jî bi têl tê pîvandin, dora 20Mbit/s bû.

PS Bi gelemperî, ev rêber ji bo berhevkirina ajokerek ji bo vê adapterê taybetî ne tenê ji bo RPI derbasdar e. Dûv re min ew li ser sermaseya xwe bi Linux Mint re dubare kir - her tişt li wir jî xebitî. Hûn tenê hewce ne ku bi heman rengî pelên sernavê yên ji bo guhertoya xweya kernelê dakêşin.

UPD. Kesên zana pêşniyar kirin: ji bo ku hûn ne girêdayî guhertoya kernelê nebin, hûn hewce ne ku ajokaran bi karanîna dkms berhev bikin û saz bikin. Readme ji bo ajokerê jî vê vebijarkê dihewîne.

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. Pêşniyar kirin pîvaz ji bo nasnameya cîhazê di şaxê sereke ya depoya lwfinger/rtl8188eu de hate pejirandin.

references
- RPi USB Adapterên Wi-Fi
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-çavkanî

Source: www.habr.com