Linux kernel 如何在内核空间中访问内核参数

Linux kernel 如何在内核空间中访问内核参数,linux-kernel,kernel-module,procfs,Linux Kernel,Kernel Module,Procfs,这是我的一项实验任务:我必须在这里创建一个proc条目:/proc/sys/kernel/,并且我必须编写一个系统调用,为我刚才添加的proc条目的不同值操纵一个用户空间变量。例如:假设用户空间变量为1,proc条目为0或1。现在,系统调用应该将用户空间变量递增1(如果proc entry为0/off)或将其乘以2(如果proc entry为1/on) 我做了以下操作来添加proc条目:我通过在kernel/sysctl.c文件的kernel ctl table部分下添加一个struct创建了一

这是我的一项实验任务:我必须在这里创建一个proc条目:/proc/sys/kernel/,并且我必须编写一个系统调用,为我刚才添加的proc条目的不同值操纵一个用户空间变量。例如:假设用户空间变量为1,proc条目为0或1。现在,系统调用应该将用户空间变量递增1(如果proc entry为0/off)或将其乘以2(如果proc entry为1/on)

我做了以下操作来添加proc条目:我通过在kernel/sysctl.c文件的kernel ctl table部分下添加一个struct创建了一个条目xxx。编译内核,系统可以很好地使用该内核启动。该条目还作为/proc/sys/kernel/xxx添加到proc目录中。 我现在可以从用户空间读取或写入它。我做了cat和echo的读写反应

我在系统调用中执行了以下操作:我编写了一个系统调用来读取用户空间变量。我还完成并测试了access_ok、copy_from user、copy_to_user等等。我还完成了将用户空间变量始终递增的操作(目前)

我面临的问题:现在,我必须添加一个if条件来检查“xxx”值,以决定是递增还是相乘用户空间变量。这就是我被困的地方。不是在写系统调用时。我不知道如何阅读这个过程条目“xxx”

  • 我可以使用文件处理吗
  • 如果是这样,我应该在系统调用中使用open()系统调用吗?行吗
  • 当我检查时,有一个sysctl系统调用,但现在它似乎已被弃用。这是关于读取proc条目的。但是create_proc_条目不适用于/proc/sys/kernel目录中的参数,对吗?如果是这样,我如何使用read proc entry函数?

    “但是,现在我必须编写一个系统调用来读取xxx的值。”

    我怀疑术语“系统调用”是在正式意义上使用的,并且要求您向内核添加一个新的系统调用(类似于open、read、mmap、signal等),以返回您的值


    参见

    还有另一个类似的例子,但他们专门为/proc下的条目使用create_proc_entry。但是,我直接编辑了sysctl.c,以便在/proc/sys/kernel下获得一个条目。因此,我也不确定这个答案在这里是如何应用的。您可以创建一个变量,该变量将被导出(对其他内核转换单元可见),并将反映参数的当前值。您必须在已实现的新sysctl处理程序中更新它,并添加系统调用以读取其值。如果您的问题更具体,请随时更新问题。@MichaelFoukarakis我对这一点很陌生。那么你能解释一下变量和sysctl处理程序是什么意思吗?我编辑了这个问题,以便更好地解释我做了什么以及我在寻找什么。为什么这个问题会被否决?对我来说,这似乎是一个完全正确的问题。@我同意,这是一个模型问题-OP描述了问题的背景,详细说明了他们迄今为止所做的工作,并提出了具体的问题。是的,正式地说,我必须编写一个系统调用并将其添加到内核中。我知道如何将它添加到内核中。更具体地说,我对问题进行了编辑。请看一看。谢谢