嘿哈布爾!
我曾經決定透過無線方式將我的 Raspberry Pi 連接到網路。
說乾就乾,為此,我在最近的商店購買了知名公司 TP-Link 的 USB Wi-Fi 口哨。我馬上就要說了,這不是某種奈米 USB 模組,而是一個相當大的設備,大約有普通閃存驅動器那麼大(或者,如果你願意,也可以說,有成年男子食指那麼大)。在購買之前,我研究了一下 RPI 支持的哨子製造商列表,TP-Link 就在列表中(儘管後來證明,我沒有考慮到細節,因為我們知道,魔鬼在細節中)。因此,我的不幸遭遇的冷酷故事開始了,您將看到一個分成 3 個部分的偵探故事。有興趣的請繼續閱讀下文。
文章 它在某種程度上幫助了我,但首先要做的事情是。
問題陳述
鑑於:
- 單板電腦 Raspberry Pi 2 B v1.1 - 1 塊
- USB Wi-Fi 口哨 WN727N - 1 個
- 一雙不太彎曲的手 - 2 件
- 安裝最新的 Raspbian(基於 Debian 10 Buster)作為作業系統
- 核心版本 4.19.73-v7+
尋找:連接到網際網路(Wi-Fi 由家庭路由器指派)
打開適配器包裝後,我閱讀了裡面的說明:
系統相容性:Windows 10/8/7/XP(甚至 Sky,甚至 XP)和 MacOS 10.9-10.13
好吧,像往常一樣,沒有提到 Linux。雖然是2k19,但是驅動程式仍然需要手動編譯...
我們有 2 個編譯器、75 個函式庫、XNUMX 個二進位 blob、半個帶有標誌的裸女數組以及大量包含所有語言和標記的標題。但這並不是這項工作的必需品。但是一旦你開始為自己組成一個系統,就很難停下來。唯一讓我擔心的是 Wi-Fi 驅動程式。沒有什麼比從源頭建立驅動程式更無助、更不負責任和更腐敗的了。但我知道我們遲早會繼續討論這個廢話。
總的來說,眾所周知,在 Linux 上擺弄 USB Wi-Fi 痛苦且有點無味 (如俄羅斯壽司)。
盒子裡還有一張有驅動程式的 CD。我看著上面的東西,不抱太大希望──他們肯定沒有照顧好它。透過網路搜索,我找到了製造商的網站,但那裡只有用於裝置修訂的 Linux 驅動程式。 v4,我手裡拿著它 v5.21。並且也適用於非常舊的核心版本 2.6-3.16。由於一開始就失敗了,我感到很沮喪,我已經想過我應該選擇 TL-WN727N(它有點貴,可以達到 300 Mbps,而我的只有 150 Mbps,但事實證明,這對 Raspberry Pi 來說根本不重要,我稍後會寫到這一點)。但最重要的是,它的驅動程式已經存在,並且只是作為套件安裝 韌體-ralink。您通常可以在裝置機身上序號旁的標籤上看到裝置修訂版本。
進一步的谷歌搜尋和訪問各種論壇並沒有帶來任何特別好的結果。顯然在我之前沒有人嘗試過將這個特定的適配器連接到 Linux。好吧,我就像溺水的人一樣幸運。
雖然不是,我在撒謊,但訪問論壇(主要是英文論壇)也取得了成果,在某些主題中提到了某位 lwfinger 先生,他因編寫了許多 Wi-Fi 適配器驅動程式而聞名。他的 git 儲存庫位於文章末尾的連結中。我學到的第二個教訓是,您需要識別您的裝置才能了解哪種驅動程式可能適合它。
第一部:諜影重重
當我將設備插入連接埠時,當然沒有 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。
讓我們繼續看看 的lsusb,又一次失敗正在等待我們
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 不在那裡。後來事實證明,該實用程序 的lsusb 使用文件 /usr/share/misc/usb.ids,與該網站的識別碼清單相同。為了使顯示更加美觀,我簡單地在系統中添加了 TP-Link 供應商的線路。
2357 TP-Link
0111 TL-WN727N v5.21
好吧,我們修復了設備列表中的顯示,但這並沒有讓我們更接近選擇驅動程式。要選擇驅動程序,您需要知道您的哨子是用什麼晶片製造的。在互聯網上進一步查找此問題但均未成功,也沒有任何結果。我用一把細長的一字螺絲起子小心翼翼地撬開適配器蓋,我的目光便落在了廖叔的邪惡心血結晶上。在放大鏡下你可以看到晶片的名字— RTL8188EUS。這已經很好了。在一些論壇上,我看到帖子說同一位 lwfinger 先生的驅動程式非常適合該晶片(儘管他只寫了有關 RTL8188EU 的內容)。
第二部 諜影重重2
我從 git 下載了驅動程式來源。
現在是時候重新安裝 Windows 並做 Linux 用戶通常會做的事情 - 從原始程式碼組裝一些東西。事實證明,建立驅動程式與編譯程式並沒有太大區別:
make
sudo make install
但是要編譯核心模組,我們需要特定版本的核心頭檔。
庫存存儲庫中有一個包 樹莓派內核頭文件,但它包含文件的內核版本 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 Pi 並不是一個快速的野獸(它有一個 32 位元 900Mhz Cortex ARM v7 石頭)。
因此,一切都已編譯。我們在步驟2(make install)中安裝驅動程序,同時複製驅動程式工作所需的韌體檔案:
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
我把哨子塞進端口,但…什麼也沒發生。一切都是徒勞的嗎?
我開始研究專案內部的文件,並在其中一個文件中發現了問題所在:驅動程式指定了它可以服務的 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
讀到最後的人有福利
還記得我說過適配器上聲明的最大速度是多少並不重要嗎?
因此,在 Raspberry Pi(型號 4 發布之前)上,所有裝置(包括乙太網路轉接器)都位於一個 USB 總線上。很酷吧?因此,USB 總線的頻寬被分配給其上的所有設備。當透過乙太網路和 USB Wi-Fi(連接到 1 個路由器)以及無線和有線測量速度時,它給出了大約 20 Mbit/s。
附註:一般來說,針對該特定適配器編譯驅動程式的指南不僅適用於 RPI。然後我在我的桌面上使用 Linux Mint 重複了此操作 - 一切也都正常。您只需按照相同的方式下載您所使用的核心版本所需的頭檔即可。
更新。有識之士建議:為了不依賴核心版本,就需要使用dkms來編譯安裝驅動。此選項也在驅動程式的自述文件中
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 儲存庫的主流分支。
引用
-
-
-
-
來源: www.habr.com
