Mari berkawan dengan RaspberryPi dengan TP-Link TL-WN727N

Hai Habr!

Saya pernah memutuskan untuk menyambungkan raspberi saya ke Internet melalui udara.

Tidak lama kemudian, untuk tujuan ini saya membeli wisel wi-fi usb dari syarikat terkenal TP-Link dari kedai terdekat. Saya akan katakan dengan segera bahawa ini bukan sejenis modul usb nano, tetapi peranti yang agak besar, kira-kira saiz pemacu kilat biasa (atau, jika anda suka, saiz jari telunjuk lelaki dewasa). Sebelum membeli, saya melakukan sedikit penyelidikan mengenai senarai pengeluar wisel yang disokong untuk RPI dan TP-Link ada dalam senarai (namun, ternyata kemudian, saya tidak mengambil kira kehalusan, kerana syaitan, seperti yang kita tahu , terdapat dalam butiran). Jadi, kisah dingin tentang kemalangan saya bermula; kami mempersembahkan kepada anda kisah detektif dalam 3 bahagian. Bagi yang berminat, sila rujuk kucing.

Perkara Menyambungkan penyesuai WiFi WN727N ke Ubuntu/Mint Ia membantu saya sebahagiannya, tetapi perkara pertama dahulu.

Keadaan masalah

Diberi:

  1. komputer papan tunggal Raspberry Pi 2 B v1.1 – 1 keping
  2. wisel wi-fi usb WN727N - 1 keping
  3. sepasang tangan yang tidak cukup bengkok - 2 keping
  4. Raspbian terkini dipasang sebagai OS (berdasarkan Debian 10 Buster)
  5. versi kernel 4.19.73-v7+

Cari: sambung ke Internet (Wi-Fi diedarkan dari penghala rumah anda)

Selepas membongkar penyesuai, saya membaca arahan di dalam:

Keserasian Sistem: Windows 10/8/7/XP (walaupun langit, malah XP) dan MacOS 10.9-10.13

Hmm, seperti biasa, bukan sepatah pun tentang Linux. Ia adalah 2k19, dan pemandu masih perlu dipasang secara manual...

Kami mempunyai bersama kami 2 penyusun, 75 ribu perpustakaan, lima gumpalan binari, setengah barisan wanita telanjang dengan logo dan seluruh lautan pengepala semua bahasa dan markup. Bukannya ini adalah set yang diperlukan untuk kerja itu. Tetapi sebaik sahaja anda mula memasang sistem untuk diri sendiri, ia menjadi sukar untuk dihentikan. Satu-satunya perkara yang menyebabkan saya bimbang ialah pemandu untuk wi-fi. Tidak ada yang lebih tidak berdaya, tidak bertanggungjawab dan korup daripada membina pemandu dari sumber. Tetapi saya tahu bahawa lambat laun kita akan beralih kepada sampah ini.

Secara umum, seperti yang anda tahu, mengutak-atik usb wi-fi di Linux adalah menyakitkan dan agak tawar (seperti sushi Rusia).

Kotak itu juga mengandungi CD dengan pemacu. Tanpa banyak harapan saya melihat apa yang ada di dalamnya - mereka pasti tidak menjaganya. Carian Internet membawa saya ke tapak web pengilang, tetapi terdapat pemacu Linux di sana hanya untuk semakan peranti v4, dan dalam pelukan saya adalah v5.21. Dan selain itu, untuk versi kernel yang sangat lama 2.6-3.16. Tidak digalakkan oleh kegagalan pada awalnya, saya sudah berfikir bahawa saya sepatutnya mengambil TL-WN727N (ia lebih mahal sedikit dan boleh mengendalikan 300Mbps berbanding 150 untuk saya, tetapi ternyata, ini tidak penting sama sekali untuk raspberi, perkara ini akan ditulis kemudian). Tetapi perkara yang paling penting ialah pemacu untuknya sudah wujud dan hanya dipasang sebagai pakej perisian tegar-ralink. Anda biasanya boleh melihat semakan peranti pada badan peranti pada pelekat di sebelah nombor siri.

