TP-Link TL-WN727N bilan RaspberryPi bilan do'stlashaylik

Hey Xabr!

Bir marta men malinani havo orqali Internetga ulashga qaror qildim.

Aytgancha, shu maqsadda men eng yaqin do'kondan taniqli TP-Link kompaniyasidan usb wi-fi hushtakini sotib oldim. Men darhol aytamanki, bu nano usb moduli emas, balki oddiy flesh-disk o'lchamidagi (yoki agar xohlasangiz, kattalar erkakning ko'rsatkich barmog'i o'lchamidagi) juda katta qurilma. Sotib olishdan oldin, men RPI uchun qo'llab-quvvatlanadigan hushtak ishlab chiqaruvchilari ro'yxatini biroz tadqiq qildim va TP-Link ro'yxatda edi (ammo, keyinroq ma'lum bo'lishicha, men nozikliklarni hisobga olmadim, chunki shayton, biz bilganimizdek. , tafsilotlarda). Shunday qilib, mening baxtsiz hodisalarim haqidagi sovuq ertak boshlanadi, biz sizning e'tiboringizga 3 qismdan iborat detektiv hikoyani taqdim etamiz. Qiziqqanlar uchun mushukka murojaat qiling.

Maqola WN727N WiFi adapterini Ubuntu/Mint-ga ulash Bu menga qisman yordam berdi, lekin birinchi navbatda.

Muammoning shartlari

May:

  1. bitta doskali kompyuter Raspberry Pi 2 B v1.1 – 1 dona
  2. usb wi-fi hushtak WN727N - 1 dona
  3. bir juft juda egri bo'lmagan qo'llar - 2 dona
  4. Eng so'nggi Raspbian OS sifatida o'rnatilgan (Debian 10 Buster asosida)
  5. yadro versiyasi 4.19.73-v7+

Toping: Internetga ulaning (Wi-Fi uy routeringizdan tarqatiladi)

Adapterni o'rashdan so'ng, men ichidagi ko'rsatmalarni o'qib chiqdim:

Tizim muvofiqligi: Windows 10/8/7/XP (hatto osmon, hatto XP) va MacOS 10.9-10.13

Hmm, odatdagidek, Linux haqida bir so'z emas. Bu 2k19 edi va drayverlarni hali ham qo'lda yig'ish kerak edi ...

Bizda 2 ta kompilyator, 75 ming kutubxona, beshta ikkilik bloklar, logotipli yalang'och ayollarning yarmi va barcha tillar va belgilarning sarlavhalari bor edi. Bu ish uchun zarur bo'lgan to'plam emas. Ammo o'zingiz uchun tizimni yig'ishni boshlaganingizdan so'ng, uni to'xtatish qiyin bo'ladi. Meni xavotirga solgan yagona narsa wi-fi uchun drayverlar edi. Haydovchilarni manbadan qurishdan ko'ra ojiz, mas'uliyatsiz va buzuqroq narsa yo'q. Lekin ertami-kechmi bu axlatga o'tishimizni bilardim.

Umuman olganda, siz bilganingizdek, Linuxda USB Wi-Fi bilan shug'ullanish og'riqli va biroz ta'msiz (rus sushi kabi).

Qutida drayverlarga ega kompakt disk ham mavjud. Unda nima borligini ko'p umid qilmasdan qarayman - ular bu haqda g'amxo'rlik qilishmagan. Internetdagi qidiruv meni ishlab chiqaruvchining veb-saytiga olib keldi, lekin u erda faqat qurilmani qayta ko'rib chiqish uchun Linux drayveri mavjud v4, va mening qo'limda edi v5.21. Bundan tashqari, juda eski yadro versiyalari uchun 2.6-3.16. Boshida muvaffaqiyatsizlikdan tushkunlikka tushib, men allaqachon TL-WN727N ni olishim kerak deb o'yladim (bu biroz qimmatroq va meniki uchun 300 Mbit / s ga nisbatan 150 Mbit / s tezlikka ega, ammo ma'lum bo'lishicha, bu umuman muhim emas. malina uchun bu haqda keyinroq yoziladi). Ammo eng muhimi shundaki, u uchun drayverlar allaqachon mavjud va shunchaki paket sifatida o'rnatiladi proshivka-ralink. Siz odatda qurilmaning korpusidagi seriya raqami yonidagi stikerda qurilma tahririni ko'rishingiz mumkin.

Keyinchalik googling va turli forumlarga tashrif buyurish unchalik yaxshi natija bermadi. Ko'rinishidan, mendan oldin hech kim bunday adapterni Linuxga ulashga harakat qilmagan. Hm, men cho'kib ketgan odam kabi omadliman.

Garchi, yo'q, men yolg'on gapiryapman, forumlarga (asosan ingliz tilidagi) tashrif buyurish ham o'z samarasini berdi, ba'zi mavzularda Wi-Fi adapterlari uchun bir qator drayverlarni yozish bilan mashhur bo'lgan janob Lvfinger haqida so'z bordi. . Uning git ombori havolalardagi maqolaning oxirida. Va men o'rgangan ikkinchi saboq shundaki, qaysi drayver unga mos kelishini tushunish uchun qurilmangizni aniqlashingiz kerak.

1-qism: Bourne identifikatori

Qurilma portga ulanganda, albatta, hech qanday LED yonmaydi. Va umuman olganda, biror narsa ishlaydimi yoki yo'qmi, hech qanday tarzda aniq emas.

Avvalo, yadro bizning qurilmamizni ko'ryaptimi yoki yo'qligini bilish uchun men dmesg-ga qarayman:

[  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

Ma'lum bo'lishicha, u ko'radi va hatto USB avtobusida Realtek chipi va qurilmaning VID/PID-kodi borligi aniq.

Keling, uzoqroqqa boraylik va qaraymiz lsusb, va bu erda bizni yana bir muvaffaqiyatsizlik kutmoqda

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

Tizim uning qanday qurilma ekanligini bilmaydi va uyalmasdan nom o'rniga bo'sh joyni ko'rsatadi (garchi sotuvchi=2357, albatta, TP-Link).

Ushbu bosqichda qiziquvchan o'quvchi allaqachon qiziqarli narsani payqagan bo'lishi mumkin, ammo biz buni bizning vaqtimizgacha qoldiramiz.

Bo'sh nomlar muammosini o'rganish meni identifikatorlari bo'lgan saytga olib keldi, u erda ma'lum VID/PID ma'lumotlari kiritilgan. Bizning 2357:0111 u erda yo'q edi. Keyinchalik ma'lum bo'lishicha, yordamchi dastur lsusb fayldan foydalanadi /usr/share/misc/usb.ids, bu saytdagi identifikatorlarning bir xil ro'yxati. Displeyning go'zalligi uchun men tizimimda TP-Link sotuvchisi uchun qatorlarni qo'shdim.

2357  TP-Link
        0111  TL-WN727N v5.21

Xo'sh, biz qurilmalar ro'yxatida displeyni tuzatdik, lekin bu bizni haydovchi tanlashga bir qadam ham yaqinlashtirmadi. Haydovchini tanlash uchun siz hushtakingiz qaysi chipda qilinganligini bilishingiz kerak. Buni Internetda aniqlashning keyingi muvaffaqiyatsiz urinishlari hech qanday yaxshi narsaga olib kelmadi. Yupqa tirqishli tornavida bilan qurollanib, men adapter qopqog'ini ehtiyotkorlik bilan yechib oldim va Liao amakining shafqatsiz miyasi butun yalang'ochligi bilan namoyon bo'ladi. Kattalashtiruvchi oyna ostida siz chip nomini ko'rishingiz mumkin - RTL8188EUS. Bu allaqachon yaxshi. Ba'zi forumlarda men o'sha jentlmen lwfinger haydovchisi ushbu chip uchun juda mos ekanligi haqidagi xabarlarni ko'rdim (garchi u faqat RTL8188EU haqida yozsa ham).

2-qism: Bourne ustunligi

Men haydovchi manbalarini Git'dan yuklab olaman.

Windows-ni qayta o'rnatish va Linux foydalanuvchilari odatda bog'langan narsalarni qilish vaqti keldi - ba'zi turdagi narsalarni yig'ish. Ma'lum bo'lishicha, drayverlarni yig'ish dasturlarni kompilyatsiya qilishdan deyarli farq qilmaydi:

make
sudo make install

lekin yadro modullarini kompilyatsiya qilish uchun bizga maxsus versiyamiz uchun yadro sarlavhasi fayllari kerak bo'ladi.

Birja omborida paket mavjud raspberrypi-yadro sarlavhalari, lekin u fayllarning yadro versiyasini o'z ichiga oladi 4.19.66-v7l+, va bu bizga mos kelmaydi. Ammo kerakli versiyaning sarlavhalarini olish uchun, ma'lum bo'lishicha, qulay vosita mavjud rpi-manba (Github oxiridagi havola), uning yordamida kerakli sarlavhalarni yuklab olishingiz mumkin. Biz omborni klonlaymiz, skriptni bajariladigan qilib yaratamiz va uni ishga tushiramiz. Birinchi ishga tushirish xato bilan muvaffaqiyatsiz tugadi - yordamchi dastur yo'q bc. Yaxshiyamki, u omborda va biz uni oddiygina o'rnatamiz.

sudo apt-get install bc

Shundan so'ng, sarlavhalarni qayta ishga tushirish va yuklab olish (va keyin biror narsani o'rnatish, hozir esimda yo'q) biroz vaqt talab etadi va siz stulda o'tirishingiz mumkin, Windows barcha ko'rinishlarida yaxshilandi.

Barcha sarlavhalar yuklab olingandan so'ng, katalog paydo bo'lishini tekshiring /lib/modules/4.19.73-v7+ va unda symlink yuklab olingan fayllar joylashgan joyga ishora qiladi (men uchun bu /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

Tayyorgarlik bosqichi tugallandi, siz yig'ishni boshlashingiz mumkin. Modullarni qayta yig'ish biroz vaqt talab etadi, Raspberry tezkor hayvon emas (u 32bit 900Mhz Cortex ARM v7 ga ega).
Shunday qilib, hamma narsa yig'ildi. Biz drayverni 2-bosqichda o'rnatamiz (o'rnatishni amalga oshiramiz), shuningdek, drayverning ishlashi uchun zarur bo'lgan ko'proq dasturiy ta'minot fayllarini nusxalaymiz:

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-qism. Bourne Ultimatum

Men hushtakni portga ulayman va ... hech narsa sodir bo'lmaydi. Hammasi bekorgami?

Men loyiha ichidagi fayllarni o'rganishni boshlayman va ulardan birida muammo nimada ekanligini topdim: haydovchi o'zi xizmat qilishi mumkin bo'lgan VID/PID identifikatorlarining to'liq ro'yxatini belgilaydi. Va bizning qurilmamiz ushbu drayver bilan ishlashi uchun men oddiygina identifikatorimni faylga qo'shdim 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 */
};

Men drayverni qayta kompilyatsiya qildim va uni tizimga qayta o'rnatdim.

Va bu safar hammasi boshlandi. Adapterdagi chiroq yondi va tarmoq interfeyslari ro'yxatida yangi qurilma paydo bo'ldi.

Simsiz interfeyslarni ko'rish quyidagilarni ko'rsatadi:

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

Oxirigacha o'qiganlar uchun bonus

Sizning adapteringizda qanday maksimal tezlik ko'rsatilganligi muhim emasligini qanday aytganimni eslaysizmi?
Shunday qilib, Malinkada (4-model chiqarilishidan oldin) barcha qurilmalar (jumladan, Ethernet adapteri) bir xil USB avtobusida o'tiradi. Ajoyib, to'g'rimi? Va shuning uchun usb avtobusining tarmoqli kengligi undagi barcha qurilmalar o'rtasida bo'linadi. Ethernet orqali ham, usb wi-fi (1 routerga ulangan) orqali ham havo, ham sim orqali tezlikni o'lchashda u 20 Mbit/s atrofida edi.

PS Umuman olganda, ushbu adapter uchun drayverni kompilyatsiya qilish bo'yicha ushbu qo'llanma nafaqat RPI uchun amal qiladi. Keyin men buni ish stolimda Linux Mint bilan takrorladim - u erda ham hamma narsa ishladi. Xuddi shu tarzda yadro versiyangiz uchun kerakli sarlavha fayllarini yuklab olishingiz kifoya.

UPD. Bilimli odamlar taklif qilishdi: yadro versiyasiga bog'liq bo'lmaslik uchun dkms-dan foydalanib drayverlarni yig'ish va o'rnatish kerak. Haydovchi uchun readme ham ushbu parametrni o'z ichiga oladi.

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. Taklif etilgan yamoq qurilma identifikatori lwfinger/rtl8188eu omborining asosiy bo'limiga qabul qilindi.

Manbalar
- RPi USB Wi-Fi adapterlari
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-manba

Manba: www.habr.com