相同的Linux版本如何在不同的硬件上运行

相同的Linux版本如何在不同的硬件上运行

我的理解是,内核了解如何通过特定的设备树与系统中的不同硬件进行通信。

为什么我可以下载一个版本的 Ubuntu,并且可以将其安装在硬件可能不同的任何系统上?

BeagleBone 嵌入式板也是如此。有一个默认的 Debian 映像,可以闪存到具有不同外设的任何不同类型的 BeagleBone 板。当同一个图像适用于所有人时,它如何知道要使用哪个设备树/设备树覆盖?

答案1

设备驱动程序(即内核中与硬件直接交互的部分)可以编译为内核模块。这些是单独的文件,可以根据系统中的硬件情况,根据需要由内核加载或卸载。

主流 Linux 发行版附带的通用内核往往与编译为模块的每个可以想象的硬件的所有驱动程序一起提供。因此,当内核在给定系统上启动时,它会探测并检测系统上有哪些硬件,然后指示用户空间程序udev加载特定硬件所需的任何内核模块。

答案2

Linux 内核图显示了设备控制的一些细节。它包含称为“驱动程序”和“模块”,可以通过“可加载内核模块”进行扩展。

EG:USB 设备通常具有一个在设备连接时加载的模块,而 USB 根集线器静态链接到内核中,并且 nVidia 卡需要从 nVidia 下载驱动程序。

这就是为什么大多数发行版都可以在各种硬件上运行,但不一定在所有硬件上运行很新硬件,可能需要单独的模块或驱动程序。

有关驱动程序和模块之间差异的更多信息看看这里

内核如何知道要加载哪些模块深入到硬件层,它通过枚举来实现:

  • PCI总线
  • SCSI总线
  • USB集线器
  • DSP...

相关内容