Ubuntu20.04 安装N卡驱动黑屏的恢复&网卡驱动源码编译与安装
nvidia驱动安装失败后黑屏的恢复
-
ctrl+alt+f1进入tty命令行
-
按道理来说这里可以执行一些N卡驱动重装的命令 sudo ubuntu-drivers autoinstall
-
但是我当时直接处于没有网络的状态,所以执行不了,只好直接删除n卡驱动的所有相关内容,执行命令sudo apt remove --purge nvidia
执行完了后,一般来说都是没有网卡了的,所以说接下来我们需要重装驱动
网卡驱动的获取
- 首先我们查看一下是否还有网卡
$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3549 bytes 283497 (283.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3549 bytes 283497 (283.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
由此可见只有本地回环,没有网卡不能上网
- 所以我们先查看一下网卡的驱动型号
$ lspci -v | grep Ethernet
输出的结果,放到网上查找可知,我需要的网卡驱动是e1000的,起初我以为是e1000e的,因为现在网上基本只找得到e1000e的网卡驱动,目前我这个ubuntu20.04.6只能编过e1000e-3.8.7的源码,网上基本只有3.8.4,这里贴一下好不容易找到的地址codeload.github.com/whatboxapp/…
但是e1000e不能解决我们的问题,我们又找不到e1000的安装包,怎么办呢,于是我们尝试下载一个对应的linux内核源码版本来单独编译出e1000.ko的驱动
- 执行
$ uname -r命令可以看见,我的驱动版本是5.15-139,于是我们去网上找到对应的版本mirror.bjtu.edu.cn/kernel/linu…
网卡驱动的编译
- 下载源码后,进入
drivers/net/ethernet/intel/e1000目录,可以看见这个目录下面是e1000驱动的源码
修改makefile
MODNAME = e1000
PWD = $(shell pwd)
KDIR ?= /lib/modules/$(shell uname -r)/build
obj-m += $(MODNAME).o
$(MODNAME)-y = \
e1000_main.o \
e1000_hw.o \
e1000_ethtool.o \
e1000_param.o
all:
make -C $(KDIR) M=$(PWD) src=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) src=$(PWD) clean
需要注意的是两个make之前需要用tab键来缩进,不然会报错
- 修改后执行make
执行后发现生成了e1000.ko
网卡驱动的安装
将生成的e1000.ko拷贝到如下路径
/lib/modules/`uname -r`/kernel/drivers/net/ethernet/e1000.ko
之后按顺序执行如下命令
$ sudo depmod -a
$ sudo update-initramfs -u -k all
$ modinfo e1000 | grep version
$ cd /lib/modules/`uname -r`/kernel/drivers/net/ethernet
$ insmod e1000.ko
$ modprobe e1000
其中最关键的是最后两个命令,前面的我也不确定是不是非执行不可,此时应该有网络图标了
之后可能需要reboot重启,再ifconfig查看网卡
$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3549 bytes 283497 (283.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3549 bytes 283497 (283.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163 <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.130 netmask 255.255.255.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3549 bytes 283497 (283.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3549 bytes 283497 (283.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此时可以看见,有网卡ip了,再执行下面的命令:
$ sudo ip link set dev eno1 up
$ cd /etc/netplan
$ vim 01-netcfg.yaml
- 修改netplan文件夹下面的01-xxx.yaml配置文件,下面是我配置的,我没有使用固定ip
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4:yes
如需要设置固定ip,那再去找教程,教程一大把~~~