linux系统下 usb网卡的驱动安装

如果对你有帮助,可以点赞收藏

本文分享一种思路去解决linux下不能直接识别usb网卡的方案

1.总体思路:

1.通过lsusb 查看usb 对应的vid:pid 如0bda:a192

2.复制这段代码到google git 上查找相关的驱动信息

3.下载驱动文件到linux 系统的某一文件夹中编译成符合linux 内核的ko驱动文件

遵从这个思路可以解决大部分的网卡驱动的情况。

但是有些情况比较特殊

尤其针对没有内核-头文件的内核系统

本文中使用的wifi:mercury MW310UH 驱动芯片rtl8192fu

1.1 找到驱动文件

首先通过lsusb确认驱动对应的id

lsusb

列举出所有已经接再linux 上的usb设备,并且可以看到相应的id

格式为

idVendor:idProduct
 例如0bda:a192

如果你的usb wifi网卡直接显示为WLAN Adapter 的话那你可以直接去安装驱动,再有驱动编译的问题可以看第二部分

1.2 usb网卡的工作模式切换:

如果你的usb wifi 网卡为Disk 后缀,或者corp 结尾的状态,那么你可以继续参考本文下面所写的内容。

针对市面上的随身usbwifi插入windows后为cd 状态,安装完驱动才会开启wifi功能

对于zeroCD的这种usb 设备有专门的软件来解决他,就比如这种usb 网卡,带有windows 驱动,但是对于linux 而言他就是没有意义的。所以被称为zeroCD,相关内容可以搜索usb_modeswitch可以看到更多内容,或者点击本文最后的链接为该项目(usb_modeswitch)的官网,不是很建议去官网的方式安装,因为秃头成分严重。

linux系统下 usb网卡的驱动安装_第1张图片

 先查看usb列表,显示为cd状态

$ lsusb
 [...]
 Bus 001 Device 013: ID 0bda:a192 Realtek Semiconductor Corp. Disk

对于这种disk 后缀得到我们都需要对他进行模式切换

最简单的方法安装usb_modeswitch

ps:换源小妙招

sed -i "s@http://deb.debian.org@https://mirrors.aliyun.com@g" /etc/apt/sources.list

安装usb_modeswitch

sudo apt-get install -y usb-modeswitch

更改相应文件

sudo vim /lib/udev/rules.d/40-usb_modeswitch.rules

这种状态后就可以开始安装驱动,但是不要着急,先将usb的模式设置为默认wifi状态

进入目录:

sudo vim /lib/udev/rules.d/40-usb_modeswitch.rules

shirt+G 直接到最后一行加入到LABEL之前

# Realtek 8192F Wifi AC USB
ATTR{idVendor}=="0bda", ATTR{idProduct}=="a192", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p a192"

LABEL="modeswitch_rules_end"

需要手动再次执行

sudo usb_modeswitch -KW -v 0bda -p a192

1.3 usb-wifi模式自动切换的方案 

方法一:解决poweroff 后需要输入命令的情况   直接看优化

cd /lib/udev/rules.d/
sudo vim 40-usb_modeswitch_rtl8192.rules

输入以下内容:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="a192", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p a192"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="a192", RUN+="/bin/bash -c 'modprobe 8192fu && echo 0bda f192 > /sys/bus/usb-serial/drivers/option1/new_id'"

 以上方法不再需要输入命令,还是需要拔插一次usb wifi 才可以自动变成wifi模式

(不够完美)

经过优化:已经达到开机可用状态

在这个目录下的rules.d 文件中进行修改后实现了开机就可以用的状态

linux系统下 usb网卡的驱动安装_第2张图片

 执行下面的代码

sudo vim /etc/udev/rules.d/50-usb-realtek-net.rules

 最后一行输入:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="a192", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p a192"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="a192", RUN+="/bin/bash -c 'modprobe 8192fu && echo 0bda f192 > /sys/bus/usb-serial/drivers/option1/new_id'"

安装完驱动断电后开机,等待30秒左右(正常开机)既可以ssh 通过WiFi的ip进行管理

 这里代表usb网卡的cd模式已经切换为wifi工作模式linux系统下 usb网卡的驱动安装_第3张图片

首先确认内核版本:

uname -a

我的内核版本如下:

Linux flygemini 5.10.85-sunxi64 #trunk SMP Tue Apr 12 13:21:58 CST 2022 aarch64 GNU/Linux

编译驱动首先要获取内核头文件,如果没有就直接看2吧。有的话马上就装完。直接看3

sudo apt install -y linux-headers-$(uname -r)

