TP-Link TL-WN727Nతో RaspberryPiని స్నేహితులను చేద్దాం

హే హబ్ర్!

నేను ఒకసారి నా రాస్ప్బెర్రీని ఇంటర్నెట్కు గాలిలో కనెక్ట్ చేయాలని నిర్ణయించుకున్నాను.

దీని కోసం నేను సమీపంలోని స్టోర్ నుండి ప్రసిద్ధ కంపెనీ TP-Link నుండి usb wi-fi విజిల్‌ని కొనుగోలు చేసాను. ఇది ఒక రకమైన నానో యుఎస్‌బి మాడ్యూల్ కాదని నేను వెంటనే చెబుతాను, కానీ సాధారణ ఫ్లాష్ డ్రైవ్ పరిమాణం (లేదా, మీకు కావాలంటే, వయోజన వ్యక్తి యొక్క చూపుడు వేలు పరిమాణం) చాలా పెద్ద పరికరం. కొనుగోలు చేయడానికి ముందు, నేను RPI కోసం మద్దతు ఉన్న విజిల్ తయారీదారుల జాబితాపై కొంచెం పరిశోధన చేసాను మరియు TP-లింక్ జాబితాలో ఉంది (అయితే, తరువాత తేలినట్లుగా, నేను సూక్ష్మబేధాలను పరిగణనలోకి తీసుకోలేదు, ఎందుకంటే దెయ్యం, మనకు తెలిసినట్లుగా , వివరాలలో ఉంది). కాబట్టి, నా దురదృష్టాల చల్లని కథ ప్రారంభమవుతుంది; మేము మీ దృష్టికి 3 భాగాలలో డిటెక్టివ్ కథను అందిస్తున్నాము. ఆసక్తి ఉన్నవారు, దయచేసి పిల్లిని చూడండి.

వ్యాసం WN727N వైఫై అడాప్టర్‌ని ఉబుంటు/మింట్‌కి కనెక్ట్ చేస్తోంది ఇది నాకు పాక్షికంగా సహాయపడింది, కానీ మొదటి విషయాలు మొదట.

సమస్య యొక్క పరిస్థితులు

May:

  1. సింగిల్ బోర్డ్ కంప్యూటర్ రాస్ప్బెర్రీ పై 2 B v1.1 - 1 ముక్క
  2. usb wi-fi విజిల్ WN727N - 1 ముక్క
  3. చాలా వంకరగా లేని చేతులు - 2 ముక్కలు
  4. తాజా Raspbian OSగా ఇన్‌స్టాల్ చేయబడింది (డెబియన్ 10 బస్టర్ ఆధారంగా)
  5. కెర్నల్ వెర్షన్ 4.19.73-v7+

కనుగొనండి: ఇంటర్నెట్‌కి కనెక్ట్ చేయండి (Wi-Fi మీ హోమ్ రూటర్ నుండి పంపిణీ చేయబడుతుంది)

అడాప్టర్‌ను అన్‌ప్యాక్ చేసిన తర్వాత, నేను లోపల ఉన్న సూచనలను చదివాను:

సిస్టమ్ అనుకూలత: Windows 10/8/7/XP (ఆకాశం కూడా, XP కూడా) మరియు MacOS 10.9-10.13

అయ్యో, ఎప్పటిలాగే, Linux గురించి ఒక్క మాట కాదు. ఇది 2k19, మరియు డ్రైవర్లను ఇంకా మాన్యువల్‌గా సమీకరించవలసి ఉంది...

