【问题标题】:How does the Linux Operating System understand the underlying hardware?Linux 操作系统如何理解底层硬件?
【发布时间】:2020-01-08 06:44:17
【问题描述】:
我想了解 Linux 操作系统是如何理解底层硬件的。谁能建议我从哪里开始理解,到目前为止,我只知道 '/dev' 子目录在其中起着至关重要的作用。
它具有设备特殊文件,就像设备驱动程序的门户,然后将其带到物理设备。
我在某处读到 Udev 守护程序侦听 netlink 套接字以收集此信息,并且 Udev 设备管理器会在设备添加和删除发生时检测它们。
但是有了这些,我对 Linux 如何读取硬件的想法并不满意。
请让我知道从哪里开始理解这一点,我非常感谢任何试图提供帮助的人。
【问题讨论】:
标签:
linux
linux-kernel
linux-device-driver
【解决方案1】:
我认为首先您需要了解内存映射的工作原理。什么是地址空间以及它与物理内存的关系。然后您可以阅读有关硬件如何在地址空间中映射以及如何访问它的信息。需要阅读大量文档。
其中一些信息在 Linux 文档项目中。
另外,一些有关电子的知识会有所帮助。
一般来说 - 与设备通信的 Linux 需要一些通信“通道”。该通道可以是例如ISA、PCI、USB等总线。例如,PCI 设备是内存映射设备,Linux 内核通过内存访问与它们通信。所以首先Linux需要在某个内存区域查看给定的设备,然后它才能配置这个设备并与之进行一些通信。
在 USB 设备的情况下,它有点复杂,因为 USB 设备不是内存映射的。您需要先配置 USB 主机才能与 USB 设备通信。与 USB 设备的每一次通信都是通过 USB 主机实现的。
还有一些设备不是通过 ISA、PCI 或 USB 连接的。它们直接连接到处理器并在某个内存地址下可见。该解决方案通常在嵌入式设备中实现。例如 ARM 处理器使用这种方法。
关于 udev - 它是一个用户空间应用程序,它监听来自 Linux 内核的事件并帮助其他应用程序识别设备添加和配置。