linux - 为什么Linux设备驱动中除了init还需要probe方法?

在linux内核中,驱动提供的probe()方法是做什么的?它与驱动程序的 init 函数有何不同,即为什么不能在驱动程序的 init 函数中执行 probe() 函数操作?

最佳答案

不同的设备类型可以有probe() 函数。例如,PCI 和 USB 设备都有 probe() 函数。

如果您谈论的是 PCI 设备,我建议您阅读 Linux Device Drivers 的第 12 章,其中涵盖了驱动程序初始化的这一部分。 USB 在第 13 章中介绍。

简短的回答,假设 PCI:驱动程序的 init 函数调用 pci_register_driver(),它为内核提供了它能够服务的设备列表,以及指向 probe() 的指针 函数。然后内核为每个设备调用一次驱动程序的 probe() 函数。

此探测函数启动每个设备的初始化:初始化硬件、分配资源,以及将设备注册到内核作为 block 或网络设备或其他任何设备。

这使设备驱动程序更容易,因为他们永远不需要搜索设备或担心找到热插拔的设备。内核处理该部分,并在有设备供您处理时通知正确的驱动程序。

https://stackoverflow.com/questions/5059501/

相关文章:

linux - Bash:WAITING超时

linux - 在类 Unix 系统中上次运行的 cron 作业的详细信息?

java - System.currentTimeMillis 是否总是返回一个值 >= 以前的调用

c++ - 在 Ubuntu 中学习 OpenGL

c - libc(glibc) 在我们的 linux 应用程序中的作用是什么?

linux - 如何在不创建父目录的情况下使用 wget 镜像目录?

linux - Home/End 键在 tmux 中不起作用

mysql - 你能推荐一个免费的 Linux 轻量级 MySQL GUI 吗?

c++ - 在 C、C++ 中检测 Windows 或 Linux

c++ - 谁决定任何数据类型或结构的大小(取决于 32 位或 64 位)?