మా వద్ద 2 కంపైలర్‌లు, 75 వేల లైబ్రరీలు, ఐదు బైనరీ బ్లాబ్‌లు, లోగోతో సగం మంది నగ్న మహిళలు మరియు అన్ని భాషలు మరియు మార్కప్‌ల హెడర్‌లు ఉన్నాయి. ఇది ఉద్యోగానికి అవసరమైన సెట్ అని కాదు. కానీ మీరు మీ కోసం ఒక వ్యవస్థను సమీకరించడం ప్రారంభించిన తర్వాత, ఆపడం కష్టం అవుతుంది. నాకు ఆందోళన కలిగించిన ఏకైక విషయం wi-fi కోసం డ్రైవర్లు. మూలం నుండి డ్రైవర్లను నిర్మించడం కంటే నిస్సహాయత, బాధ్యతారాహిత్యం మరియు అవినీతి మరొకటి లేదు. కానీ త్వరగా లేదా తరువాత మనం ఈ చెత్తకు మారతామని నాకు తెలుసు.

సాధారణంగా, మీకు తెలిసినట్లుగా, Linuxలో usb wi-fiతో ఫిడ్లింగ్ చేయడం బాధాకరమైన మరియు కొంత రుచిలేనిది (రష్యన్ సుషీ లాగా).

బాక్స్‌లో డ్రైవర్‌లతో కూడిన CD కూడా ఉంది. ఎక్కువ ఆశ లేకుండా నేను దానిపై ఉన్న వాటిని చూస్తాను - వారు ఖచ్చితంగా దాని గురించి జాగ్రత్త తీసుకోలేదు. ఇంటర్నెట్ శోధన నన్ను తయారీదారు వెబ్‌సైట్‌కి తీసుకువచ్చింది, అయితే పరికర పునర్విమర్శ కోసం మాత్రమే Linux డ్రైవర్ ఉంది v4, మరియు నా చేతుల్లో ఉంది v5.21. ఇంకా, చాలా పాత కెర్నల్ వెర్షన్లు 2.6-3.16 కోసం. ప్రారంభంలోనే వైఫల్యంతో నిరుత్సాహపడి, నేను TL-WN727N (ఇది కొంచెం ఖరీదైనది మరియు 300Mbps వర్సెస్ 150 వర్సెస్ నా కోసం XNUMXని నిర్వహించగలదు, అయితే ఇది పట్టింపు లేదు. కోరిందకాయ కోసం, ఇది తరువాత వ్రాయబడుతుంది). కానీ చాలా ముఖ్యమైన విషయం ఏమిటంటే, దాని కోసం డ్రైవర్లు ఇప్పటికే ఉన్నాయి మరియు ప్యాకేజీగా ఇన్‌స్టాల్ చేయబడ్డాయి ఫర్మ్‌వేర్-రాలింక్. మీరు సాధారణంగా డివైస్ బాడీలో క్రమ సంఖ్య పక్కన ఉన్న స్టిక్కర్‌పై పరికర పునర్విమర్శను వీక్షించవచ్చు.

మరింత గూగ్లింగ్ చేయడం మరియు వివిధ ఫోరమ్‌లను సందర్శించడం వల్ల పెద్దగా ప్రయోజనం లేదు. అటువంటి అడాప్టర్‌ను Linuxకి కనెక్ట్ చేయడానికి నా ముందు ఎవరూ ప్రయత్నించలేదు. అయ్యో, నేను మునిగిపోయిన మనిషి వలె అదృష్టవంతుడిని.

అయినప్పటికీ, లేదు, నేను అబద్ధం చెబుతున్నాను, ఫోరమ్‌లను సందర్శించడం (ఎక్కువగా ఆంగ్ల భాషలో ఉన్నవి) కూడా ఫలించాయి; కొన్ని విషయాలలో Wi-Fi అడాప్టర్‌ల కోసం అనేక డ్రైవర్‌లను వ్రాయడంలో ప్రసిద్ధి చెందిన ఒక నిర్దిష్ట Mr. lwfinger గురించి ప్రస్తావించబడింది. . అతని git రిపోజిటరీ లింక్‌లలో కథనం చివరిలో ఉంది. మరియు నేను నేర్చుకున్న రెండవ పాఠం ఏమిటంటే, మీ పరికరానికి ఏ డ్రైవర్ సరిపోతుందో అర్థం చేసుకోవడానికి మీరు దానిని గుర్తించాలి.

