linux - 从内核代码的其他部分访问/proc fs 变量

标签 linux ubuntu kernel procfs

我正在尝试让用户级程序通过/proc 与内核进行通信。

我按照 tldp 上的说明进行操作,并成功地创建了一个自定义 proc 文件,使用 insmod 动态加载它,并从用户态读取 (cat) 和写入 (echo) 到 proc 文件。

现在我的问题是如何从内核的另一部分(例如系统调用基础结构)访问/proc 变量(它是一个字节缓冲区)?由于自定义 proc 文件是动态加载和链接的,如何从静态编译的内核代码中引用它?

系统规范:在 MacBook Pro 13"(2009) 上的 VMWare Fusion 中运行 Ubuntu 10.10。

编辑:相关代码(根据请求)-

procfile.c

//This function is called when the module is loaded
int init_module()
{
    /* create the /proc file */

    EXPORT_SYMBOL(procfs_buffer);
    EXPORT_SYMBOL(procfs_buffer_size);
...
...
}

get_procvariable.c(在内核的另一部分)

//The buffer used to store character for this module
extern char * procfs_buffer;

//The size of the buffer
extern unsigned long procfs_buffer_size;

int get_procvariable(void)
{
.. do something
return procfs_buffer; // LD Error: Undefined reference
}

如果您需要更多详细信息,请在评论中告诉我。提前致谢。

最佳答案

回答我自己的问题,从上面的答案中得到一些提示:

我错过的关键是我需要在内核本身内声明一个变量(例如 int kernel_var = 0;)(而不是在 procfs 开销模块内,就像我之前错误地做的那样)。此后使用 EXPORT_SYMBOL 导出它,将其添加到全局模块符号表中,最后将其作为外部变量包含在开销 procfs 模块中。

因此本质上开销变量已经存在于内核中,我只是使用 procfs 模块将其作为外部变量引用并修改其值。

我编写了这个假设,它发挥了神奇的作用。

关于linux - 从内核代码的其他部分访问/proc fs 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046017/

相关文章:

通过 SSH 隧道连接到 Namecheap 的 MySQL 数据库的 Python 脚本

linux - 将 AWK 结果分配给变量

linux - source insight 中的汇编代码支持

python - PIP 安装 PIL python2.7 ubuntu 14.04.1

java - 在 linux 上运行 dmg 程序

ubuntu - 如何在 Ubuntu 中安装 LAMP-package+Netbeans?

ubuntu - 另一个重复实例已在此存档目录中运行

assembly - 引导加载程序和内核错误

Linux 可加载内核模块 exit_module

linux - 如何在 Linux 内核中启用 CONFIG_PREEMPT 选项?