与TP-Link TL-WN727N的RaspberryPi朋友

哈Ha!

我以某种方式想将树莓通过空中连接到Internet。

一口气说,为此,在最近的USB Wi-Fi商店购买了著名的TP-Link公司的口哨。 我必须马上说,这不是某种纳米USB模块,而是一个尺寸相当于普通闪存驱动器大小的设备(嗯,或者,如果您喜欢用成年男子的食指)。 在购买之前,我在列表中研究了支持RPI和TP-Link的口哨制造商的列表(尽管后来发现,我没有考虑到细微之处,因为细节中已知有魔鬼)。 因此,关于我的不幸经历的冰冷的故事开始了,一个由三部分组成的侦探故事被提请您注意。 有兴趣的请下猫。

WN727N WiFi适配器连接到Ubuntu / Mint的文章对我有部分帮助,但首先要解决的问题。

任务条件


鉴于:

  1. Raspberry Pi 2 B v1.1单板计算机-1个
  2. USB Wifi哨子WN727N-1件
  3. 一对不太弯曲的手-2件
  4. 最新的Raspbian已安装为操作系统(基于debian 10 Buster)
  5. 内核版本4.19.73-v7 +

查找:连接到Internet(从家庭路由器听到Wi-Fi)

打开适配器包装后,我阅读了其中的说明:
系统兼容性:Windows 10/8/7 / XP(偶数天空,甚至XP)和MacOS 10.9-10.13

嗯,和往常一样,关于Linux,一言不发。 那是2k19,但是驱动程序仍然需要手动组装...
我们有2个编译器,75,000个库,5个二进制blob,半数带有徽标的裸女,以及各种各样的所有语言和标记的标头。 并不是说这是工作所必需的。 但是,如果您开始自己组装系统,将很难停止。 唯一令我担心的是使用Wi-Fi的驾驶员。 没有比从源头组装司机更无奈,不负责任和被宠坏了。 但是我知道早晚我们将继续处理这种垃圾。


如您所知,一般来说,在Linux上使用usb wi-fi很麻烦,而且有点无味 (例如俄罗斯寿司)。

包装盒中还包含驱动程序CD。 没有太大的希望,我看看上面有什么-当然,他们没有注意。 在Internet上进行的搜索将我带到了制造商的网站,但是只有一个Linux驱动程序用于修订v4设备,而我手头却有v5.21 。 此外,在内核2.6-3.16的非常旧的版本下。 在一开始就因失败而灰心,我已经认为有必要采用TL-WN727N(价格稍贵,可以达到300Mbps,而对于我的则为150Mbps,但这与树莓派无关,稍后会写出来)。 但是最重​​要的是,它的驱动程序已经存在,并且可以通过firmware-ralink软件包简单地安装 。 通常,您可以在序列号旁边的标签上的设备外壳上看到设备的版本。

进一步谷歌搜索和访问各种论坛并没有带来什么好处。 显然,在我之前,没有人试图将这样的适配器连接到Linux。 嗯,我很幸运。

尽管没有,但我在说谎,访问论坛(主要是英语的论坛)也取得了回报,但在某些主题中提到某位lwfinger先生,他以编写许多Wi-Fi适配器驱动程序而闻名。 他在文章末尾的git存储库中的链接。 我学到的第二个教训是,您需要识别设备以了解哪个驱动程序可能适合它。

第1部分。 伯恩鉴定


当您打开端口中的设备时,当然没有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 

好吧,我们已更正了设备列表中的显示,但这并没有使我们离选择驱动程序仅一步之遥。 要选择一个驱动程序,您需要知道您的哨子在哪个芯片上制成。 接下来尝试在Internet上进行查找的失败尝试没有带来任何好处。 我拿着一把细的一字螺丝刀,轻轻地撬起适配器的盖子,看到廖伯伯原始的裸体中恶毒的想法。 在放大镜下,您可以看到芯片的名称-RTL8188EUS 。 这已经很好了。 在一些论坛上,我看到有帖子说那个lwfinger先生的驱动程序非常适合此芯片(即使事实上它只说了RTL8188EU)。

第2部分。伯恩至上


我从Gita下载驱动程序源。

现在是时候重新安装 Linux以实现通常与之相关的东西了-组装各种东西。 事实证明,驱动程序的汇编与编译程序几乎没有什么不同:

 make sudo make install 

但是要编译内核模块,我们需要特定版本的内核头文件。

库存存储库中有一个raspberrypi-kernel-headers软件包,但其中包含内核4.19.66-v7l +的文件版本,因此不适合我们。 但是事实证明,要获取所需版本的标头,有一个方便的rpi -source工具 (链接在github末尾),您可以使用该工具下载必要的标头。 我们克隆存储库,使脚本可执行,然后运行它。 第一次启动失败并出现错误-没有bc实用程序。 幸运的是,它位于存储库中,我们只需安装它即可。

 sudo apt-get install bc 

之后,重新启动并下载标题(然后设置一些东西,我现在不记得了)会花费一些时间,您可以坐下来, 使其表现更好

在下载所有头文件之后,我们检查是否显示了/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 

准备阶段完成后,就可以开始组装了。 再次组装模块需要一定的时间,而树莓并不是一个快速的野兽(它具有32位900Mhz Cortex ARM v7内核)。
所以,一切都编译了。 我们在第二步(进行安装)中安装驱动程序,同时还复制了驱动程序正常工作所需的固件文件:

 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部分。伯恩最后通tim


我在港口吹口哨,……什么都没发生。 都浪费了吗?

我开始研究项目中的文件,在其中一个文件中,我发现了问题所在:驱动程序指示了它可以提供的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 

对于那些读到最后的人有奖励


还记得我怎么说的适配器上标明的最高速度吗?
因此,在树莓上(在发布模型4之前),所有设备(包括以太网适配器)都位于同一USB总线上。 太好了吧? 因此,usb总线带宽在其上的所有设备之间共享。 通过空中和有线方式通过以太网和usb wi-fi(连接到1个路由器)测量速度时,其速度约为20 Mbps。

PS通常,此特定适配器的驱动程序编译指南不仅仅对RPI有效。 然后,我在Linux Mint的台式机上重复了该操作-一切也在那里正常进行。 只需要下载适用于您的内核版本的必要头文件即可。

UPD 有知识的人士建议:为了不依赖内核版本,您需要使用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接受。

参考文献
-RPi USB Wi-Fi适配器
-gitbub lwfinger / rtl8188eu
-usb.ids
-rpi-source

Source: https://habr.com/ru/post/zh-CN471564/


All Articles