పార్ట్ 1: ది బోర్న్ ఐడెంటిటీ

పరికరం పోర్ట్‌లోకి ప్లగ్ చేయబడినప్పుడు, LED వెలిగించబడలేదు. మరియు సాధారణంగా ఏదైనా పని చేస్తుందో లేదో స్పష్టంగా తెలియదు.

అన్నింటిలో మొదటిది, కెర్నల్ మా పరికరాన్ని చూస్తుందో లేదో తెలుసుకోవడానికి, నేను 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

ఇది చూస్తుందని తేలింది మరియు USB బస్‌లోనే Realtek చిప్ మరియు పరికరం యొక్క VID/PID ఉన్నట్లు కూడా స్పష్టమైంది.

మరింత ముందుకు వెళ్లి చూద్దాం lsusb, మరియు ఇక్కడ మరొక వైఫల్యం మాకు వేచి ఉంది

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

సిస్టమ్‌కి అది ఎలాంటి పరికరమో తెలియదు మరియు పేరుకు బదులుగా ఖాళీ స్థలాన్ని చూపిస్తుంది (అయితే విక్రేత=2357 ఖచ్చితంగా TP-లింక్).

ఈ దశలో, పరిశోధనాత్మక రీడర్ బహుశా ఇప్పటికే ఆసక్తికరమైన ఏదో గమనించి ఉండవచ్చు, కానీ మేము దానిని మా సమయం వరకు వదిలివేస్తాము.

ఖాళీ పేర్ల సమస్యను పరిశోధించడం వలన నేను ఐడెంటిఫైయర్‌లతో కూడిన సైట్‌కి దారితీసింది, అక్కడ తెలిసిన VID/PIDకి సంబంధించిన సమాచారం నమోదు చేయబడుతుంది. మా 2357:0111 అక్కడ లేదు. ఇది తరువాత తేలింది, యుటిలిటీ lsusb ఫైల్‌ని ఉపయోగిస్తుంది /usr/share/misc/usb.ids, ఇది ఈ సైట్ నుండి అదే IDల జాబితా. ప్రదర్శన యొక్క అందం కోసం, నేను నా సిస్టమ్‌లో విక్రేత TP-Link కోసం లైన్‌లను జోడించాను.

2357  TP-Link
        0111  TL-WN727N v5.21

సరే, మేము పరికరాల జాబితాలో డిస్‌ప్లేను సరిదిద్దాము, అయితే ఇది డ్రైవర్‌ను ఎంచుకోవడానికి మాకు ఒక అడుగు దగ్గరగా తీసుకురాలేదు. డ్రైవర్‌ను ఎంచుకోవడానికి, మీ విజిల్ ఏ చిప్‌లో తయారు చేయబడిందో మీరు తెలుసుకోవాలి. ఇంటర్నెట్‌లో దీన్ని కనుగొనడానికి తదుపరి విఫల ప్రయత్నాలు ఏదైనా మంచికి దారితీయలేదు. సన్నని స్లాట్డ్ స్క్రూడ్రైవర్‌తో ఆయుధాలు ధరించి, నేను అడాప్టర్ క్యాప్‌ను జాగ్రత్తగా తీసివేసాను మరియు అంకుల్ లియావో యొక్క దుర్మార్గపు మెదడు దాని సహజమైన నగ్నత్వంలో కనిపిస్తుంది. భూతద్దం కింద మీరు చిప్ పేరును చూడవచ్చు - RTL8188EUS. ఇది ఇప్పటికే మంచిది. కొన్ని ఫోరమ్‌లలో నేను అదే పెద్దమనిషి lwfinger నుండి డ్రైవర్ ఈ చిప్‌కి బాగా సరిపోతాడని పోస్ట్‌లను చూశాను (అతను RTL8188EU గురించి మాత్రమే వ్రాసినప్పటికీ).

