Ubuntu1804网卡驱动消失,重装R8168网卡恢复过程

本文详细介绍了在Ubuntu1804中遇到网卡驱动消失的问题,以及如何通过识别网卡型号(RTL8168)、下载并安装相应驱动、解决OPENSSL和System.map问题,再到处理modeprobe权限和安全模式下的内核签名的过程,最终成功恢复网卡功能。
摘要由CSDN通过智能技术生成

Ubuntu1804网卡驱动消失,重装R8168网卡恢复过程

网卡莫名奇妙消失

由于需要,电脑安装了win10+ubuntu1804的双系统,大部分时间都在使用Win10,最近需要用到Linux系统,发现我的网卡竟然离奇失踪了,包括右上角没有网络连接的标记,使用ifconfig 查看也没有网卡的网络信息,如果使用lshw -C network查看会发现提示network unclaimed。

一般的重启网络操作这时候已经无法解决问题了,无独有偶,前两天,win10系统也出现过无法上网的问题,但那次重新指定了一个IP地址就解决了,可能是实验室内被不知道哪个设备占用了IP。话说回来,接下来就看看怎么解决ubuntu1804需要重装网卡驱动的问题。

网卡型号

首先要确定你的网卡型号,这个就是你选择网卡驱动的关键信息,对于有些驱动装起来比较容易,有些需要重新编译,比较麻烦。首先用 lspci 查看本机的网卡型号,可以看到下图在Ethernet controller那行中显示了三种,为RTL8111/8168/8411,8111我没有找到相关信息,后来安装了R8168的网卡驱动。

Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

然后去下载对应的网卡驱动就行了。这里提供一个R8168的链接。

https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software

