Linux设备驱动程序:使用相同驱动程序的多个设备之间共享的代码?

时间:2016-08-09 17:14:08

标签: linux linux-kernel linux-device-driver

让我们假设我们有一些简单的linux设备驱动程序,其中包含:

static const struct of_device_id driver_match[] = {
     { .compatible = "vendor,device1" },
     { .compatible = "vendor,device2" },
     {},
};

以便device1device2绑定到同一个驱动程序。我们在驱动程序中也有以下功能:

static int some_function(int never_mind)
{
    static int count = 0;
    // print "count" to the logs
    ....
}

在设备的probe()功能期间多次调用。我们假设设备是“在同一时间”初始化的。 我的问题是它如何运作? device1device2会使用相同的some_function对象和相同的count变量,还是会得到完全不同的实例?

是否有一些关于linux驱动程序/模块实际执行情况的好的资源/书籍?我只能找到很多关于“如何编写驱动程序”的教程。

我很抱歉我不得不问这个问题,而不是准备基本的驱动程序并自己检查,但我正在等待我的第一个支持Linux的SoC并且无法阻止更快地获得这些知识:(

1 个答案:

答案 0 :(得分:1)

  

device1和device2会使用相同的some_function对象和相同的count变量,还是会得到完全不同的实例?

是的,他们将使用相同的功能和数据。 Linux内核是一个单片内核,所有符号(驱动程序和核心功能)都加载到内存中,内核的每个其他部分都可以访问。 Init / probe可以在不同的核心上发生,因此您需要正确保护或原子访问任何共享数据。在你的例子中,一个简单的原子递增/递减就可以了。