TP-Link TL-WN727N менен RaspberryPi менен достошолу

Эй Хабр!

Бир жолу мен малинамды аба аркылуу интернетке туташтырууну чечтим.

Бул үчүн мен жакынкы дүкөндөн белгилүү TP-Link компаниясынан usb wi-fi ышкырын сатып алдым. Мен дароо айтам, бул кандайдыр бир нано USB модулу эмес, кадимки флэш-дисктин көлөмү (же кааласаңыз, бойго жеткен эркектин сөөмөйүнүн өлчөмү) жөнүндө абдан чоң түзүлүш. Сатып алуудан мурун мен RPI жана TP-Link үчүн колдоого алынган ышкырык өндүрүүчүлөрдүн тизмеси боюнча бир аз изилдөө жүргүздүм (бирок, кийинчерээк белгилүү болгондой, мен кылдаттыктарды эске алган жокмун, анткени шайтан, биз билгендей. , майда-чүйдөсүнө чейин). Ошентип, менин кырсыктарымдын муздак жомогу башталат, биз сиздердин назарыңыздарга 3 бөлүктөн турган детективди сунуштайбыз. Кызыккандар үчүн мышыкка кайрылыңыз.

макала WN727N WiFi адаптерин Ubuntu/Mintге туташтыруу Бул мага жарым-жартылай жардам берди, бирок биринчи кезекте.

Проблеманын шарттары

Берилген:

  1. жалгыз такталуу компьютер Raspberry Pi 2 B v1.1 – 1 даана
  2. usb wi-fi ышкырыгы WN727N - 1 даана
  3. бир жуп эмес, кыйшык колдору - 2 даана
  4. Акыркы Raspbian OS катары орнотулган (Debian 10 Buster негизинде)
  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 алсам керек деп ойлогом (ал бир аз кымбатыраак жана меники үчүн 300гө караганда 150 Мбит/сек ылдамдыкты көтөрө алат, бирок белгилүү болгондой, бул эч кандай мааниге ээ эмес. малина үчүн, бул тууралуу кийинчерээк жазылат). Бирок эң негизгиси, ал үчүн драйверлер бар жана жөн гана пакет катары орнотулган firmware-ralink. Аппараттын ревизиясын адатта сериялык номердин жанындагы чаптамадан көрө аласыз.

Андан ары гугл издөө жана ар кандай форумдарга баруу көп жакшылык алып келген жок. Мага чейин эч ким мындай адаптерди Linux менен туташтырууга аракет кылган эмес окшойт. Мм, мен чөгүп кеткен адамдай бактылуумун.

Жок, калп айтып жатам, форумдарга (негизинен англис тилдүү) баруу да өз жемишин берди, кээ бир темаларда Wi-Fi адаптерлери үчүн бир катар драйверлерди жазуу менен белгилүү болгон Lwfinger мырза жөнүндө сөз болгон. . Анын git репозиторийлери шилтемелердеги макаланын аягында. Ал эми мен үйрөнгөн экинчи сабак - бул үчүн кайсы драйвер ылайыктуу экенин түшүнүү үчүн түзмөгүңүздү аныктоо керек.

1-бөлүк: Bourne Identity

Аппарат портуна сайылганда, албетте, эч кандай 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-Link).

Бул этапта, кызыктыруучу окурман, балким, буга чейин эле кызыктуу бир нерсени байкагандыр, бирок биз аны биздин заманга калтырабыз.

Бош аттардын көйгөйүн изилдөө мени идентификаторлору бар сайтка алып барды, анда белгилүү 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

бирок ядро ​​модулдарын компиляциялоо үчүн бизге конкреттүү версиябыз үчүн өзөк баш файлы керек.

Сток репозиторийинде пакет бар raspberrypi-kernel-headers, бирок ал файлдардын ядро ​​версиясын камтыйт 4.19.66-v7l+, жана бул бизге туура келбейт. Бирок талап кылынган версиянын аталыштарын алуу үчүн, белгилүү болгондой, ыңгайлуу курал бар rpi-булагы (Githubдагы шилтеме), анын жардамы менен сиз керектүү аталыштарды жүктөп алсаңыз болот. Биз репозиторийди клондойбуз, скриптти аткарылуучу кылып, аны иштетебиз. Биринчи ишке киргизүү ката менен ишке ашпай калды - утилита жок 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

Даярдоо баскычы аяктады, сиз чогултууну баштасаңыз болот. Модулдарды кайра чогултуу бир аз убакытты талап кылат, Raspberry тез жырткыч эмес (анын 32бит 900Mhz Cortex 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-модель чыкканга чейин) бардык түзмөктөр (анын ичинде Ethernet адаптери) бир USB автобусунда отурушат. Сонун, туурабы? Ошентип, USB автобустун өткөрүү жөндөмдүүлүгү андагы бардык түзмөктөрдүн ортосунда бөлүнөт. Ethernet аркылуу да, usb wi-fi (1 роутерге туташкан) аркылуу да аба жана зым аркылуу ылдамдыкты өлчөгөндө, ал 20 Мбит/с тегерегинде болгон.

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-булагы

Source: www.habr.com