Googling dan melawat pelbagai forum tidak membawa banyak kebaikan. Nampaknya tiada sesiapa sebelum saya cuba menyambungkan penyesuai sedemikian ke Linux. Hmm, saya senasib dengan lelaki lemas.

Walaupun, tidak, saya berbohong, melawat forum (kebanyakannya berbahasa Inggeris) juga membuahkan hasil; dalam beberapa topik terdapat sebutan tentang Encik lwfinger tertentu, yang terkenal kerana menulis beberapa pemacu untuk penyesuai Wi-Fi . Repositori gitnya berada di penghujung artikel dalam pautan. Dan pelajaran kedua yang saya pelajari ialah anda perlu mengenal pasti peranti anda untuk memahami pemacu yang mungkin sesuai untuknya.

Bahagian 1: Identiti Bourne

Apabila peranti dipasang ke port, sudah tentu, tiada LED menyala. Dan secara umum ia tidak jelas sama ada sesuatu berfungsi atau tidak.

Pertama sekali, untuk mengetahui sama ada kernel melihat peranti kami, saya melihat dalam 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 ia melihat, dan bahkan jelas bahawa terdapat cip Realtek dan VID/PID peranti itu sendiri pada bas usb.

Mari pergi lebih jauh dan lihat lsusb, dan di sini kegagalan lain menanti 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 mengetahui jenis peranti itu, dan dengan malu-malu menunjukkan ruang kosong dan bukannya nama (walaupun vendor=2357 pastinya TP-Link).

Pada peringkat ini, pembaca yang ingin tahu mungkin telah melihat sesuatu yang menarik, tetapi kami akan meninggalkannya sehingga masa kita.

Menyelidik masalah nama kosong membawa saya ke tapak dengan pengecam, di mana maklumat mengenai VID/PID yang diketahui dimasukkan. 2357:0111 kami tiada di sana. Seperti yang ternyata kemudian, utiliti lsusb menggunakan fail /usr/share/misc/usb.ids, iaitu senarai ID yang sama daripada tapak ini. Untuk keindahan paparan, saya hanya menambah baris untuk vendor TP-Link dalam sistem saya.

2357  TP-Link
        0111  TL-WN727N v5.21

Nah, kami membetulkan paparan dalam senarai peranti, tetapi ini tidak membawa kami satu langkah lebih dekat untuk memilih pemandu. Untuk memilih pemandu, anda perlu tahu cip yang digunakan oleh wisel anda. Percubaan seterusnya yang tidak berjaya untuk mengetahui perkara ini di Internet tidak membawa kepada apa-apa yang baik. Berbekalkan pemutar skru berlubang nipis, saya menanggalkan penutup penyesuai dengan berhati-hati dan idea ganas Uncle Liao muncul dalam semua kebogelannya yang murni. Di bawah kaca pembesar anda boleh melihat nama cip - RTL8188EUS. Ini sudah bagus. Pada beberapa forum saya melihat catatan bahawa pemandu dari lelaki yang sama lwfinger sangat sesuai untuk cip ini (walaupun dia hanya menulis tentang RTL8188EU).

Bahagian 2: Ketuanan Bourne

Saya memuat turun sumber pemacu dari Git.

Sudah tiba masanya untuk memasang semula Windows dan melakukan perkara yang biasanya dikaitkan dengan pengguna Linux - memasang sesuatu daripada beberapa jenis. Memasang pemacu, ternyata, berbeza sedikit daripada menyusun atur cara:

make
sudo make install

tetapi untuk menyusun modul kernel kami memerlukan fail pengepala kernel untuk versi khusus kami.

