Teman RaspberryPi dengan TP-Link TL-WN727N

Halo, Habr!

Entah bagaimana saya berpikir untuk menghubungkan raspberry saya ke Internet melalui udara.

Tidak lama setelah dilakukan, untuk ini, peluit dari perusahaan TP-Link yang terkenal dibeli di toko wi-fi usb terdekat. Saya harus mengatakan segera bahwa ini bukan semacam modul nano usb, tetapi cukup perangkat dimensi tentang ukuran flash drive biasa (baik, atau jika Anda suka dengan jari telunjuk seorang pria dewasa). Sebelum membeli, saya mempelajari daftar produsen peluit yang didukung untuk RPI dan TP-Link sedikit dalam daftar (meskipun ternyata kemudian, saya tidak memperhitungkan seluk-beluknya, karena iblis diketahui memiliki rincian). Jadi, kisah dingin misadventures saya dimulai, sebuah kisah detektif dalam 3 bagian ditawarkan untuk perhatian Anda. Tertarik silakan di bawah kucing.

Artikel yang menghubungkan adaptor WiFi WN727N ke Ubuntu / Mint sebagian membantu saya, tetapi hal pertama yang pertama.

Kondisi tugas


Diberikan:

  1. Komputer papan tunggal Raspberry Pi 2 B v1.1 - 1 pc.
  2. usb wifi whistle WN727N - 1 buah
  3. sepasang tangan tidak cukup bengkok - 2 buah
  4. Raspbian terbaru diinstal sebagai OS (berdasarkan debian 10 Buster)
  5. kernel versi 4.19.73-v7 +

Temukan: terhubung ke Internet (Wi-Fi terdengar dari router rumah)

Setelah membongkar adaptor, saya membaca instruksi di dalam:
Kompatibilitas Sistem: Windows 10/8/7 / XP (bahkan langit, bahkan XP) dan MacOS 10.9-10.13

Hmm, tentang Linux, seperti biasa, bukan sepatah kata pun. Itu 2k19, tetapi driver masih perlu dirakit secara manual ...
Kami memiliki 2 kompiler, 75 ribu perpustakaan, lima gumpalan biner, setengah massa wanita telanjang dengan logo, dan seluruh lautan tajuk semua bahasa dan markup. Bukan berarti itu diperlukan untuk bekerja. Tetapi jika Anda mulai menyusun sistem untuk diri Anda sendiri, itu menjadi sulit untuk dihentikan. Satu-satunya hal yang membuat saya khawatir adalah driver di bawah wi-fi. Tidak ada yang lebih tak berdaya, tidak bertanggung jawab dan manja selain perakitan driver dari sumber. Tetapi saya tahu bahwa cepat atau lambat kita akan beralih ke sampah ini.


Secara umum, seperti yang Anda tahu, sibuk dengan usb wi-fi di Linux menyakitkan dan agak hambar (seperti sushi Rusia).

Kotak itu juga berisi CD driver. Tanpa banyak harapan, saya melihat apa yang ada di dalamnya - pasti, mereka tidak peduli. Pencarian di Internet membawa saya ke situs web produsen, tetapi ada driver Linux hanya untuk merevisi perangkat v4 , dan saya memiliki v5.21 di tangan. Selain itu, di bawah versi kernel 2.6-3.16 yang sangat lama. Berkecil hati oleh kegagalan di awal, saya sudah berpikir bahwa perlu untuk mengambil TL-WN727N (ini sedikit lebih mahal dan dapat melakukan 300Mbps dibandingkan 150 untuk tambang, tetapi ternyata tidak relevan untuk raspberry, itu akan ditulis nanti). Tetapi yang paling penting, driver untuk itu sudah ada dan diinstal hanya dengan paket firmware-ralink . Anda biasanya dapat melihat revisi perangkat pada case perangkat pada stiker di sebelah nomor seri.

Lebih lanjut googling dan mengunjungi berbagai forum tidak membawa sesuatu yang baik. Rupanya belum ada yang mencoba menghubungkan adaptor ke Linux sebelum saya. Hmm, aku beruntung sebagai pria yang tenggelam.

Meskipun tidak, saya berbohong, forum mengunjungi (kebanyakan yang berbahasa Inggris) juga terbayar, dalam beberapa topik ada penyebutan Mr. lwfinger tertentu, yang terkenal karena menulis sejumlah driver untuk adapter Wi-Fi. Repositori git-nya ada di akhir artikel di tautan. Dan pelajaran kedua yang saya pelajari adalah Anda perlu mengidentifikasi perangkat Anda untuk memahami driver mana yang cocok untuknya.

Bagian 1. Identifikasi Bourne


Saat Anda menghidupkan perangkat di port, tidak ada LED, tentu saja, menyala. Dan secara umum, dalam beberapa hal tidak jelas apakah sesuatu berfungsi atau tidak.

Pertama-tama, untuk mengetahui apakah kernel melihat perangkat kami, saya mencari di 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 

Ternyata terlihat, dan bahkan jelas bahwa ada chip Realtek dan perangkat VID / PID di bus usb itu sendiri.

Kita melangkah lebih jauh, melihat lsusb , dan kemudian kegagalan lain menunggu kita

 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 

Sistem tidak tahu apa perangkat ini, dan dengan malu-malu menunjukkan ruang kosong alih-alih nama (meskipun vendor = 2357 persis TP-Link).

Pada tahap ini, pembaca yang ingin tahu mungkin sudah melihat sesuatu yang menarik, tetapi kami akan menunda sampai waktu kita.

