先看看我的网卡,这是一款TP-LINK WN726N免驱版无线usb网卡
官方并未提供该版本的linux驱动,但是手边只有这个网卡,于是网上一通搜索终于搞定。
插上无线网卡后输入lsusb -tv 查看设备信息
其中 0bda:1a2b 即 制造商id:产品id,Driver=usb-storage即代表该设备被识别为usb存储设备,这是因为免驱版的网卡需要存储windows的驱动,所以默认都会被识别为u盘,但在linux上缺毫无用处,我们需要切换usb的设备模式,才能知道网卡模式下的设备id,输入以下命令切换模式
usb_modeswitch -KW 0bda -p 1a2b
然后再次输入lsusb -tv 查看设备信息
这时能看到ID由 0bda:1a2b 变成了 0bda:b711,Driver=后面没有任何信息,我这里特意涂抹掉了,因为只有在安装完驱动后才会有内容。
接下来就要根据这个b711去
www.linux-usb.org/usb.ids 去找对应的网卡芯片型号
可以看到芯片的型号是RTL8188GU,那么接下来就是要去github找对应的第三方驱动源码了
https://github.com/McMCCRU/rtl8188gu 下载master分支所有代码的zip包到本地,进入解压后的目录依次运行make和make install
make
make install
都完成后会在/lib/modules/5.4.0-90-generic/kernel/drivers/net/wireless/看到多了一个8188gu.ko的文件
这个5.4.0-90-generic是系统当前使用内核的版本号,不同的系统会不一样,如果不知道可以输入uname -a查看
接下来加载刚安装的驱动模块
modprobe 8188gu
然后再次输入 lsusb -tv,可以看到Driver=后面有信息了,这里还没搞清楚为什么显示的不是rtl8188gu,但是不影响使用。
输入命令 ip a 获得无线网卡的信息,红框为无线网卡的名字,复制它,接下来会用到
我使用的是ubuntu 20版本的,网络是由netplan配置的, /etc/netplan目录下会有一个yaml结尾的文件用来存储网络配置,由于是serverv版本的系统,所以默认是没有无线配置的
/etc/netplan/xxx.yaml
手工添加无线配置
# This is the network config written by 'subiquity'
network:
renderer: networkd
ethernets:
enp1s0:
dhcp4: true
optional: true
version: 2
# 下面是要添加的内容,每一行与上一行后退4格,一定要严格遵守
wifis:
# 下面是前面复制的无线网卡的名字
wlxf88c2116dde6:
dhcp4: true
optional: true
access-points:
"wifi的名字":
password: "wifi的密码"
然后保存,接下来运行netplan try 检查配置文件是否有错,没有报错的话,接下来再运行 netplan apply 应用配置。最后再运行 ifconfig 就可以看到你的无线网络信息了
当你拔下usb网卡再插入后,如果是免驱版,那么又会被识别为U盘,这时需要再次切换为网卡模式,然后reboot。但是还有一个一劳永逸的办法,编辑 /lib/udev/rules.d/40-usb_modeswitch.rules ,在文件末尾 LABEL="modeswitch_rules_end" 前插入以下内容
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p 1a2b"
效果如下:
以后插拔网卡或关机重启都能自动识别了。
还有一种情况需要注意,当系统开启了自动升级内核,大多数是默认开启的,那么内核升级后,驱动也会找不到,因为驱动是生成在当时编译的内核版本目录下,这时就得重新编译了。