Terdapat pakej dalam repositori stok raspberrypi-kernel-headers, tetapi ia mengandungi versi kernel fail 4.19.66-v7l+, dan itu tidak sesuai dengan kami. Tetapi untuk mendapatkan tajuk versi yang diperlukan, ternyata, terdapat alat yang mudah sumber rpi (pautan pada penghujung pada Github), yang dengannya anda boleh memuat turun pengepala yang diperlukan. Kami mengklon repositori, menjadikan skrip boleh laku, dan menjalankannya. Pelancaran pertama gagal dengan ralat - tiada utiliti bc. Nasib baik, ia berada dalam repositori dan kami hanya memasangnya.

sudo apt-get install bc

Selepas itu, memulakan semula dan memuat turun pengepala (dan kemudian menyediakan sesuatu, saya tidak ingat sekarang) mengambil sedikit masa dan anda boleh duduk dan Windows telah menjadi lebih baik dalam semua manifestasinya.

Selepas semua pengepala dimuat turun, semak sama ada direktori itu muncul /lib/modules/4.19.73-v7+ dan di dalamnya symlink menunjuk ke tempat di mana fail yang dimuat turun berada (bagi saya ia adalah /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

Peringkat persediaan telah selesai, anda boleh memulakan pemasangan. Memasang modul sekali lagi mengambil sedikit masa, Raspberry bukanlah binatang yang pantas (ia mempunyai 32bit 900Mhz Cortex ARM v7).
Jadi semuanya disusun. Kami memasang pemacu dalam langkah ke-2 (membuat pemasangan), sambil menyalin lebih banyak fail perisian tegar yang diperlukan untuk pemandu 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/.

Bahagian 3. The Bourne Ultimatum

Saya pasang wisel ke port dan... tiada apa yang berlaku. Adakah semuanya sia-sia?

Saya mula mengkaji fail di dalam projek dan dalam salah satu daripadanya saya dapati masalahnya: pemandu menentukan senarai lengkap pengecam VID/PID yang boleh disampaikan. Dan untuk membolehkan peranti kami berfungsi dengan pemacu ini, saya hanya menambah id saya pada fail 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 */
};

Saya menyusun semula pemacu dan memasangnya semula pada sistem.

Dan kali ini semuanya bermula. Lampu pada penyesuai menyala dan peranti baharu muncul dalam senarai antara muka rangkaian.

Melihat antara muka wayarles menunjukkan perkara 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 bagi yang baca sampai habis

Ingat bagaimana saya mengatakan bahawa tidak kira kelajuan maksimum yang dinyatakan pada penyesuai anda?
Jadi, pada Malinka (sebelum keluaran model 4), semua peranti (termasuk penyesuai ethernet) duduk pada bas usb yang sama. Hebat kan? Oleh itu lebar jalur bas usb dibahagikan antara semua peranti di atasnya. Apabila mengukur kelajuan kedua-dua melalui ethernet dan melalui usb wi-fi (disambungkan ke 1 penghala) kedua-dua melalui udara dan melalui wayar, ia adalah sekitar 20Mbit/s.

PS Secara umum, panduan ini untuk menyusun pemacu untuk penyesuai khusus ini sah bukan sahaja untuk RPI. Saya kemudian mengulanginya pada desktop saya dengan Linux Mint - semuanya berfungsi di sana juga. Anda hanya perlu memuat turun fail pengepala yang diperlukan untuk versi kernel anda dengan cara yang sama.

UPD. Orang yang berpengetahuan mencadangkan: untuk tidak bergantung pada versi kernel, anda perlu mengumpul dan memasang pemacu menggunakan dkms. Readme untuk pemandu juga mengandungi pilihan ini.

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. Dicadangkan tampalan untuk id peranti telah diterima ke dalam cawangan arus perdana repositori lwfinger/rtl8188eu.

rujukan
- Penyesuai Wi-Fi USB RPi
- Gitbub lwfinger/rtl8188eu
- usb.ids
- sumber rpi

Sumber: www.habr.com