无驱动

在一些新设备中运行旧的 Linux 系统时很可能会出现某些硬件设备无法使用的情况,这时我们就需要像使用窗户系统一样安装 Linux 驱动,有些驱动是可以通过模块加载的,而且可能在官方的(下面称简源)里也是有的,就比如去年我在使用 神舟战神 Z7M-KP5GZ 的时候,当时我为了装黑苹果换了博通的网卡,在 Ubuntu 20.04 中默认是无法打开 WiFi 的,而 Ubuntu 就提供了博通网卡的 module,包名是 broadcom-sta-dkms,执行 apt install 安装就可以使用了。而有些驱动在官方源里是没有的(表扬一下 Arch),但是会有社区的人员去维护,例如 Ubuntu 有一个 ppa(Personal Package Archive,顾名思义就是个人包归档),提供给第三方开发者去归档软件包,其中不乏有一些人去维护驱动模块,只要多利用搜索引擎,基本所有需要的驱动都可以找到(NVIDIA Fuck U 🖕),如果你确实找不到驱动,那可能是你的设备太新了,这时你可以去 Kernel 的 GitHub 仓库 看看哪个内核版本中添加了你所需要的驱动,然后去安装那个内核。在 Archlinux based 的发行版中安装内核是很容易的,有手就行,毕竟 Arch 是追新的,而 Ubuntu 20.04 的仓库中只包含了几个内核,而且不一定符合你的需求,至少现在 Ubuntu 官方源中最新的内核是 5.14,而 mainline 已经 5.17 了。

Ubuntu Mainline PPA

Ubuntu 提供了 Mainline PPA ,在这里你可以找到编译过的最新的 Mainline 内核,包括了 genericlowlatecy 两种版本,看好版本和架构下载安装即可。到这里,基本上驱动的问题都能解决了,如果还是没解决,那你还是先用虚拟机顶一段时间吧,然后耐心等待驱动上线 Mainline,如果你会写驱动,dlddw,如果不会装 NVIDIA 驱动,那你去问 NVIDIA

更多

Kernel

driver 和 module 的区别:

他们都是运行在 kernel 空间的程序。driver 是随系统启动加载的,而 module 是启动后可以手动加载/卸载的。

安装 Kernel

Ubuntu 安装 Kernel 需要装一些包,比如 linux-headers-x.xx-generic linux-image-x.xx-generic linux-modules-x.xx-generic那么 这些包的区别和作用是什么?

  1. linux-header: 编译 kernel 需要用到的头文件。
  2. linux-image: 包含了一个这个版本的 vmlinuz。
  3. linux-modules: 包含了 Kernel modules。

实际上我们只需要安装后面两个包就可以了,例如 linux-images-5.13.0-28-generic linux-modules-5.13.0-28-generic

Kernel 源码部分文件解释

编译 Kernel

Q.E.D.