Хајде да се спријатељимо са РаспберриПи-ом са ТП-Линк ТЛ-ВН727Н

Хеј Хабр!

Једном сам одлучио да свој малин повежем на Интернет преко ваздуха.

Тек што је речено, у ту сврху сам у најближој продавници купио усб ви-фи звиждаљку познате компаније ТП-Линк. Одмах ћу рећи да ово није нека врста нано усб модула, већ прилично велики уређај, величине обичног флеш диска (или, ако желите, величине кажипрста одраслог човека). Пре куповине, мало сам истражио листу подржаних произвођача звиждаљки за РПИ и ТП-Линк је био на листи (међутим, како се касније испоставило, нисам узео у обзир суптилности, јер ђаво, као што знамо , налази се у детаљима). Дакле, почиње хладна прича о мојим несрећама; представљамо вашој пажњи детективску причу у 3 дела. За заинтересоване, обратите се кат.

Чланак Повезивање ВН727Н ВиФи адаптера на Убунту/Минт Делимично ми је помогло, али прво.

Услови проблема

Дато:

  1. једноплочни рачунар Распберри Пи 2 Б в1.1 – 1 ком
  2. усб ви-фи звиждаљка ВН727Н - 1 ком
  3. пар не сасвим искривљених руку - 2 комада
  4. Најновији Распбиан је инсталиран као ОС (засновано на Дебиан 10 Бустер)
  5. верзија кернела 4.19.73-в7+

Пронађите: повежите се на Интернет (Ви-Фи се дистрибуира са вашег кућног рутера)

Након што сам распаковао адаптер, прочитао сам упутства унутра:

Компатибилност система: Виндовс 10/8/7/КСП (чак и небо, чак и КСП) и МацОС 10.9-10.13

Хмм, као и обично, ни речи о Линуку. Било је 2к19, а драјвере је још требало ручно саставити...

Имали смо са собом 2 компајлера, 75 хиљада библиотека, пет бинарних мрља, пола низа голих жена са логом и читаво море заглавља свих језика и ознака. Није да је ово неопходан сет за посао. Али када једном почнете да састављате систем за себе, постаје тешко зауставити се. Једина ствар која ме је забринула су драјвери за ви-фи. Не постоји ништа беспомоћније, неодговорније и корумпираније од изградње покретача из извора. Али знао сам да ћемо пре или касније прећи на ово смеће.

Генерално, као што знате, петљање са усб ви-фи-јем на Линуку јесте болно и помало неукусно (као руски суши).

У кутији се налази и ЦД са драјверима. Без много наде гледам шта је на њему - дефинитивно се нису побринули за то. Интернет претрага ме је довела до веб локације произвођача, али тамо постоји Линук драјвер само за ревизију уређаја v4, а у мом наручју био вКСНУМКС. И поред тога, за веома старе верзије кернела 2.6-3.16. Обесхрабрен неуспехом на самом почетку, већ сам помислио да је требало да узмем ТЛ-ВН727Н (мало је скупљи и може да издржи 300Мбпс у односу на 150 за мој, али како се испоставило, то уопште није важно за малину о томе ће бити писано касније). Али најважније је да драјвери за њега већ постоје и да се једноставно инсталирају као пакет фирмваре-ралинк. Обично можете видети ревизију уређаја на телу уређаја на налепници поред серијског броја.

Даље гуглање и посећивање разних форума није донело много доброг. Очигледно нико пре мене није покушао да повеже такав адаптер на Линукс. Хм, ја сам срећан као утопљеник.

Мада, не, лажем, и посећивање форума (углавном оних на енглеском) је уродило плодом, у неким темама се помињао извесни господин Лвфингер, који је познат по томе што је написао низ драјвера за Ви-Фи адаптере . Његово гит спремиште је на крају чланка у везама. А друга лекција коју сам научио је да морате да идентификујете свој уређај да бисте разумели који драјвер би могао бити прикладан за њега.

Део 1: Борнов идентитет

Када је уређај прикључен на порт, наравно, није светлио ниједан ЛЕД. И уопште није јасно да ли нешто функционише или не.

Пре свега, да сазнам да ли кернел види наш уређај, погледам у дмесг:

[  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

Испоставило се да види, а чак је и јасно да постоји Реалтек чип и ВИД/ПИД самог уређаја на усб магистрали.

Идемо даље и погледајмо лсусб, а овде нас чека још један неуспех

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 дефинитивно ТП-Линк).

У овој фази, радознали читалац је вероватно већ приметио нешто занимљиво, али ћемо то оставити до нашег времена.

