首页 > 解决方案 > 在 Linux 内核文件中声明要在自定义 C 文件中使用的变量?

问题描述

所以我一直在不知疲倦地研究这个,似乎没有任何效果。我要做的就是在启动时将 int 初始化为 0。目前,我在 /kernel/sys.c 并且我有

/内核/sys.c

int process_log_level;
EXPORT_SYMBOL(process_log_level);

下面是一些简单地增加变量的自定义系统调用。系统调用在下面的文件中调用,如果你运行,变量会增加

sudo dmesg -c

但我只想让我的 C 文件读取 int process_log_level。我有这样声明的变量。 ../process_log/process_log.c

#include <unistd.h>
#include <linux/module.h>
#include <stdio.h>
#include "process_log.h"

extern int process_log_level;

int main(int argc, char *argv[])
{
    printf("process_log_level = %d", process_log_level);
    return 0;
}

每当我尝试编译该文件时,我都会被告知存在对“process_log_level”的未定义引用。我想要做的就是能够在 process_log.c 中访问这个变量。我在这里缺少什么吗?

标签: clinuxglobal-variables

解决方案


用户空间和内核通过系统调用进行通信。

下面是一些自定义系统调用

我想让我的 C 文件读取 int process_log_level。

所以只需添加另一个系统调用,将值返回给用户空间程序。然后从您的程序中调用该系统调用以从内核空间检索值。


推荐阅读