【问题标题】:How does kernel probe drivers [closed]内核如何探测驱动程序
【发布时间】: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


【解决方案1】:

Linux 内核将知道设备仅通过其设备驱动程序连接。根据 Linux 内核配置加载的设备驱动列表。

在编译 Linux 内核期间启用驱动程序时,驱动程序的 init 部分将放置在内核映像的特殊部分。

start_kernel() 中的内核初始化过程中,静态设备驱动程序将是loaded one by one

Linux内核中init调用机制的参考

http://linuxgazette.net/157/amurray.html
http://lwn.net/Articles/141730/

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 2012-02-28
    • 2015-12-31
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多