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
Sorunun koşulları
Verilen:
- tek kartlı bilgisayar Raspberry Pi 2 B v1.1 – 1 adet
- usb wi-fi düdüğü WN727N - 1 adet
- pek çarpık olmayan bir çift el - 2 adet
- En yeni Raspbian, işletim sistemi olarak kurulur (Debian 10 Buster'ı temel alır)
- ç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
referanslar
-
-
-
-
Kaynak: habr.com