当 Linux 中第一次连接新硬件时会发生什么?

当 Linux 中第一次连接新硬件时会发生什么?

假设我已将一个设备连接到 PC。

问:Linux操作系统(Ubuntu)如何意识到有新的硬件设备连接?

答案:新连接的设备引发中断(并执行更多操作)。

我的答案是否正确,至少是新连接的设备引发中断的部分?

答案1

是的,在“中断”一词的两种意义上:

如果您特意指的是硬件级中断,那么是的(假设系统实际上可以与刚刚连接的硬件进行交互,例如,使用仅供电的 USB 电缆连接某些东西不会触发此类中断),但是它不一定是特定于设备的,并且可能会触发总线上引发中断的设备的重新枚举(例如 USB 和 IEEE 1394 就是这种情况)。

如果您的意思是用户空间可以对某种事件做出反应,那么是的,总会有这样的事件如果有问题的设备实际上是可用的(即,某种与其绑定的内核驱动程序)。这些事件由一个名为 的程序处理udev,如果您想要执行某些操作来响应插入的设备,则udev应该从 的文档开始。与硬件中断不同,uevent(这些“中断”的通用术语)将是特定于设备的(因此您可以使用它们来匹配特定硬件,前提是硬件提供某种形式的标识)。

答案2

这是真的,但这有点像在说“当你第一次见到某人时会发生什么?光线从他们的身体反射到你的视网膜上。”水平太低了,看不到有趣的部分。

所以是的,假设硬件连接到检测外部连接的控制器(例如 USB/Firewire/eSATA/… 控制器,或具有 VGA-with-EDID/DVI/HDMI/DisplayPort 的图形处理器),控制器将发送总线上的信号,该信号将触发 CPU 上的中断。内核中的中断处理程序,它是该控制器驱动程序的一部分,将去读取来自控制器的消息。该消息将包含有关新设备的信息,并根据该特定控制器使用的协议进行格式化。

如果设备除了需要控制器驱动程序外还需要特定驱动程序,则可以使用一种机制自动加载包含适当驱动程序的模块。请参阅 驱动模块是否自动加载和卸载?

请注意,这并不是给定的硬件检测到。这取决于电子设计。在某些较旧类型的连接(串行端口、带有旧显示器的 VGA、许多声音插孔)上,没有机制来报告设备是否已插入。

相关内容