Ubuntu20.04 安装N卡驱动黑屏的恢复&网卡驱动源码编译与安装

329 阅读2分钟

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的驱动

网卡驱动的编译

  • 下载源码后,进入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,那再去找教程,教程一大把~~~

参考资料&鸣谢

Ubuntu 20.04 安装 e1000e 有线网卡驱动 - Seismology

linux kernel单独编译某项驱动----网卡驱动_kernel-devel-CSDN博客