Helló, Habr!
Egyszer csak arra gondoltam, hogy a Raspberry Pi-t úgy csatlakoztatom az internethez, hogy levegőben van.
Meg is tettem, ezért a közeli boltban vásároltam egy TP-Link USB wi-fi adaptert. Azonnal mondom, hogy ez nem valami nano USB modul, hanem egy kifejezetten nagyméretű eszköz, körülbelül akkora, mint egy szokásos pendrive (vagy ha úgy tetszik, egy felnőtt férfi mutatóujja). A vásárlás előtt kicsit átnéztem a RPI-hez támogatott adapterek listáját, és a TP-Link benne volt (bár ahogy később kiderült, nem vettem figyelembe a részleteket, mert a részletekben rejtőzik a ördög). Na, tehát a hűvös mese a kalandjaimról kezdődik, figyelmetekbe ajánlom a három részből álló detektív történetet. Az érdeklődőket várom a folytatásra.
Cikk részben segített, de minden a maga rendje szerint.
A feladat feltételei
Adott:
- 1 db Raspberry Pi 2 B v1.1 egylapos számítógép
- 1 db WN727N USB wi-fi adapter
- 2 db nem teljesen ügyes kéz
- az OS a legfrissebb Raspbian (Debian 10 Buster alapú)
- a kernel verzió: 4.19.73-v7+
Cél: csatlakozás az internethez (a Wifi a házi routerből érkezik)
Az adapter kibontása után olvasom a belső használati útmutatót:
Rendszerkompatibilitás: Windows 10/8/7/XP (még XP is, és MacOS 10.9-10.13
Hát, a Linuxokról szokás szerint egy szó sem. 2019-et írtunk, és a drivereket még mindig kézzel kellett összeszerelni...
Magunkkal hoztunk 2 fordítót, 75 ezer könyvtárat, öt bináris blobot, egy fél mázsa logóval ellátott meztelen női képet és egy óceánnyi header-t minden nyelven és leírásban. Nem mintha ez lett volna a szükséges munkaeszköz. De ha egyszer belevágtál a rendszer összeszerelésébe, nehéz megállni. Az egyetlen dolog, ami aggasztott, az a wi-fi driverek voltak. Nincs szörnyűbb, felelőtlenebb és megromlottabb dolog, mint az alaprendszerekből drivereket összeállítani. De tudtam, hogy előbb vagy utóbb rátérünk erre a dologra.
Magában véve, mint tudjuk, a USB wi-fi kezelés Linuxon fájdalmas és kissé ízléstelen (mint az orosz sushi).
A dobozban van egy CD-lemez a driverekkel. Különösebb remény nélkül nézem, mi van rajta - persze, nem törődtek vele. Az internetes keresés a gyártó weboldalára vezetett, de ott csak a 4-es verzióhoz volt Linux driver. v4, de nekem a kezemben volt v5.21. És ráadásul nagyon régi 2.6-3.16 kernel verziókra. Az elején a kudarc miatt elkeseredve úgy gondoltam, hogy talán a TL-WN727N-t kellett volna választanom (ez egy kicsit drágább, és 300Mbps sebességre képes, míg az enyém 150Mbps, de mint kiderült, ez a Raspberry Pi számára egyáltalán nem jelentett sokat, erről később írok). Ami a legfontosabb, már vannak driverek hozzá, és az egyszerűen telepíthető csomagként. firmware-ralink. A készülék revízióját általában a készülék burkolatán található címkén lehet megnézni, közvetlenül a sorozatszám mellett.
A további keresés és különböző fórumok látogatása különösebben nem hozott semmi jót. Nyilvánvalóan senki nem próbálta még meg csatlakoztatni ezt a konkrét adaptert Linux alatt. Hát, nem vagyok szerencsés.
De nem, hazudok, a fórumok (többnyire angol nyelvűek) látogatása is hozott bizonyos eredményeket, néhány topicban felbukkant egy bizonyos lwfinger nevű úr, aki arról híres, hogy írt néhány drivert wifi adapterekhez. Az ő git repoja a cikk végén található linkek között. A második tanulság, amit megtanultam - az eszköz azonosítása szükséges ahhoz, hogy megtudjuk, melyik driver lehet megfelelő hozzá.
1. rész. Azonosítás
Amikor csatlakoztatom az eszközt a porthoz, egyetlen LED sem világított meg. És egyáltalán nem világos, hogy működik-e vagy sem.
Első lépésként meg akarom nézni, látja-e a kernel az eszközünket, ezért belenézek a dmesg-be:
[ 965.606998] usb 1-1.3: új high-speed USB berendezés, a szám 9, a dwc_otg használatával
[ 965.738195] usb 1-1.3: Új USB eszközt találtunk, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[ 965.738219] usb 1-1.3: Új USB eszköz adatok: Mfr=1, Product=2, SerialNumber=3
[ 965.738231] usb 1-1.3: Termék: 802.11n NIC
[ 965.738243] usb 1-1.3: Gyártó: Realtek
[ 965.738255] usb 1-1.3: Sorozatszám: 00E04C0001
Kiderült, hogy látja, és világos, hogy a chip Realtek, és az USB busz VID/PID is ott van.
Haladjunk tovább, nézzük meg lsusb, és itt újabb kudarc vár ránk
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
A rendszer nem tudja, mi ez az eszköz, és szégyenlősen üres helyet mutat az elnevezés helyett (bár a vendor=2357 biztosan TP-Link).
Ez a pont valószínűleg már felkeltette a kíváncsi olvasó figyelmét, de ezt későbbre halasztjuk.
A üres nevek problémájának vizsgálata egy olyan weboldalra vezetett, amely az azonosítókat gyűjti, ahol a híres VID/PID információkat tárolják. A mi 2357:0111-esünk nem szerepelt ott. Mint később kiderült, az eszköz lsusb fájl használata /usr/share/misc/usb.ids, amely ugyanaz a lista azonosítókról erről a weboldalról. A szebb megjelenés érdekében egyszerűen hozzáadtam a rendszeremben a TP-Link szorongókat.
2357 TP-Link
0111 TL-WN727N v5.21
Nos, a készülékek listájának megjelenítését javítottuk, de a megfelelő illesztőprogram kiválasztásához nem közelítettük meg a dolgot. Az illesztőprogram kiválasztásához tudni kell, hogy melyik chip készült a dongled. A legújabb, sikertelen kísérletek az interneten való információszerzésre nem vezettek jóra. Felszerelkezve egy vékony lapos csavarhúzóval óvatosan megemelem az adapter burkolatát, és a teljes dicsőségében megjelenik az Alia bácsi áldatlan gyermeke. Nagyítónál kivehető a chip neve — RTL8188EUS. Ez már jó. Néhány fórumon láttam üzeneteket, hogy ehhez a chiphez kifejezetten jól illeszkedik a lwfinger úr illesztőprogramja (még akkor is, ha csak az RTL8188EU-ról ír).
2. rész. Borna fölénye
Letöltöm az illesztőprogram forrásait a gitből.
Ideje újratelepíteni a Windows-t és foglalkozni azzal, amivel általában a Linux felhasználókat társítják — valami forrásból való összeállítással. Az illesztőprogramok összeállítása kiderült, hogy alig különbözik a programok fordításától:
make
sudo make install
de a kernel modulok fordításához szükségünk van a kernel címsor fájlokra, a mi konkrét verziónkhoz.
A gyári tárolóban van egy csomag raspberrypi-kernel-headers, de ez a fájlok verzióját tartalmazza a kernelhez 4.19.66-v7l+, ami nekünk nem megfelelő. De kiderült, hogy van egy kényelmes eszköz a szükséges verziójú fejlécek megszerzésére rpi-source (a GitHub linkje a végén), amellyel letölthetjük a szükséges címkéket. Klónozzuk a tárolót, a szkriptet végrehajthatóvá tesszük, majd elindítjuk. Az első indítás során hiba merül fel — hiányzik a segédeszköz bc. Szerencsére ez megtalálható a tárolóban, így egyszerűen telepítjük.
sudo apt-get install bc
Ezután a második indítás és a címkék letöltése (meg valami beállítása, most már nem emlékszem) eltart egy ideig, és lehet hátradőlni a székre, mert a Windows jobb lett minden vonatkozásában.
Miután az összes fejléces fájl letöltődött, ellenőrizzük, hogy megjelent egy könyvtár /lib/modules/4.19.73-v7+ és abban a szimbolikus hivatkozás arra a helyre mutat, ahol a letöltött fájlok találhatók (nálam ez /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
A felkészülési fázis véget ért, indulhat a szerelés. A modulok összeszerelése megint csak időt vesz igénybe, a Raspberry Pi teljesítménye nem a leggyorsabb (a processzor 32bit 900Mhz Cortex ARM v7).
Nos, minden lefordult. Telepítjük a drivert 2. lépésként (make install), eközben a szükséges firmware fájlok is másolódnak:
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. rész. Born ultimátuma
Bedugom a donglet a portba és... semmi sem történik. Ez mind hiábavaló volt?
Kezdek beleásni a projekt fájljaiba, és az egyikben megtalálom, mi volt a probléma: a driver egy teljes VID/PID azonosítók listáját tartalmazza, amelyeket képes kezelni. Ahhoz, hogy az eszközöm működjön ezzel a driverrel, egyszerűen hozzáadtam az én azonosítómat a fájlhoz. 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 */
/*=== Custom 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 */
};
Újraformáztam a drivert és újra telepítettem a rendszerbe.
Ezúttal minden működött. Az adapter lámpája felgyulladt, és az interfészek listájában megjelent egy új eszköz.
A vezeték nélküli interfészek áttekintése a következőt mutatja:
pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0 no wireless extensions.
lo no wireless extensions.
wlan0 unassociated ESSID:"" Nickname:""
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
Bónusz azoknak, akik végig olvasták.
Emlékeztek, hogy azt mondtam, hogy nem számít, mekkora a maximális sebesség, amit az adapteretek beígér?
Szóval a Raspberry Pi (a 4-es modell megjelenése előtt) minden eszköze (beleértve az ethernet adaptert is) ugyanazon a USB buszon működik. Elképesztő, igaz? Ezért az USB busz sávszélessége megoszlik az összes rajta lévő eszköz között. A sebességmérés során, akár ethernet, akár USB Wi-Fi (1 routerhez csatlakoztatva), légvonalban és kábelen, körülbelül 20 Mbit/s sebességet mutatott.
P.S. Valójában ez a drivereknek az adott adapterhez való fordítására vonatkozó útmutató nemcsak RPI-n érvényes. Később megismételtem a saját Linux Mint asztali gépemen is — ott is minden működött. Csak ugyanúgy le kell töltened a szükséges fejléceket a használt kernel verzióhoz.
UPD. A szakértők azt javasolták: hogy ne függj a kernel verziótól, a drivereket a dkms segítségével kell összegyűjteni és telepíteni. A driver readme fájljában ez a lehetőség is megtalálható.
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. Javasolt a device ID-t a lwfinger/rtl8188eu tároló fő ága elfogadta.
Hivatkozások
—
—
—
—
Forrás: habr.com
