模块的情况下是否需要__init?

时间:2012-01-17 05:53:40

标签: linux-kernel linux-device-driver

当我们将驱动程序与内核一起构建为静态时,我可以理解从__init到_probe的驱动程序代码流。但是当驱动程序构建为模块并且在内核已经启动时加载了insmod时,我们是否还需要这两个函数?

我的意思是,当使用insmod时,不仅需要_probe吗?驱动程序不会直接探测设备,设备注册码可以在_probe中完成吗?

这对我来说并不清楚。也许我怀疑是错的,但帮助我清除这个疑问。

1 个答案:

答案 0 :(得分:1)

实际上,在这两种情况下(内核中的驱动程序或作为模块)都需要两个函数(init和probe)。

正如您所提到的,当存在设备/驱动程序注册时,将使用探测功能(设备/驱动程序内核子系统注意到给定设备有合适的驱动程序并且它“关联”它们。)

为了简化,为了能够实现这种“关联”,内核的设备/驱动程序子系统需要系统上的设备列表和可用驱动程序列表(以及了解驱动程序是否可以的方法)与设备“关联”,但这对你的问题并不重要。)

在一个典型的模块中,init函数是将驱动程序初始化为内核或以不同方式表示它的函数,以将驱动程序注册到内核的驱动程序/设备子系统,以便可以将此新驱动程序添加到可与设备“关联”的可用驱动程序。当驱动程序构建为模块时,也必须这样做。