我正在尝试让用户级程序通过/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/