(水)关于linux系统网卡驱动的安装
作为一个刚刚接触linux系统的小白,目前还在熟悉linux下一些基本操作的方法。(Debian系统)
刚好有个闲置的usb无线网卡,是Tenda的某个型号。想把它安装在linux上来连接学校的无线网。
连接在电脑上之后发现识别不了网卡。于是花了点时间解决这件事情。虽然没什么技术含量,但很多东西也是咱第一次接触,因此在这里记录一下步骤和踩过的坑。
0x01 RTL8192FU
连接网卡?
先用lsusb查看一下usb网卡有没有正确连接到linux上。
正常来说网卡在lsusb上会显示为 WLAN Adapter,在这里却显示为DISK。突然想起这个网卡是“免驱型”,插在windows系统上不会立刻显示为网卡,而是显示为一个CD-ROM来提供windows下的驱动安装程序,将CD驱动器右键弹出才能作为网卡使用。
查阅网络了解到,linux命令行中实现该操作的命令是”eject”。先在debian软件包仓库手动下载一个eject的.deb包,再离线拷贝到linux系统上安装,将 /dev/sr0 分区弹出,然后就可以在lsusb看到网卡了。(如果安装的是Desktop版linux,直接右键光盘点弹出即可)
寻找网卡驱动
因为之前在windows下用过这个usb网卡,所以知道芯片是RTL8192FU。因此直接按照网卡芯片的型号在github上搜索驱动的源代码。https://github.com/BrightX/rtl8192fu
下载解压出来拷贝到U盘,插到linux上。
编译并安装驱动
网卡驱动应该和一般的程序安装步骤差不多,首先要从官网下载对应版本的linux-header内核头文件并拷贝到linux安装,然后在程序的源代码根目录下建立Makefile,用make和make install编译安装。
在根目录下已经发现了Makefile,直接 make & make install即可安装驱动。
有些linux系统发行版(比如Ubuntu LTS 22.04),没有预装编译环境(gcc、make等)。而在缺少网卡驱动无法联网,也没有安装映像的cdrom源的情况下也不可能用apt包管理器来安装这些工具。对于一些比较简单的程序,可以直接去系统的官方软件包仓库https://www.debian.org/distrib/packages在线下载.deb包,再拷贝到linux上用dpkg离线安装。但对于gcc、make这样的程序,依赖的库比较多。对应着依赖关系表,挨个手动下载.deb包是一件非常折磨的事情。
这种情况下有一个比较自动的解决方案,就是在自己的电脑上配置一个和该linux系统相同的虚拟机,将该虚拟机连接网络,在该虚拟机上安装apt-rdepends
sudo apt install apt-rdepends这个工具可以帮助我们获取一个软件包的依赖。我们可以利用这个工具配合apt下载软件包依赖的所有包和库。比如:
apt-get download $(apt-rdepends gcc make|grep -v "^ ")然后将下载的.deb软件包拷贝到linux系统上,用dpkg安装即可。
但要注意,这个方法一定要在和需要安装依赖的linux系统版本完全相同的虚拟机上使用。如果用的系统有区别,即使使用的包管理器是相同的(如Ubuntu和Kali),但由于不同linux版本使用的软件包仓库不同,安装后本地依赖关系会变得一团糟。虽然此时有了gcc和make,可以编译和安装网卡驱动,也可以正常联网,但连上网后apt无法安装或卸载任何软件包,aptitude都没法安装了,也无法自动修复依赖关系。咱当时到这里没有办法让系统恢复正常,只能重装了orz。
但安装过程中出现了一个报错。大概的意思是Makefile的修改时间要比系统时间要晚,因此编译很可能失败。这是因为刚烧录好的系统,系统时间是比较之前的,而且在没有联网的情况下也无法同步时间到最新。为解决这个问题,将系统时间手动调整,调到Makefile的修改时间之后即可。用make clean清理一下,再用make重新编译。
然后make install,顺利地安装上了网卡驱动。
此时用nmcli dev wifi搜索网络,可以正常连接portal校园网,至此网卡安装完毕。
至于校园网的连接,咱使用的这个linux没有安装x-server,也就是说不能用有图形界面的浏览器。但对于linux的命令行,有一个简单的文本浏览器w3m可供使用。用这个浏览器可以轻松在页面填写账号登录校园网。
0x02 RTL8192EU
又是另外一个USB无线网卡,芯片是8192EU。似乎要比8192FU友好一些,插入电脑就能自动用lsusb识别到型号,ifconfig也可以识别到网卡。但信号似乎很差,而且网络完全连不上…
看来还是要装驱动。于是又从Github搜索到了相应的驱动。
老办法,解压,拷贝,make & make install 安装…一切看起来都很顺利,再连接一下网络,为什么还是和之前一样无法连接??难道网卡是坏掉的…?
上网查阅了一下资料,linux内核模块本身就带有支持RTL系无线网卡的驱动(rtl8xxxu),而RTL8192EU是兼容这个驱动的,因此能被linux自动识别的。信号不好和无法连接是由于这个驱动对这个网卡的支持比较差。用 make & make install 安装该驱动后,设备使用的还是内核的驱动。因此想要让我们安装的驱动发挥作用,就需要把内核模块中默认的rtl8xxxu驱动换掉。
sudo rmmod rtl8xxxu |
然后就可以正常使用了。性能感觉比8192FU还好一些。
而之前的RTL8192FU,由于它本身就不兼容内核中的rtl8xxxu驱动。因此用 make & make install 直接安装驱动,不将驱动整合进linux内核也可以使用。
0x03 总结?
总之,最好的办法就是使用与linux内核兼容的网卡。大多数笔记本内置的intel无线网卡一般都是内核自带驱动的,实测AC3165、AC9560、AX200、AX211都可以直接兼容linux5.,不用安装驱动就能很好地工作。需要usb无线网卡时优先选择标明网卡芯片的型号的。其次再选非免驱版,自己查看网卡芯片型号并安装驱动。免驱版因为有一个驱动安装的分区,每次使用前要先弹出一下,对linux的使用不是很友好。