2.没有头文件的情况:

没有头文件的情况,需要自己制作相似的内核系统头文件,并且更改vermagic版本号,最终实现制作和内核版本一致的ko驱动文件,步骤如下

2.1没有找到内核头文件那就先找一份相似的,并且放置好头文件的位置 

内核网站: (仅仅作为示范:展示一个armbian的源网站)

http://armbian.tnahosting.net/apt/pool/main/l/

最相近的如图所示:

linux系统下 usb网卡的驱动安装_第4张图片

linux系统下 usb网卡的驱动安装_第5张图片

下载后传输/复制到linux 中

进入.deb 所在目录后

安装命令

 sudo dpkg -i linux-headers-current-sunxi64_21.08_arm64.deb

安装后可以在这个目录里中找到 

cd /usr/src/
cd /usr/src/linux-headers-5.10.60-sunxi64/

 首先在linux内核头文件目录下生成一个build文件夹(因为没有找到匹配的头文件,所以新建一个)

cd /usr/lib/modules/5.10.85-sunxi64/
sudo mkdir build

 复制找到的最相近的内核文件的头文件(刚刚的安装目录上面给过)

sudo cp -r /usr/src/linux-headers-5.10.60-sunxi64/. /usr/lib/modules/5.10.85-sunxi64/build

进入这个文件夹中

cd /usr/src/linux-headers-5.10.60-sunxi64/arch/

 创建一个新的aarch64 文件夹并将arm64下的文件都复制进去

sudo cp -r arm64/. aarch64

 好了,目前完成了用来编译的内核文件的源文件基础部分的构建

2.2下面我们需要修改vermagic的版本号

通过修改ko文件的版本号,从而实现驱动报错的情况:

为什么要修改呢?

因为make命令后生成的驱动文件是你自己下载的对应内核版本,

所以要修改伪装成是当前的内核版本

第一个文件:utsrelease.h

sudo vim /usr/lib/modules/5.10.85-sunxi64/build/include/generated/utsrelease.h

第二个文件:

sudo vim /usr/lib/modules/5.10.85-sunxi64/build/include/config/kernel.release

linux系统下 usb网卡的驱动安装_第6张图片

 好了,伪装 工作全部完成

3.安装驱动

接下来开始在所下载的驱动文件夹下进行安装(这一步一般都在驱动项目中给了)

git clone https://gitee.com/BrightXu/rtl8192fu.git
cd rtl8192fu
make -j$(nproc)

这里会有类似报错:

 如何解决以及解决思路,待更新(按照伪造内核头文件的方法,这里不会有报错)

sudo make install
sudo modprobe 8192fu

 如果安装过程中没有一次报错,那么恭喜你,wifi应该就可以用了

检验wifi驱动是否挂载成功

usb-devices | grep "Vendor=0bda ProdID=f192" -B2 -A5

测试下

linux系统下 usb网卡的驱动安装_第7张图片

 如果不是none 那么就是安装成功了

dkms的支持需要看驱动git页面进行设置,本文不做赘述。

 参考文章:

1.自动将usb 网卡的disk模式切换为wifi芯片systemd - Automatically use usb_modeswitch for Wifi USB - Ask Ubuntuhttps://askubuntu.com/questions/1080944/automatically-use-usb-modeswitch-for-wifi-usb/1082418#1082418

 2.修改ko驱动文件的版本号为当前的内核版本

linux 修改 ko文件内核版本号_whatday的博客-CSDN博客当需要一个ko在一个内核下编译,insmod到另一个内核时,1、include/config/kernel.release文件中为内核版本号,将其改为所需版本。2、include/generated/utsrelease.h文件中 #define UTS_RELEASE “XXX” 将xxx改为自己所需内核版本号 。3、include/linux/vermagic.h文件改为与另一内核相同。注意:这样修改并保存后,编译出来的.ko文件里面的版本信息就更改了,但是重新编译内核时会变回.https://blog.csdn.net/whatday/article/details/1122468313.rtl8192fu驱动对应0dba:f192 的linux驱动安装教程

rtl8192fu: 8192fu Linux USB无线网卡驱动 - Gitee.comhttps://gitee.com/BrightXu/rtl8192fu/tree/master4.usb_modswitch 的拓展阅读

Draisberghof - Software - USB_ModeSwitchhttps://www.draisberghof.de/usb_modeswitch/#trouble

5. Getting a Huawei E352s-5 to work with Linuxhttps://www.bytefish.de/blog/huawei_e352s5.html

你可能感兴趣的:(硬件,linux,运维)