పార్ట్ 2: ది బోర్న్ సుప్రిమసీ

నేను Git నుండి డ్రైవర్ మూలాలను డౌన్‌లోడ్ చేస్తాను.

Windowsని మళ్లీ ఇన్‌స్టాల్ చేయడానికి మరియు Linux వినియోగదారులు సాధారణంగా అనుబంధించబడిన వాటిని చేయడానికి ఇది సమయం - కొన్ని రకాల నుండి ఏదైనా అసెంబ్లింగ్. డ్రైవర్లను అసెంబ్లింగ్ చేయడం, ప్రోగ్రామ్‌లను కంపైల్ చేయడం నుండి కొద్దిగా భిన్నంగా ఉంటుంది:

make
sudo make install

కానీ కెర్నల్ మాడ్యూల్‌లను కంపైల్ చేయడానికి మన నిర్దిష్ట సంస్కరణకు కెర్నల్ హెడర్ ఫైల్‌లు అవసరం.

స్టాక్ రిపోజిటరీలో ఒక ప్యాకేజీ ఉంది రాస్ప్బెర్రీపి-కెర్నల్-హెడర్స్, కానీ ఇది ఫైళ్ల కెర్నల్ వెర్షన్‌ను కలిగి ఉంది 4.19.66-v7l+, మరియు అది మాకు సరిపోదు. కానీ అవసరమైన సంస్కరణ యొక్క శీర్షికలను పొందడానికి, అది ముగిసినట్లుగా, అనుకూలమైన సాధనం ఉంది rpi-మూలం (గితుబ్‌లో చివర లింక్), దీనితో మీరు అవసరమైన హెడర్‌లను డౌన్‌లోడ్ చేసుకోవచ్చు. మేము రిపోజిటరీని క్లోన్ చేసి, స్క్రిప్ట్‌ని ఎక్జిక్యూటబుల్‌గా చేసి, దాన్ని రన్ చేస్తాము. మొదటి ప్రయోగం లోపంతో విఫలమైంది - ప్రయోజనం లేదు bc. అదృష్టవశాత్తూ, ఇది రిపోజిటరీలో ఉంది మరియు మేము దానిని ఇన్‌స్టాల్ చేస్తాము.

sudo apt-get install bc

దీని తర్వాత, హెడర్‌లను పునఃప్రారంభించడం మరియు డౌన్‌లోడ్ చేయడం (తర్వాత ఏదో సెటప్ చేయడం, నాకు ఇప్పుడు గుర్తులేదు) కొంత సమయం పడుతుంది మరియు మీరు మీ కుర్చీలో తిరిగి కూర్చోవచ్చు, Windows దాని అన్ని వ్యక్తీకరణలలో మెరుగ్గా మారింది.

అన్ని హెడర్‌లు డౌన్‌లోడ్ చేయబడిన తర్వాత, డైరెక్టరీ కనిపిస్తుందో లేదో తనిఖీ చేయండి /lib/modules/4.19.73-v7+ మరియు అందులో డౌన్‌లోడ్ చేయబడిన ఫైల్‌లు ఉన్న ప్రదేశానికి సిమ్‌లింక్ చూపుతుంది (నాకు ఇది /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

సన్నాహక దశ పూర్తయింది, మీరు అసెంబ్లీని ప్రారంభించవచ్చు. మాడ్యూల్‌లను మళ్లీ అసెంబ్లింగ్ చేయడానికి కొంత సమయం పడుతుంది, రాస్ప్‌బెర్రీ వేగవంతమైన జంతువు కాదు (దీనికి 32బిట్ 900Mhz కార్టెక్స్ ARM v7 ఉంది).
కాబట్టి ప్రతిదీ సంకలనం చేయబడింది. మేము డ్రైవర్‌ను 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/.

పార్ట్ 3. ది బోర్న్ అల్టిమేటం

నేను పోర్ట్‌లోకి విజిల్‌ని ప్లగ్ చేస్తాను మరియు... ఏమీ జరగదు. అదంతా శూన్యమా?

నేను ప్రాజెక్ట్‌లోని ఫైల్‌లను అధ్యయనం చేయడం ప్రారంభించాను మరియు వాటిలో ఒకదానిలో సమస్య ఏమిటో నేను కనుగొన్నాను: డ్రైవర్ అది సర్వ్ చేయగల VID/PID ఐడెంటిఫైయర్‌ల పూర్తి జాబితాను నిర్దేశిస్తుంది. మరియు మా పరికరం ఈ డ్రైవర్‌తో పనిచేయడానికి, నేను ఫైల్‌కి నా ఐడిని జోడించాను 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 */
};