Investigasi masalah nama kosong membawa saya ke situs dengan pengidentifikasi, di mana informasi tentang VID / PID yang dikenal dimasukkan. 2357: 0111 kami tidak ada di sana. Ternyata nanti, lsusb menggunakan file /usr/share/misc/usb.ids , yang merupakan daftar pengidentifikasi yang sama dari situs ini. Demi kecantikan tampilan, saya hanya menambahkan baris untuk vendor TP-Link ke dalam sistem saya.

 2357 TP-Link 0111 TL-WN727N v5.21 

Ya, kami memperbaiki tampilan dalam daftar perangkat, tetapi ini tidak membawa kami selangkah lebih dekat untuk memilih driver. Untuk memilih driver, Anda perlu tahu chip peluit Anda dibuat. Upaya gagal berikutnya untuk mencari tahu di Internet tidak menghasilkan sesuatu yang baik. Berbekal obeng berlubang tipis, saya dengan lembut membuka tutup adaptor dan saya melihat gagasan jahat paman Liao dalam semua ketelanjangannya yang murni. Di bawah kaca pembesar, Anda dapat melihat nama chip - RTL8188EUS . Ini sudah bagus. Di beberapa forum, saya melihat posting bahwa driver dari Mr. lwfinger itu sangat cocok untuk chip ini (walaupun faktanya hanya dikatakan tentang RTL8188EU).

Bagian 2. Supremasi Bourne


Saya mengunduh sumber driver dari gita.

Inilah saatnya untuk menginstal ulang shindous untuk melakukan apa yang biasanya dikaitkan dengan Linux - merakit sesuatu dari jenisnya. Perakitan driver ternyata sedikit berbeda dari program kompilasi:

 make sudo make install 

tetapi untuk mengkompilasi modul kernel, kita membutuhkan file header kernel untuk versi spesifik kita.

Ada paket raspberrypi-kernel-header dalam repositori saham, tetapi itu berisi versi file untuk kernel 4.19.66-v7l + , dan ini tidak cocok untuk kita. Tetapi ternyata, untuk mendapatkan tajuk dari versi yang diinginkan ada alat rpi -source yang nyaman (tautan di bagian akhir github), yang dengannya Anda dapat mengunduh tajuk yang diperlukan. Kami mengkloning repositori, membuat skrip dapat dieksekusi, menjalankannya. Mulai pertama gagal dengan kesalahan - tidak ada utilitas bc . Untungnya, itu ada di repositori dan kami baru saja menginstalnya.

 sudo apt-get install bc 

Setelah itu, memulai ulang dan mengunduh header (dan kemudian menyiapkan sesuatu, saya tidak ingat sekarang) membutuhkan waktu dan Anda dapat duduk dan menjadi lebih baik dalam semua manifestasinya .

Setelah semua tajuk telah diunduh, kami memeriksa bahwa direktori /lib/modules/4.19.73-v7+ muncul dan di dalamnya symlink menunjuk ke tempat file yang diunduh (saya punya ini / 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 

Fase persiapan selesai, Anda dapat mulai merakit. Perakitan modul lagi membutuhkan waktu tertentu, raspberry bukanlah binatang yang cepat (ia memiliki batu Cortex ARM v7 32bit 900Mhz).
Jadi, semuanya terkompilasi. Kami menginstal driver pada langkah ke-2 (make install), sambil menyalin juga file firmware yang diperlukan agar driver berfungsi:

 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/. 

Bagian 3. Bourne Ultimatum


Aku menempel peluit di pelabuhan dan ... tidak ada yang terjadi. Apakah semuanya sia-sia?

Saya mulai mempelajari file-file di dalam proyek dan di salah satu dari mereka saya menemukan apa masalahnya: driver menunjukkan daftar lengkap VID / PID yang dapat dilayani. Dan agar perangkat kami dapat bekerja dengan driver ini, saya baru saja menambahkan id saya ke file 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 */ }; 

Mengkompilasi ulang driver dan menginstalnya kembali dalam sistem.

Dan kali ini semuanya dimulai. Lampu pada adaptor menyala dan perangkat baru muncul di daftar antarmuka jaringan.

Melihat antarmuka nirkabel memberikan yang berikut:

 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 

Bonus untuk mereka yang telah membaca sampai akhir


Ingat bagaimana saya mengatakan bahwa tidak masalah berapa kecepatan maksimum yang dinyatakan pada adaptor Anda?
Jadi, pada raspberry (sebelum rilis model 4), semua perangkat (termasuk adaptor ethernet) duduk di bus usb yang sama. Bagus kan? Dan bandwidth bus usb dibagi antara semua perangkat di dalamnya. Saat mengukur kecepatan melalui ethernet dan melalui usb wi-fi (terhubung ke 1 router) baik melalui udara maupun melalui kabel, daya yang dihasilkan di wilayah 20 Mbps.

PS Secara umum, panduan kompilasi driver ini untuk adaptor khusus ini berlaku tidak hanya untuk RPI. Saya kemudian mengulanginya dan di desktop saya dengan Linux Mint - semuanya juga bekerja di sana. Hanya saja Anda hanya perlu mengunduh file header yang diperlukan untuk versi kernel Anda.

UPD Orang yang berpengetahuan menyarankan: agar tidak bergantung pada versi kernel, Anda perlu membangun dan menginstal driver menggunakan dkms. Dalam readme to the driver, opsi ini juga ada
 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. Patch yang diusulkan untuk id perangkat diterima ke cabang repositori utama lwfinger / rtl8188eu.

Referensi
- RPi USB Wi-Fi Adapters
- gitbub lwfinger / rtl8188eu
- usb.ids
- sumber rpi

Source: https://habr.com/ru/post/id471564/


All Articles