Linux 在更换系统时如何处理驱动程序?

Linux 在更换系统时如何处理驱动程序?

这一直让我想知道 Linux 如何处理不同系统的设备驱动程序,假设您将其插入计算机 A,然后移动到规格完全不同的计算机 B。此外,如果您进行持久安装并将其移动到另一台电脑,驱动程序也会受到影响吗?内核是否会在启动时进行自我调整,当然这个问题不属于自定义编译内核的范围。

答案1

Linux 驱动程序是内核模块。

这意味着它们可以是内核大二进制文件的一部分(因此是内置的),或者在内核启动后加载。

您真正需要内置到内核中的唯一驱动程序是那些访问根文件系统的驱动程序。即使这样,如果初始 RAM 磁盘上有所需的一切,也可以拥有一个没有此类驱动程序的可用系统。 (引导加载程序负责加载内核二进制文件和初始 RAM 磁盘,然后引导加载程序在启动内核时告诉内核初始 RAM 磁盘在哪里。)

因此,可能会发生一些事情,这完全取决于您:

  • 您可以构建一个内核,并内置所需的所有驱动程序。然后,您将创建适当的文件/devmknod类似的文件,它们就会正常工作。这就是 UNIX 和早期 Linux 的工作方式。当然,如果您在不同的系统上运行内核+初始 RAM 磁盘,某些设备将无法工作,如果您的硬盘控制器是其中之一,您将无法成功启动。

  • 您可以让用户空间进程加载驱动程序。内核初始化的一项工作是准备好虚拟文件proc系统sys,以访问 ACPI 和 PCI 总线,可以进一步扫描这些总线以确定当前的硬件。负责的可执行文件和支持文件可以位于初始 RAM 磁盘上。这几乎就是udev什么systemd。在传统的 Linux init 系统上,udev它将是后台生成的第一个服务之一,它将通过 ACPI 和所有总线并动态创建/dev节点。在较新的systemd系统上, 的功能udev包含在其中,并且它会执行相同的操作。

第二种情况通常是安装了多少个 Linux 内核 + 用户层工具。 Linux 几乎在每次启动时都会重新启动,并且不会像 Windows 那样引用类似注册表的系统中的任何内容。

老实说,上面的内容可能遗漏了一些细节,因为我自己也不知道,但这是它的基本要点。我读到的内容是内核本身可以在启动期间加载模块,但不太确定如何或为什么。

答案2

与某些其他操作系统(例如 Windows)不同,Windows 会构建一个硬件列表及其每次启动时都会遵循的相应驱动程序,许多 Linux 发行版将包含内核模块来支持大多数硬件配置,以提供您似乎喜欢的易用性。

这样做显然会使启动过程变得更长,因为所有包含的驱动程序(内核模块)都会探测硬件,而不仅仅是您需要的驱动程序。由于 Linux 内核的设计,整个过程通常不会比运行预配置的系统慢很多,但定制的 Linux 安装可以启动得更快。

相关内容