Истраживање проблема празних имена довело ме је до сајта са идентификаторима, где се уносе подаци о познатим ВИД/ПИД-у. Наш 2357:0111 није био тамо. Како се касније испоставило, услужни лсусб користи датотеку /уср/схаре/мисц/усб.идс, што је иста листа ИД-ова са овог сајта. Због лепоте екрана, једноставно сам додао линије за добављача ТП-Линк у мом систему.

2357  TP-Link
        0111  TL-WN727N v5.21

Па, исправили смо приказ на листи уређаја, али то нас није довело ни корак ближе избору драјвера. Да бисте изабрали возача, морате знати на ком чипу је направљена ваша звиждаљка. Следећи неуспешни покушаји да се ово сазна на Интернету нису довели ни до чега доброг. Наоружан танким шрафцигером са шрафцигером, пажљиво одвојим поклопац адаптера и опака замисао ујка Лиаоа појављује се у свој својој исконској голотињи. Под лупом можете видети назив чипа - РТЛ8188ЕУС. Ово је већ добро. На неким форумима сам видео постове да је драјвер тог истог господина лвфингера добро прилагођен за овај чип (иако пише само о РТЛ8188ЕУ).

Део 2: Борнова надмоћ

Изворе драјвера преузимам са Гита.

Време је да поново инсталирате Виндовс и урадите оно са чиме се корисници Линука обично повезују - састављање нечега од неких врста. Склапање драјвера, како се испоставило, мало се разликује од компајлирања програма:

make
sudo make install

али за компајлирање модула кернела потребне су нам датотеке заглавља кернела за нашу специфичну верзију.

У складишту залиха постоји пакет распберрипи-кернел-хеадерс, али садржи верзију кернела датотека 4.19.66-в7л+, а то нам не одговара. Али да бисте добили заглавља потребне верзије, како се испоставило, постоји згодан алат рпи-соурце (линк на крају на Гитхуб-у), са којим можете преузети потребна заглавља. Клонирамо спремиште, чинимо скрипту извршном и покрећемо је. Прво покретање не успева са грешком - нема услужног програма bc. На срећу, налази се у спремишту и једноставно га инсталирамо.

sudo apt-get install bc

Након овога, поновно покретање и преузимање заглавља (и затим подешавање нечега, сада се не сећам) траје неко време и можете се завалити у своју столицу, Виндовс је постао бољи у свим својим манифестацијама.

Након што су сва заглавља преузета, проверите да ли се директоријум појављује /либ/модулес/4.19.73-в7+ а у њему симболична веза указује на место где се налазе преузети фајлови (за мене је то /хоме/пи/линук):

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-битни 900Мхз Цортек АРМ в7).
Дакле, све је састављено. Инсталирамо драјвер у другом кораку (направимо инсталацију), док такође копирамо још фајлова фирмвера неопходних за рад драјвера:

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. Борнов ултиматум

Укључим пиштаљку у порт и... ништа се не дешава. Да ли је све било узалуд?

Почињем да проучавам датотеке унутар пројекта и у једној од њих проналазим у чему је био проблем: драјвер наводи комплетну листу ВИД/ПИД идентификатора које може да послужи. А да би наш уређај радио са овим драјвером, једноставно сам додао свој ИД у датотеку ртл8188еу/ос_деп/усб_интф.ц

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), сви уређаји (укључујући етернет адаптер) седе на истој УСБ магистрали. Сјајно, зар не? И стога је пропусни опсег усб магистрале подељен између свих уређаја на њој. Приликом мерења брзине и преко етернета и преко усб ви-фи (повезан са 1 рутером) и ваздушним и жичним путем, износила је око 20Мбит/с.

ПС Генерално, овај водич за компајлирање драјвера за овај одређени адаптер важи не само за РПИ. Затим сам то поновио на свом десктопу са Линук Минт-ом - све је функционисало и тамо. Само треба да преузмете потребне датотеке заглавља за своју верзију кернела на исти начин.

УПД. Упућени људи су предложили: да не бисте зависили од верзије кернела, потребно је да прикупите и инсталирате драјвере помоћу дкмс-а. Реадме за драјвер такође садржи ову опцију.

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

УПД2. Предложено закрпа за ИД уређаја је прихваћен у главну грану лвфингер/ртл8188еу спремишта.

референце
- РПи УСБ Ви-Фи адаптери
- Гитбуб лвфингер/ртл8188еу
- усб.идс
- рпи-соурце

Извор: ввв.хабр.цом