(base) zyq@zyq-System-Product-Name:~$ lspci
00:00.0 Host bridge: Intel Corporation Device 9b53 (rev 03)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 03)
00:14.0 USB controller: Intel Corporation Device a3af
00:16.0 Communication controller: Intel Corporation Device a3ba
00:17.0 SATA controller: Intel Corporation Device a382
00:1b.0 PCI bridge: Intel Corporation Device a3e9 (rev f0)
00:1b.4 PCI bridge: Intel Corporation Device a3eb (rev f0)
00:1c.0 PCI bridge: Intel Corporation Device a397 (rev f0)
00:1d.0 PCI bridge: Intel Corporation Device a398 (rev f0)
00:1f.0 ISA bridge: Intel Corporation Device a3c8
00:1f.2 Memory controller: Intel Corporation Device a3a1
00:1f.3 Audio device: Intel Corporation Device a3f0
00:1f.4 SMBus: Intel Corporation Device a3a3
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f08 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10f9 (rev a1)
01:00.2 USB controller: NVIDIA Corporation Device 1ada (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device 1adb (rev a1)
03:00.0 Non-Volatile memory controller: Sandisk Corp Device 5006
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

安装驱动

驱动下载好以后,解压完cd进入目录直接执行 autorun.sh 就可以开始安装
自然,大部分情况下安装都没有那么顺利一遍就通,在安装过程中可能遇到几下几个问题。

  1. OPENSSL的问题

一般报错信息如下

  • SSL error:02001002:system library:fopen:No such file or directory: …/crypto/bio/bss_file.c:72
  • SSL error:2006D080:BIO routines:BIO_new_file:no such file: …/crypto/bio/bss_file.c:79
    这里需要取自行生成一个用于SSL验证的文件,这样可以解决SSLerror的问题,这里只能在安装时有效,后面由于第三方模块是被Linux内核所不认可的,还需要用SSL进行签名,让其能够在安全模式下使用。
cd /lib/modules/$(uname -r)/build/certs
 
sudo tee x509.genkey > /dev/null << 'EOF'
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
CN = Modules
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF
 
sudo openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem
  1. System.map的问题
    报错信息可能为
    Warning: modules_install: missing ‘System.map’ file. Skipping depmod.
    这个是没有做链接的原因,需要去做个链接。
    这里可以看到我的ubuntu有4个内核版本,在安装驱动的时候4.15的内核版本好像过低了,会无法进行安装,而5.4.0的版本又过高了,安装驱动的makefile文件中使用了subdir的路径表示方法,这个方法在5.3以后就弃用了,用 M = XXXXXXX 代替了 subdir = XXXXXXX,也可以去makefile文件中修改这部分内容,我在对5.4这样操作的时候还遇到了在5.0没有遇到的报头文件找不到的问题,以后再看看怎么解决吧。回到正题来,我们把需要安装的版本给链上就能进行后续安装啦。
ls -l /boot/System.map*
-rw------- 1 root root 4088260 613  2022 /boot/System.map-4.15.0-187-generic
-rw------- 1 root root 4038188 424  2018 /boot/System.map-4.15.0-20-generic
-rw------- 1 root root 4302188 1114  2019 /boot/System.map-5.0.0-37-generic
-rw------- 1 root root 4575643 95  2020 /boot/System.map-5.4.0-47-generic
sudo ln -s /boot/System.map-5.4.0-96-generic /lib/modules/5.0.0-37-generic/build/System.map
  1. modeprobe
    报错信息为:
    modprobe: ERROR: could not insert ‘r8168’: Operation not permitted
    这个信息是前面提到的,ubuntu安全模式下内核不能安装未认证的第三方库,导致这里无法安装,所以要安装必须切换到非安全模式。
    首先要安装一个mokutil工具,当然不要问我没有网怎么安装啊!我的是之前就已经装过了,没有的话只能通过离线安装的方式去解决了,前面的Openssl也是一样的,可以祈祷一下自己之前都装过。
    mokutil --sb-state 可以看当前的安全模式是否开启,为了安装我们要先进入非安全模式,这个指令sudo mokutil --disable-validation输入以后重启电脑进入当前内核,就可以进行模式的更换。
sudo apt-get install mokutil

user@UBUNTU:~/mc/r8168-8.049.02$ mokutil --sb-state
SecureBoot enabled
 
user@UBUNTU:~/mc/r8168-8.049.02$ sudo mokutil --disable-validation
password length: 8~16
input password: (这里输入临时密码,例如:12345678)
input password again: (这里再次输入临时密码,例如:12345678)

重启电脑后会进入一个类似BIOS界面的地方

Continue boot
Change Secure Boot State
Enroll key from disk
Enroll hash from disk

我们选择Change Secure Boot State,这里会让你三次输入密码的第几位,所以前面12345678比较方便,问什么输什么就行。然后选择Yes就可以切换到非安全模式,接着选择reboot重新进入系统。

进入系统以后,会发现分辨率炸了,别慌,安全模式就是这个样子。重新执行 autorun.sh就可以安装了,安装完以后,可以用 lsmod | grep r8168 检查安装成功没有,成功了就会显示一条信息出来。再次使用 lshw -C network 会发现状态从UNCLAIMED变成了DISABLED,只需要启动网卡就可以解决问题,这个时候是有网卡的,可以按照其他有网卡解决不能上网问题的教程试试看。

我们继续启动网卡,前面lshw的指令可以看到一个logical name 的栏目,这个后面的名称是你网卡的名称,我的网卡名称为enp4s0,所以 sudo ifconfig ens4s0 up ,然后分配DHCP, sudo dhclient enp4s0

这里如果之前能上网,也要考虑避免IP冲突的问题。

lsmod | grep r8168

sudo ifconfig enp4s0 up

sudo dhclient enp4s0
  1. 安全模式使用
    不要高兴太早,现在安装成功并且能上网仅在非安全模式下有效,顶着这坨答辩分辨率是个人都忍不了,但是利用刚才切换非安全模式指令切回安全模式后,发现安全模式下竟然还是不能上网,内核依然不能加载没有认证的第三方模块,尝试手动加载输入sudo insmod r8168.ko,会报错操作不允许insmod: ERROR: could not insert module r8168.ko: Operation not permitted,因此我们要对其进行签名使得内核能够加载。
user@UBUNTU:~/mc/r8168-8.049.02$ sudo mokutil --enable-validation
password length: 8~16
input password: (这里输入临时密码,例如:12345678)
input password again: (这里再次输入临时密码,例如:12345678)

sudo insmod r8168.ko
insmod: ERROR: could not insert module r8168.ko: Operation not permitted

首先生成公钥与私钥,通过ubuntu内置的openssl协议生成公钥your_driver.der与私钥your_driver.key文件,把驱动名字改成对应的驱动名。然后把秘钥导入MOK,这里与切换非安全模式的步骤一样,设置了密码以后重启,进入刚才相似的界面注册MOK,把刚才添加的秘钥注册到MOK中然后重启。然后在你的驱动的目录下,执行 /usr/src/linux-headers-5.x.x-xx-generic/scripts/sign-file sha256 r8168.key r8168.der r8168.ko 给.ko文件签名,随后再次加载
驱动 sudo insmod r8168.ko 就可以正常使用网络了。

openssl req -new -x509 -newkey rsa:2048 -keyout r8168.key -outform DER -out r8168.der -nodes -days 36500 -subj /CN=r8168 drivers

sudo mokutil --import ./r8168.der
password length: 8~16
input password: (这里输入临时密码,例如:12345678)
input password again: (这里再次输入临时密码,例如:12345678)

/usr/src/linux-headers-5.x.x-xx-generic/scripts/sign-file sha256 your_driver.key your_driver.der your_driver.ko

sudo insmod r8168.ko

小结

到这里基本就解决了网卡驱动消失的问题,花了挺大功夫,各种信息也不统一,做个记录。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值