Sveiki, Habr!
Kartą nusprendžiau savo avietę prijungti prie interneto per eterį.
Neabejoju, kad šiam tikslui artimiausioje parduotuvėje įsigijau gerai žinomos kompanijos TP-Link usb wi-fi švilpuką. Iš karto pasakysiu, kad tai ne koks nano usb modulis, o gana didelis įrenginys, maždaug įprasto "flash drive" dydžio (arba, jei norite, suaugusio vyro rodomojo piršto dydžio). Prieš pirkdamas šiek tiek patyrinėjau palaikomų švilpukų gamintojų sąrašą RPI ir TP-Link buvo sąraše (tačiau, kaip vėliau paaiškėjo, į subtilybes neatsižvelgiau, nes velnias, kaip žinome , yra detalėse). Taigi, prasideda šalta pasaka apie mano nesėkmes, jūsų dėmesiui pristatome 3 dalių detektyvą. Tiems, kurie domisi, skaitykite kat.
Straipsnis
Problemos sąlygos
Dano:
- vienkartinis kompiuteris Raspberry Pi 2 B v1.1 – 1 vnt
- usb wi-fi švilpukas WN727N - 1 vnt
- pora ne visai kreivų rankų - 2 vnt
- Naujausia Raspbian įdiegta kaip OS (pagrįsta Debian 10 Buster)
- branduolio versija 4.19.73-v7+
Rasti: prisijungti prie interneto („Wi-Fi“ platinamas iš jūsų namų maršrutizatoriaus)
Išpakavęs adapterį perskaičiau instrukcijas viduje:
Sistemos suderinamumas: Windows 10/8/7/XP (net dangus, net XP) ir MacOS 10.9-10.13
Hmm, kaip įprasta, apie Linux nė žodžio. Buvo 2k19, o tvarkykles dar reikėjo surinkti rankiniu būdu...
Su mumis turėjome 2 kompiliatorius, 75 tūkstančius bibliotekų, penkias dvejetaines blobas, pusę nuogų moterų su logotipu ir visą jūrą antraštių visomis kalbomis ir žymėjimais. Ne todėl, kad tai yra būtinas rinkinys darbui. Tačiau pradėjus rinkti sistemą sau, sustoti tampa sunku. Vienintelis dalykas, kuris man sukėlė nerimą, buvo „Wi-Fi“ tvarkyklės. Nėra nieko bejėgiškesnio, neatsakingesnio ir korumpuoto kaip tvarkyklių kūrimas iš šaltinio. Bet žinojau, kad anksčiau ar vėliau pereisime prie šių šiukšlių.
Apskritai, kaip žinote, „Linux“ sistemoje „usb wi-fi“ yra skausmingas ir šiek tiek neskanus (kaip rusiški sušiai).
Dėžutėje taip pat yra kompaktinis diskas su tvarkyklėmis. Be didelių vilčių žiūriu, kas jame parašyta – jie tikrai tuo nepasirūpino. Interneto paieška atvedė mane į gamintojo svetainę, tačiau ten yra Linux tvarkyklė, skirta tik įrenginio peržiūrai v4, o mano rankose buvo v5.21. Ir be to, labai senoms branduolio versijoms 2.6-3.16. Jau pačioje pradžioje atkalbinėtas dėl gedimo, jau galvojau, kad reikėjo pasiimti TL-WN727N (jis šiek tiek brangesnis ir gali atlaikyti 300Mbps, palyginti su 150 pas mane, bet kaip paaiškėjo, tai visai nesvarbu apie avietes, apie tai bus parašyta vėliau). Tačiau svarbiausia, kad jo tvarkyklės jau egzistuoja ir yra tiesiog įdiegtos kaip paketas firmware-ralink. Įrenginio versiją paprastai galite peržiūrėti ant įrenginio korpuso ant lipduko šalia serijos numerio.
Tolesnis googlinimas ir lankymasis įvairiuose forumuose daug gero neatnešė. Matyt, niekas iki manęs nebandė tokio adapterio prijungti prie Linux. Hmm, man pasisekė kaip nuskendusiam žmogui.
Nors, ne, meluoju, lankymasis forumuose (dažniausiai anglų kalba) irgi davė vaisių, kai kuriose temose buvo paminėtas kažkoks ponas lwfinger, garsėjantis rašantis daugybę tvarkyklių Wi-Fi adapteriams. . Jo git saugykla yra straipsnio pabaigoje nuorodose. Antra pamoka, kurią išmokau, yra ta, kad turite identifikuoti savo įrenginį, kad suprastumėte, kuri tvarkyklė jam gali būti tinkama.
1 dalis: Borno tapatybė
Kai įrenginys buvo prijungtas prie prievado, žinoma, joks šviesos diodas neužsidega. Ir apskritai niekaip neaišku, ar kažkas veikia, ar ne.
Visų pirma, norėdamas sužinoti, ar branduolys mato mūsų įrenginį, žiūriu į 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
Paaiškėjo, kad mato, o net aišku, kad usb magistrale yra Realtek lustas ir paties įrenginio VID/PID.
Eikime toliau ir pažiūrėkime lsusb, ir čia mūsų laukia dar viena nesėkmė
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
Sistema nežino, koks tai įrenginys, ir vietoje pavadinimo įžūliai rodo tuščią vietą (nors pardavėjas=2357 tikrai yra TP-Link).
Šiame etape smalsus skaitytojas tikriausiai jau pastebėjo ką nors įdomaus, bet paliksime tai savo laikui.
Tyrinėdamas tuščių pavadinimų problemą, atvedė mane į svetainę su identifikatoriais, kur įvedama informacija apie žinomą VID/PID. Mūsų 2357:0111 ten nebuvo. Kaip vėliau paaiškėjo, naudingumas lsusb naudoja failą /usr/share/misc/usb.ids, kuris yra tas pats šios svetainės ID sąrašas. Dėl ekrano grožio savo sistemoje tiesiog pridėjau eilutes, skirtas pardavėjo TP-Link.
2357 TP-Link
0111 TL-WN727N v5.21
Na, pataisėme ekraną įrenginių sąraše, bet tai nepriartino nė žingsnio prie vairuotojo pasirinkimo. Norėdami pasirinkti vairuotoją, turite žinoti, ant kurio lusto yra pagamintas jūsų švilpukas. Kiti nesėkmingi bandymai tai išsiaiškinti internete nieko gero neprivedė. Apsiginklavęs plonu atsuktuvu su plyšiu, atsargiai nuplėšiu adapterio dangtelį ir dėdės Liao užburtas smegenys pasirodo visu savo nesugadintu nuogumu. Po padidinamuoju stiklu matote lusto pavadinimą - RTL8188EUS. Tai jau gerai. Kai kuriuose forumuose mačiau įrašus, kad to paties džentelmeno lwfinger vairuotojas puikiai tinka šiam lustui (nors jis rašo tik apie RTL8188EU).
2 dalis: Bourne viršenybė
Atsisiunčiau tvarkyklių šaltinius iš Git.
Atėjo laikas iš naujo įdiegti „Windows“ ir daryti tai, su kuo dažniausiai siejami „Linux“ vartotojai – surinkti ką nors iš tam tikrų rūšių. Tvarkyklių surinkimas, kaip paaiškėja, mažai skiriasi nuo programų kompiliavimo:
make
sudo make install
tačiau norint kompiliuoti branduolio modulius, mums reikia konkrečios versijos branduolio antraštės failų.
Atsargų saugykloje yra paketas raspberrypi-kernel-headers, tačiau jame yra failų branduolio versija 4.19.66-v7l+, ir tai mums netinka. Tačiau norint gauti reikiamos versijos antraštes, kaip paaiškėjo, yra patogus įrankis rpi šaltinis (nuoroda pabaigoje Github), su kuria galite atsisiųsti reikiamas antraštes. Klonuojame saugyklą, padarome scenarijų vykdomąjį ir paleidžiame. Pirmasis paleidimas nepavyksta dėl klaidos - nėra naudingumo bc. Laimei, jis yra saugykloje ir mes jį tiesiog įdiegiame.
sudo apt-get install bc
Po to paleidimas iš naujo ir antraštių atsisiuntimas (o tada kažko nustatymas, dabar nepamenu) užtrunka šiek tiek laiko ir galite sėdėti kėdėje, „Windows“ tapo geresnė visomis savo apraiškomis.
Atsisiuntę visas antraštes patikrinkite, ar rodomas katalogas /lib/modules/4.19.73-v7+ ir jame simbolinė nuoroda nurodo vietą, kur yra atsisiųsti failai (man tai /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
Parengiamasis etapas baigtas, galite pradėti surinkimą. Modulių surinkimas vėl užtrunka, Raspberry nėra greitas žvėris (turi 32 bitų 900Mhz Cortex ARM v7).
Taigi viskas sukompiliuota. Mes įdiegiame tvarkyklę 2-uoju žingsniu (padaryti diegimą), taip pat nukopijuojame daugiau programinės įrangos failų, reikalingų tvarkyklei veikti:
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/.
3 dalis. Borno ultimatumas
Įjungiu švilpuką į prievadą ir... nieko nevyksta. Ar viskas buvo veltui?
Pradedu tyrinėti projekto viduje esančius failus ir viename iš jų randu, kokia buvo problema: tvarkyklė nurodo visą VID/PID identifikatorių sąrašą, kurį gali aptarnauti. Ir kad mūsų įrenginys veiktų su šia tvarkykle, aš tiesiog pridėjau savo ID prie failo 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 */
};
Perkompiliavau tvarkyklę ir iš naujo įdiegiau sistemoje.
Ir šį kartą viskas prasidėjo. Adapterio lemputė užsidegė ir tinklo sąsajų sąraše pasirodė naujas įrenginys.
Belaidžių sąsajų peržiūra rodoma:
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
Premija tiems, kurie perskaitė iki galo
Prisiminkite, kaip sakiau, kad nesvarbu, koks didžiausias greitis nurodytas jūsų adapteryje?
Taigi „Malinka“ (prieš 4 modelio išleidimą) visi įrenginiai (įskaitant eterneto adapterį) yra toje pačioje USB magistralėje. Puiku, tiesa? Todėl USB magistralės pralaidumas yra padalintas tarp visų joje esančių įrenginių. Matuojant greitį tiek per eternetą, tiek per usb wi-fi (prijungtas prie 1 maršrutizatoriaus) tiek oru, tiek laidu buvo apie 20Mbit/s.
PS Apskritai šis šio konkretaus adapterio tvarkyklės sudarymo vadovas galioja ne tik RPI. Tada pakartojau tai savo darbalaukyje su Linux Mint – ten taip pat viskas veikė. Jums tereikia tokiu pačiu būdu atsisiųsti reikiamus branduolio versijos antraštės failus.
UPD. Išmanantys žmonės pasiūlė: kad nepriklausytumėte nuo branduolio versijos, turite surinkti ir įdiegti tvarkykles naudodami dkms. Tvarkyklės readme taip pat yra ši parinktis.
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. Siūloma
Nuorodos
-
-
-
-
Šaltinis: www.habr.com