当同一驱动程序的多个实例同时运行时,我对 proc 文件的处理方式有疑问。 让我们假设我的系统同时运行同一个驱动程序的几个实例,但其中只有一个(根据一些内部决策)创建了一个 proc 文件并维护在读取文件时应该写入的信息。由于所有实例都属于同一个驱动程序,因此它们都包含读取 proc 文件时将调用的函数(尽管该函数实际上仅由其中一个实例注册)。 我的问题是:当内核调用 read 函数时,它会总是从创建 proc 文件的模块的地址空间调用该函数,还是可以从另一个实例的地址空间调用它?
最佳答案
您不能加载同一驱动程序的多个实例。第二次加载同一个驱动会因为驱动名称冲突而被拒绝。
无法访问您的情况的另一个原因:使用与现有文件相对应的名称创建 proc 文件将失败。
更新(随着问题变得更加具体)
内核不检查从模块传递给它的地址。它只是使用这些地址,例如调用函数。
对于不同模块的地址空间,所有模块与内核共享相同的地址空间。因此,任何地址(例如“proc”文件的读取函数的地址)最多只能属于一个模块(或内核核心)。当模块加载到内核时,内核为其代码和静态数据分配内存。当模块被卸载时,内存及其代码和数据被释放。
关于linux - 当同一驱动程序的多个实例同时运行时,内核如何处理对 proc 文件的读取操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925281/