linux - 当同一驱动程序的多个实例同时运行时,内核如何处理对 proc 文件的读取操作

标签 linux linux-kernel linux-device-driver procfs

当同一驱动程序的多个实例同时运行时,我对 proc 文件的处理方式有疑问。 让我们假设我的系统同时运行同一个驱动程序的几个实例,但其中只有一个(根据一些内部决策)创建了一个 proc 文件并维护在读取文件时应该写入的信息。由于所有实例都属于同一个驱动程序,因此它们都包含读取 proc 文件时将调用的函数(尽管该函数实际上仅由其中一个实例注册)。 我的问题是:当内核调用 read 函数时,它会总是从创建 proc 文件的模块的地址空间调用该函数,还是可以从另一个实例的地址空间调用它?

最佳答案

您不能加载同一驱动程序的多个实例。第二次加载同一个驱动会因为驱动名称冲突而被拒绝。

无法访问您的情况的另一个原因:使用与现有文件相对应的名称创建 proc 文件将失败。

更新(随着问题变得更加具体)

内核不检查从模块传递给它的地址。它只是使用这些地址,例如调用函数。

对于不同模块的地址空间,所有模块与内核共享相同的地址空间。因此,任何地址(例如“proc”文件的读取函数的地址)最多只能属于一个模块(或内核核心)。当模块加载到内核时,内核为其代码和静态数据分配内存。当模块被卸载时,内存及其代码和数据被释放。

关于linux - 当同一驱动程序的多个实例同时运行时,内核如何处理对 proc 文件的读取操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925281/

相关文章:

php-fpm使postfix将邮件从root@myDomain发送到root@myDomain

c - Linux C 标准 I/O - 为什么双重复制

linux - 如何获取在 Linux 内核启动期间初始化/探测的所有模块/驱动程序的详细信息?

linux - 使用 libraw1394 进行内存访问

multithreading - linux上线程多的进程会比一个线程的进程有更多的cpu时间吗?

linux - Linux 中每个进程访问的虚拟页面

linux - 如何在linux中用c++调用 "unlimit"

linux - C++/C#/Java 程序员最简单的 Shell

audio - 我需要做什么才能在运行 debian 的 beaglebone 上设置 USB 音频小工具 i/o?

linux - linux 内核版本 3.2 中的 init_MUTEX 去了哪里?