TP-Link TL-WN727N ile RaspberryPi ile arkadaş olalım

Ey Habr!

Bir keresinde ahududumu kablosuz olarak internete bağlamaya karar verdim.

Bu amaçla, en yakın mağazadan ünlü TP-Link firmasından bir usb wi-fi düdüğü satın aldım. Hemen bunun bir tür nano usb modülü olmadığını, normal bir flash sürücü boyutunda (veya isterseniz yetişkin bir adamın işaret parmağı boyutunda) oldukça büyük bir cihaz olduğunu hemen söyleyeceğim. Satın almadan önce, RPI için desteklenen düdük üreticilerinin listesi hakkında küçük bir araştırma yaptım ve listede TP-Link vardı (ancak daha sonra ortaya çıktığı gibi, incelikleri hesaba katmadım çünkü bildiğimiz gibi şeytan) , ayrıntılarda yer almaktadır). Böylece talihsizliklerimin soğuk hikayesi başlıyor; 3 bölümlük bir polisiye öyküsünü dikkatinize sunuyoruz. İlgilenenler için lütfen kediye bakınız.

Makale WN727N WiFi adaptörünü Ubuntu/Mint'e bağlama Bana kısmen yardımcı oldu, ama önce ilk şeyler.

Sorunun koşulları

Verilen:

  1. tek kartlı bilgisayar Raspberry Pi 2 B v1.1 – 1 adet
  2. usb wi-fi düdüğü WN727N - 1 adet
  3. pek çarpık olmayan bir çift el - 2 adet
  4. En yeni Raspbian, işletim sistemi olarak kurulur (Debian 10 Buster'ı temel alır)
  5. çekirdek sürümü 4.19.73-v7+

Bul: İnternete bağlanın (Wi-Fi, ev yönlendiricinizden dağıtılır)

Adaptörü paketinden çıkardıktan sonra içindeki talimatları okudum:

Sistem Uyumluluğu: Windows 10/8/7/XP (hatta gökyüzü, hatta XP) ve MacOS 10.9-10.13

Hmm, her zamanki gibi Linux hakkında tek kelime etmedim. 2k19'du ve sürücülerin hâlâ manuel olarak birleştirilmesi gerekiyordu...

Yanımızda 2 derleyici, 75 bin kütüphane, beş ikili blob, logolu yarım dizi çıplak kadın ve tüm diller ve işaretlemelerden oluşan bir başlık denizimiz vardı. Bunun iş için gerekli bir set olduğu söylenemez. Ancak kendinize bir sistem kurmaya başladığınızda, durmanız zorlaşır. Beni endişelendiren tek şey wi-fi sürücüleriydi. Sürücüleri kaynağından oluşturmaktan daha çaresiz, sorumsuz ve yozlaşmış bir şey yoktur. Ama er ya da geç bu saçmalığa geçeceğimizi biliyordum.

Genel olarak bildiğiniz gibi Linux'ta usb wi-fi ile uğraşmak acı verici ve biraz tatsız (Rus suşi gibi).

Kutuda ayrıca sürücülerin bulunduğu bir CD bulunur. Pek umudum olmadan içindekilere bakıyorum; kesinlikle ilgilenmemişler. İnternetten yaptığım bir arama beni üreticinin web sitesine getirdi, ancak burada yalnızca aygıt revizyonu için bir Linux sürücüsü var v4ve kollarımdaydı v5.21. Ayrıca çok eski çekirdek sürümleri 2.6-3.16 için. Başlangıçtaki başarısızlıktan dolayı cesaretim kırıldığından, zaten TL-WN727N'yi almam gerektiğini düşünmüştüm (biraz daha pahalı ve benim için 300'ye karşılık 150 Mbps'yi kaldırabilir, ancak ortaya çıktığı gibi, bunun hiç önemi yok) ahududu için bu daha sonra yazılacaktır). Ancak en önemli şey, bunun için sürücülerin zaten mevcut olması ve bir paket olarak kurulmasıdır. ürün yazılımı-ralink. Cihaz revizyonunu genellikle cihaz gövdesinde seri numarasının yanındaki etikette görebilirsiniz.

Daha fazla Google'da araştırma yapmak ve çeşitli forumları ziyaret etmek pek bir fayda getirmedi. Görünüşe göre benden önce hiç kimse böyle bir bağdaştırıcıyı Linux'a bağlamayı denemedi. Hmm, boğulmuş bir adam kadar şanslıyım.

Hayır, yalan söylüyorum, forumları ziyaret etmek (çoğunlukla İngilizce olanlar) da meyve verdi; bazı konularda, Wi-Fi adaptörleri için bir dizi sürücü yazmasıyla ünlü Bay Lwfinger'dan bahsediliyordu. . Git deposu, bağlantılardaki makalenin sonundadır. Ve öğrendiğim ikinci ders, hangi sürücünün ona uygun olabileceğini anlamak için cihazınızı tanımlamanız gerektiğidir.

Bölüm 1: Bourne Kimliği

Cihaz porta takıldığında elbette hiçbir LED yanmıyordu. Ve genel olarak bir şeyin işe yarayıp yaramadığı hiçbir şekilde net değil.

Öncelikle çekirdeğin cihazımızı görüp görmediğini öğrenmek için dmesg'e bakıyorum:

[  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

Gördüğü ortaya çıktı ve hatta USB veri yolunda bir Realtek yongası ve cihazın VID/PID'sinin olduğu bile açık.

Daha da ileri gidip bakalım lsusbve burada başka bir başarısızlık bizi bekliyor

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 ne tür bir cihaz olduğunu bilmiyor ve utangaç bir şekilde isim yerine boş bir alan gösteriyor (satıcı=2357 kesinlikle TP-Link olmasına rağmen).

Bu aşamada meraklı okuyucu muhtemelen ilginç bir şeyi fark etmiştir, ancak bunu zamanımıza bırakacağız.

Boş ad sorununu araştırmak beni bilinen VID/PID bilgilerinin girildiği tanımlayıcıların olduğu bir siteye yönlendirdi. 2357:0111 numaramız orada değildi. Daha sonra ortaya çıktığı gibi, yardımcı program lsusb dosyayı kullanır /usr/share/misc/usb.ids, bu sitedeki kimliklerin aynı listesidir. Ekranın güzelliği için sistemime TP-Link satıcısının satırlarını ekledim.

2357  TP-Link
        0111  TL-WN727N v5.21

Cihaz listesindeki ekranı düzelttik ama bu bizi sürücü seçmeye bir adım daha yaklaştırmadı. Bir sürücü seçmek için düdüğünüzün hangi çipte yapıldığını bilmeniz gerekir. Bunu internette bulmaya yönelik bir sonraki başarısız girişimler iyi bir şeye yol açmadı. İnce oluklu bir tornavidayla adaptör kapağını dikkatlice kaldırdım ve Liao Amca'nın acımasız beyni tüm bozulmamış çıplaklığıyla ortaya çıktı. Büyüteç altında çipin adını görebilirsiniz - RTL8188EUS. Bu zaten iyi. Bazı forumlarda aynı beyefendi lwfinger'ın sürücüsünün bu çip için çok uygun olduğuna dair yazılar gördüm (sadece RTL8188EU hakkında yazmasına rağmen).

Bölüm 2: Bourne Üstünlüğü

Sürücü kaynaklarını Git'ten indiriyorum.

Windows'u yeniden kurmanın ve Linux kullanıcılarının genellikle ilişkilendirdiği şeyi yapmanın, bazı türlerden bir şeyler birleştirmenin zamanı geldi. Görünüşe göre sürücüleri bir araya getirmek, programları derlemekten pek farklı değil:

make
sudo make install

ancak çekirdek modüllerini derlemek için özel sürümümüze ait çekirdek başlık dosyalarına ihtiyacımız var.

Stok deposunda bir paket var Raspberrypi-çekirdek başlıkları, ancak dosyaların çekirdek sürümünü içerir 4.19.66-v7l+ve bu bize yakışmıyor. Ancak gerekli sürümün başlıklarını elde etmek için, ortaya çıktığı gibi, kullanışlı bir araç var rpi kaynağı (bağlantı Github'un sonundadır), bununla gerekli başlıkları indirebilirsiniz. Depoyu klonlarız, betiği çalıştırılabilir hale getiririz ve çalıştırırız. İlk başlatma bir hatayla başarısız oluyor - hiçbir yardımcı program yok bc. Neyse ki, depoda ve biz onu kolayca kuruyoruz.

sudo apt-get install bc

Bundan sonra, başlıkları yeniden başlatmak ve indirmek (ve ardından bir şeyi ayarlamak, şimdi hatırlamıyorum) biraz zaman alır ve arkanıza yaslanabilirsiniz ve Windows tüm tezahürleriyle daha iyi hale geldi.

Tüm başlıklar indirildikten sonra dizinin görünüp görünmediğini kontrol edin /lib/modules/4.19.73-v7+ ve içinde sembolik bağlantı indirilen dosyaların bulunduğu yeri işaret ediyor (benim için /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

Hazırlık aşaması tamamlandı, montaja başlayabilirsiniz. Modüllerin tekrar birleştirilmesi biraz zaman alıyor, Raspberry hızlı bir canavar değil (32bit 900Mhz Cortex ARM v7'ye sahip).
Böylece her şey derlendi. 2. adımda sürücüyü kuruyoruz (kurulumu gerçekleştirin), aynı zamanda sürücünün çalışması için gerekli olan daha fazla ürün yazılımı dosyasını da kopyalıyoruz:

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

Bölüm 3. Bourne Ültimatomu

Düdüğü porta takıyorum ve... hiçbir şey olmuyor. Hepsi bir hiç uğruna mıydı?

Proje içindeki dosyaları incelemeye başlıyorum ve bunlardan birinde sorunun ne olduğunu buluyorum: sürücü, hizmet verebileceği VID/PID tanımlayıcılarının tam listesini belirtiyor. Ve cihazımızın bu sürücüyle çalışabilmesi için kimliğimi dosyaya ekledim 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 */
};

Sürücüyü yeniden derleyip sisteme yeniden yükledim.

Ve bu sefer her şey başladı. Adaptörün üzerindeki ışık yandı ve ağ arayüzleri listesinde yeni bir cihaz belirdi.

Kablosuz arayüzlerin görüntülenmesi aşağıdakileri gösterir:

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

Sonuna kadar okuyanlara bonus

Adaptörünüzde hangi maksimum hızın belirtildiğinin önemli olmadığını söylediğimi hatırlıyor musunuz?
Yani Malinka'da (model 4'ün piyasaya sürülmesinden önce), tüm cihazlar (ethernet adaptörü dahil) aynı USB veriyolunda bulunur. Harika, değil mi? Ve bu nedenle usb veri yolunun bant genişliği, üzerindeki tüm cihazlar arasında bölünür. Hızı hem ethernet hem de usb wi-fi (1 yönlendiriciye bağlı) üzerinden hem havadan hem de kablolu olarak ölçerken, 20Mbit/s civarındaydı.

PS Genel olarak, bu özel bağdaştırıcı için bir sürücü derlemeye yönelik bu kılavuz yalnızca RPI için geçerli değildir. Daha sonra bunu Linux Mint ile masaüstümde tekrarladım - orada da her şey çalıştı. Çekirdek sürümünüz için gerekli başlık dosyalarını aynı şekilde indirmeniz yeterlidir.

GÜNCELLEME. Bilgili kişiler şunu önerdi: Çekirdek sürümüne bağlı kalmamak için sürücüleri dkms kullanarak toplayıp yüklemeniz gerekiyor. Sürücünün benioku dosyası da bu seçeneği içerir.

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

GÜNCELLEME2. Önerilen yama cihaz kimliği için lwfinger/rtl8188eu deposunun ana dalına kabul edildi.

referanslar
- RPi USB Wi-Fi Adaptörleri
- Gitbub lwfinger/rtl8188eu
- usb.id'ler
- rpi kaynağı

Kaynak: habr.com