【发布时间】:2015-11-14 07:03:24
【问题描述】:
当内核启动时(特别是在基于 arm 的设备上),它如何知道哪些设备连接到它以及要探测哪些驱动程序?能否请您参考内核源代码或举个例子....谢谢
【问题讨论】:
-
我不认为这个问题是题外话,所以很遗憾它被标记为这样,我无法添加完整的答案。例如,您可以在 LDD3 书的“Linux 设备模型”一章的“总线、设备和驱动程序”一节中阅读有关它的内容。简而言之,Linux 使用
Buses的抽象(如 PCI、USB 等),Devices可以连接到这些抽象。每个Device可能由一些Drivers支持,这些probe定义了回调。总线将调用这些回调,直到某些Driver决定它将处理此设备。总线可能会使用一些提示(如设备 ID)来询问特定的Drivers或可以遍历所有提示 -
还有一些设备,尤其是在嵌入式系统(如 ARM 系统)上的设备没有连接到任何可以检测硬件的真实总线。此类设备在 Linux 中以特殊的抽象总线组织,称为“平台”。在过去,该总线的驱动程序注册是硬编码在内核代码中的,但现在它主要由称为
Device tree的特殊配置文件描述,由引导加载程序提供给内核。描述仍然是静态的,但它独立于内核代码,因此您可以为一个内核映像进行多种配置(针对略有不同的板)。
标签: c linux linux-kernel operating-system