admin 管理员组

文章数量: 887021

2019独角兽企业重金招聘Python工程师标准>>>

淘宝买了个 TP-LINK 的 usb WiFi 接收器,说明写的是免驱动的,拿回来一看,还是要驱动,只不过仅支持的 Windows 系统是自动安装的。可能设计者想到用 Ubuntu 的都不是一般人,就让他们自己折腾吧!

操作系统:Ubuntu 18.04.2 LTS (Linux)
WiFi 接收器:TP-LINK TL-WDN5200H

一、操作

git clone https://github/Yuan-W/rtl8821cu
cd rtl8821cu
make
sudo make install
sudo modprobe 8821cu
sudo usb_modeswitch -KW -v 0bda -p 1a2b

Done. 应该就可以找到 wifi 设备了,同时桌面上的光盘消失(由文件闪存设备切换至 wifi 设备了)。

  • 至于前面 usb_modeswitch 命令中 -v xxx -p xxx 参数以及下文 {idVendor}=="???"idProduct 的值,使用 lsusb 工具查看,不详述。

二、自动化

  1. 注意在前面输入的最后一行命令执行后,会输出类似如下的信息:
# ...
! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor=  0x0bda
DefaultProduct= 0x1a2b

StandardEject=1

Look for default devices ...
# ...

保留以上输出中带有 = 号的全部行备用。

  1. 创建文件
# 这里的文件名要用 idVendor:idProduct
sudo touch /etc/usb_modeswitch.d/0bda:1a2b
sudo vi /etc/usb_modeswitch.d/0bda:1a2b

将以上保留的信息粘贴进来,保存退出。

  1. 打开文件追加行

sudo vi /lib/udev/rules.d/40-usb_modeswitch.rules
将这行添加到后面:
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch '%b/%k'"
拔插一下 usb wifi 试试看会不会自动识别。不行就重启。

至此,一般来说是可以 work 了,笔者每次重启电脑就能自动识别设备和连接上网络。但好景不长,有一次开发中出现了奇怪的编译问题,于是笔者祭出了杀手锏:重启!!!这一重启不但没解决奇怪的编译问题,我的 WiFi 接收器也不工作了。刚开始以为是坏了,可 lsusb 还能看到设备 ‘Bus 001 Device 002: ID 0bda:c811 Realtek Semiconductor Corp.’ 只是 ID 的 0bda:1a2b 变成了 0bda:c811,说明设备没坏!

在重新执行了本文开头的操作,发现 sudo modprobe 8821cu 报如下错误:
modprobe: ERROR: could not insert '8821cu': Exec format error

三、解决问题

sudo apt-get update
sudo apt-get -y dist-upgrade

重启,然后继续:

sudo apt-get install --reinstall linux-headers-generic
sudo apt-get install --reinstall linux-headers-`uname -r`
sudo apt-get install --reinstall build-essential

然后 cd 到本文开头 git clone 的目录,执行:

make clean

然后继续执行本文开头 make 及以后的操作。

感谢这里提供的帮助,祝你成功!

四、原理

實際上 usb-modeswitchudev 的運作順序如下:

  • /lib/udev/rules.d/40-usb_modeswitch.rulesudev 的規則文件,如果設備被識別(包括 Vendor ID 和 Product ID)就會啟動 usb_modeswitch
  • /lib/udev/usb_modeswitch:執行 usb_modeswitch_dispatcherscript
  • /usr/sbin/usb_modeswitch_dispatcherusb_modeswitchwrapper,用 tcl 寫的,會根據所選擇的設備與設定實際執行 /usr/sbin/usb_modeswitch
  • /etc/usb_modeswitch.conf:全域的設定檔案,也可用於單一的設備設定資訊。
  • /etc/usb_modeswitch.d:該文件夾包含了各別設備的獨立設定資訊,各別裝置的設定檔案是用設備的 ID 來命名。
  • /usr/sbin/usb_modeswitch:實際轉換裝置模式的二進位程式。

转载于:https://my.oschina/weichou/blog/3025407

本文标签: 接收器 台式机 方法 Ubuntu WiFi