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 операциялық жүйе ретінде орнатылған (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-мен айналысу ауыр және біршама дәмсіз (Орыс сушиі сияқты).

Қорапта драйверлері бар ықшам дискі де бар. Үмітсіз мен ондағы нәрсеге қараймын - олар бұл туралы қамқорлық жасамаған. Интернеттегі іздеу мені өндірушінің веб-сайтына әкелді, бірақ ол жерде тек құрылғыны қайта қарауға арналған Linux драйвері бар v4, және менің қолымда болды v5.21. Сонымен қатар, ядроның өте ескі нұсқалары үшін 2.6-3.16. Бастапқыда сәтсіздікке ұшырағандықтан мен TL-WN727N алуым керек деп ойладым (ол сәл қымбатырақ және менікі 300-ге қарағанда 150 Мбит/с-қа дейін жетеді, бірақ белгілі болғандай, бұл мүлдем маңызды емес. таңқурай үшін бұл кейінірек жазылады). Бірақ ең бастысы, ол үшін драйверлер бұрыннан бар және жай ғана пакет ретінде орнатылған микробағдарлама-ralink. Әдетте сериялық нөмірдің жанындағы жапсырмада құрылғының корпусындағы құрылғының нұсқасын көруге болады.

Әрі қарай Google іздеу және әртүрлі форумдарға бару көп жақсылыққа әкелмеді. Менен бұрын ешкім мұндай адаптерді Linux-қа қосуға тырыспаған сияқты. Мм, мен суға батқан адам сияқты бақыттымын.

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

1-бөлім: Борнның жеке басы

Құрылғы портқа қосылған кезде, әрине, ешқандай жарық диоды жанбайды. Жалпы, бірдеңе жұмыс істей ме, жоқ па, бұл анық емес.

Ең алдымен, ядро ​​​​біздің құрылғымызды көретінін білу үшін мен 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, бұл осы сайттағы идентификаторлардың бірдей тізімі. Дисплейдің әдемілігі үшін мен жүйедегі TP-Link жеткізушісі үшін жай ғана жолдарды қостым.

2357  TP-Link
        0111  TL-WN727N v5.21

Біз құрылғылар тізіміндегі дисплейді түзеттік, бірақ бұл драйверді таңдауға бір қадам жақындата алмады. Драйверді таңдау үшін ысқырықтың қандай чипте жасалғанын білу керек. Мұны Интернетте анықтаудың келесі сәтсіз әрекеттері жақсы ештеңе әкелмеді. Жұқа саңылаулы бұрағышпен қаруланып, адаптердің қақпағын абайлап шешіп алдым және Ляо ағайдың зұлым ойы барша жалаңаш күйінде көрінеді. Үлкейткіш әйнек астында чиптің атын көруге болады - RTL8188EUS. Бұл қазірдің өзінде жақсы. Кейбір форумдарда мен сол джентльмен lwfinger драйвері бұл чипке жақсы сәйкес келетіні туралы хабарламаларды көрдім (ол тек RTL8188EU туралы жазса да).

2-бөлім: Борн үстемдігі

Мен драйвер көздерін Git-тен жүктеп аламын.

Windows жүйесін қайта орнату және Linux пайдаланушылары әдетте байланыстыратын нәрсені жасау уақыты келді - қандай да бір түрдегі нәрсені жинау. Драйверлерді құрастыру, белгілі болғандай, бағдарламаларды құрастырудан аз ерекшеленеді:

make
sudo make install

бірақ ядро ​​модульдерін құрастыру үшін бізге нақты нұсқамыз үшін ядро ​​тақырыбы файлдары қажет.

Қор репозитарийінде пакет бар raspberrypi-ядро тақырыптары, бірақ ол файлдардың ядролық нұсқасын қамтиды 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

Дайындық кезеңі аяқталды, сіз құрастыруға кірісе аласыз. Модульдерді қайтадан жинау біраз уақытты алады, таңқурай жылдам жануар емес (оның 32 бит 900 МГц 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-көзі

Ақпарат көзі: www.habr.com