నేను డ్రైవర్‌ను మళ్లీ కంపైల్ చేసి సిస్టమ్‌లో మళ్లీ ఇన్‌స్టాల్ చేసాను.

మరియు ఈసారి ప్రతిదీ ప్రారంభమైంది. అడాప్టర్‌లోని లైట్ వెలిగింది మరియు నెట్‌వర్క్ ఇంటర్‌ఫేస్‌ల జాబితాలో కొత్త పరికరం కనిపించింది.

వైర్‌లెస్ ఇంటర్‌ఫేస్‌లను వీక్షించడం క్రింది వాటిని చూపుతుంది:

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

చివరి వరకు చదివిన వారికి బోనస్

మీ అడాప్టర్‌లో గరిష్ట వేగం ఎంత పేర్కొనబడిందనేది పట్టింపు లేదని నేను ఎలా చెప్పానో గుర్తుందా?
కాబట్టి, మాలింకాలో (మోడల్ 4 విడుదలకు ముందు), అన్ని పరికరాలు (ఈథర్నెట్ అడాప్టర్‌తో సహా) ఒకే usb బస్సులో కూర్చుంటాయి. గ్రేట్, సరియైనదా? అందువలన usb బస్సు యొక్క బ్యాండ్‌విడ్త్ దానిలోని అన్ని పరికరాల మధ్య విభజించబడింది. ఈథర్‌నెట్ ద్వారా మరియు usb wi-fi (1 రౌటర్‌కి కనెక్ట్ చేయబడింది) ద్వారా గాలి మరియు వైర్ ద్వారా వేగాన్ని కొలిచేటప్పుడు, అది దాదాపు 20Mbit/s.

PS సాధారణంగా, ఈ నిర్దిష్ట అడాప్టర్ కోసం డ్రైవర్‌ను కంపైల్ చేయడానికి ఈ గైడ్ RPIకి మాత్రమే చెల్లుతుంది. నేను దానిని నా డెస్క్‌టాప్‌లో Linux Mintతో పునరావృతం చేసాను - ప్రతిదీ అక్కడ కూడా పని చేసింది. మీరు మీ కెర్నల్ వెర్షన్‌కు అవసరమైన హెడర్ ఫైల్‌లను అదే విధంగా డౌన్‌లోడ్ చేసుకోవాలి.

UPD. పరిజ్ఞానం ఉన్న వ్యక్తులు సూచించారు: కెర్నల్ సంస్కరణపై ఆధారపడకుండా ఉండటానికి, మీరు dkms ఉపయోగించి డ్రైవర్లను సేకరించి, ఇన్‌స్టాల్ చేయాలి. డ్రైవర్ కోసం readme కూడా ఈ ఎంపికను కలిగి ఉంది.

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. ప్రతిపాదించారు పాచ్ పరికరం ఐడి కోసం lwfinger/rtl8188eu రిపోజిటరీ యొక్క ప్రధాన స్రవంతి శాఖలో ఆమోదించబడింది.

సూచనలు
- RPi USB Wi-Fi అడాప్టర్‌లు
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-మూలం

మూలం: www.habr.com