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

Хмм, ердийнх шиг, Линуксийн тухай ганц ч үг биш. Энэ нь 2k19 байсан бөгөөд жолооч нарыг гараар угсрах шаардлагатай хэвээр байна ...

Бидэнтэй хамт 2 эмхэтгэгч, 75 мянган номын сан, таван хоёртын бөмбөрцөг, лого бүхий нүцгэн эмэгтэйчүүдийн хагас массив, бүх хэл, тэмдэглэгээний толгойн бүхэл бүтэн далай байсан. Энэ нь ажилд шаардлагатай багц биш юм. Гэхдээ та өөртөө зориулж систем угсарч эхэлбэл үүнийг зогсооход хэцүү болно. Миний санаа зовоосон цорын ганц зүйл бол wi-fi-ийн драйверууд байв. Жолооч нарыг эх сурвалжаас нь босгох шиг арчаагүй, хариуцлагагүй, авилгад идэгдсэн зүйл байхгүй. Гэхдээ эрт орой хэзээ нэгэн цагт бид энэ хог руу шилжих болно гэдгийг би мэдэж байсан.

Ерөнхийдөө, та бүхний мэдэж байгаагаар Linux дээр USB wi-fi-тай тоглох нь чухал юм өвдөлттэй, бага зэрэг амтгүй (Оросын суши гэх мэт).

Хайрцаг нь драйверуудтай CD-г агуулдаг. Би түүн дээр юу байгааг харлаа - тэд үүнд анхаарал хандуулаагүй нь лавтай. Интернэт хайлт намайг үйлдвэрлэгчийн вэб сайт руу авчирсан боловч тэнд зөвхөн төхөөрөмжийг засах зориулалттай Линукс драйвер байдаг v4, мөн миний гарт байсан v5.21. Үүнээс гадна, маш хуучин цөмийн хувилбаруудын хувьд 2.6-3.16. Эхэндээ бүтэлгүйтлээс болж сэтгэлээр унасан би TL-WN727N авах ёстой гэж аль хэдийн бодсон (энэ нь арай илүү үнэтэй бөгөөд минийх 300-аас 150Mbps хурдтай байдаг, гэхдээ энэ нь огт хамаагүй юм. бөөрөлзгөнө, энэ тухай дараа нь бичих болно). Гэхдээ хамгийн чухал зүйл бол түүний драйверууд аль хэдийн байгаа бөгөөд зүгээр л багц хэлбэрээр суулгасан байх явдал юм firmware-ralink. Та ихэвчлэн серийн дугаарын хажууд байгаа наалт дээр төхөөрөмжийн бие дээрх төхөөрөмжийн засварыг харж болно.

Цаашид Google хайлт хийх, янз бүрийн форумд зочлох нь тийм ч сайн зүйл авчирсангүй. Надаас өмнө хэн ч Линукс руу ийм адаптер холбох гэж оролдоогүй бололтой. Хмм, би живсэн хүн шиг азтай.

Үгүй ээ, би худлаа ярьж байна, форумд зочилсон (ихэвчлэн англи хэл дээр байдаг) бас үр дүнгээ өгсөн боловч зарим сэдвээр 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 байгаа нь тодорхой болсон.

Цаашаа явж харцгаая лусб, энд бас нэг бүтэлгүйтэл биднийг хүлээж байна

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

Систем нь энэ нь ямар төрлийн төхөөрөмж болохыг мэдэхгүй бөгөөд нэрний оронд хоосон орон зайг харуулдаг (гэхдээ vendor=2357 нь мэдээж TP-Link).

Энэ үе шатанд сониуч уншигч аль хэдийн сонирхолтой зүйлийг анзаарсан байх, гэхдээ бид үүнийг цаг хугацаа хүртэл үлдээх болно.

