gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:44 25 4
gpt4 key购买 nike

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

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

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

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

编辑:相关代码(按要求)-

进程文件.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com