我有一个简单的基于 ARM 的嵌入式系统的内核模块,与之相关联的是.compatible。众所周知,一个设备树中可以出现多个“.compatibles” ,并且将为每个匹配的 OF 节点调用.probe 。如果设备树中出现多个适当的.compatible
,
我无法找到内核(!)是否可以同时调用.probe函数的准确信息。尽管我没有看到.probes中的锁,但阅读内核驱动程序源代码都没有让我相信它不能(同时调用)。
从https://www.kernel.org/doc/Documentation/driver-model/design-patterns.txt
,我读到:
虽然内核包含一些设备驱动程序,它们假设它们只会在某个系统(单例)上被探测()一次,但通常假设驱动程序绑定到的设备将出现在多个实例中。这意味着 probe() 函数和所有回调都需要可重入。
但这看起来与热插拔或类似的事情有关(如果我错了,请纠正我),而我的问题是仅处理 OF 节点。
我发现.probe_type可以在platform_driver.driver中设置为PROBE_PREFER_ASYNCHRONOUS,但不确定它是否是我需要的(如果我错了,请纠正我)。
如果.probe可以同步/并发调用,我必须实现一些锁定,最后使这个例程可重入。
有人可以请我指向链接/文档/章节,我可以在其中阅读有关如何实现.probe机制的信息或给我确切的答案。