Хоосон нэрсийн асуудлыг судалснаар намайг танигч VID/PID-ийн мэдээллийг оруулсан сайт руу хөтөлсөн. Манай 2357:0111 тэнд байгаагүй. Энэ нь дараа нь болсон шиг, хэрэгсэл лусб файлыг ашигладаг /usr/share/misc/usb.ids, энэ нь энэ сайтын ID-н жагсаалт юм. Дэлгэцийн гоо үзэсгэлэнг сайжруулахын тулд би өөрийн системд TP-Link үйлдвэрлэгчийн шугамыг нэмсэн.

2357  TP-Link
        0111  TL-WN727N v5.21

За, бид төхөөрөмжүүдийн жагсаалтад дэлгэцийг зассан боловч энэ нь драйвер сонгоход нэг алхам ойртуулсангүй. Жолооч сонгохын тулд шүгэл ямар чип дээр хийгдсэнийг мэдэх хэрэгтэй. Үүнийг интернетээс олж мэдэх дараагийн амжилтгүй оролдлого нь сайн зүйлд хүргэсэнгүй. Нимгэн ховилтой халиваар зэвсэглэн адаптерийн таглааг болгоомжтой тайлахад Ляо ахын харгис санаа нүцгэн төрхөөрөө гарч ирэв. Томруулдаг шилний доор чипийн нэрийг харж болно - RTL8188EUS. Энэ аль хэдийн сайн байна. Зарим форум дээр би тэр эрхэм lwfinger-ийн жолооч энэ чипэд маш сайн тохирдог гэсэн нийтлэлүүдийг харсан (хэдийгээр тэр зөвхөн RTL8188EU-ийн талаар бичдэг).

2-р хэсэг: Борнийн эрх мэдэл

Би драйверын эх сурвалжийг Git-ээс татаж авдаг.

Windows-ийг дахин суулгаж, Линукс хэрэглэгчдийн ихэвчлэн холбоотой байдаг зүйлийг хийх цаг болжээ - ямар нэгэн зүйл угсарч байна. Драйверуудыг угсрах нь програмыг эмхэтгэхээс бараг ялгаатай биш юм.

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 бит 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-р хэсэг. Bourne Ultimatum

Би шүгэлээ порт руу залгаад... юу ч болохгүй. Энэ бүхэн дэмий хоосон байсан гэж үү?

Би төслийн доторх файлуудыг судалж эхэлсэн бөгөөд тэдгээрийн аль нэгэнд нь асуудал юу болохыг олж мэдэв: драйвер нь үйлчилж чадах VID/PID таниулагчдын бүрэн жагсаалтыг зааж өгдөг. Манай төхөөрөмж энэ драйвертай ажиллахын тулд би зүгээр л өөрийн ID-г файлд нэмсэн 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

Дуустал нь уншсан хүмүүст зориулсан урамшуулал

Таны адаптер дээр хамгийн дээд хурд ямар байх нь хамаагүй гэж хэлснийг санаж байна уу?
Тиймээс, Malinka дээр (4-р загвар гарахаас өмнө) бүх төхөөрөмжүүд (ethernet адаптер гэх мэт) нэг USB автобусанд суудаг. Гайхалтай, тийм үү? Тиймээс USB автобусны зурвасын өргөн нь түүн дээрх бүх төхөөрөмжүүдийн хооронд хуваагддаг. Ethernet болон usb wi-fi (1 чиглүүлэгчид холбогдсон) хоёулаа агаарын болон утсаар хурдыг хэмжихэд 20Mbit/s орчим байсан.

P.S. Ерөнхийдөө энэ адаптерийн драйверийг эмхэтгэх энэхүү гарын авлага нь зөвхөн 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. Санал болгосон нөхөөс төхөөрөмжийн ID-г lwfinger/rtl8188eu репозиторын үндсэн салбар болгон хүлээн зөвшөөрсөн.

лавлагаа
- RPi USB Wi-Fi адаптерууд
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-эх сурвалж

Эх сурвалж: www.habr.com