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

时间:2013-02-06 07:31:57

标签: linux-kernel kernel-module procfs

这是我的实验作业之一:我必须在这里创建一个proc条目: / proc / sys / kernel / 我必须写一个系统调用操作用户空间变量为我刚刚添加的proc条目的不同值。例如:说,用户空间变量是1,proc条目是0或1.现在系统调用应该增加用户空间变量1(如果proc条目为0 / off)或乘以2(如果proc条目为1 / on)

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

我在系统调用中执行了以下操作:我写了一个系统调用来读取用户空间变量。我还完成并测试了access_ok,copy_from用户,copy_to_user以及所有这些。我还完成了操作用户空间变量以始终递增(现在)。

我面临的问题:现在,我必须添加一个if条件来检查“xxx”值,以决定是否应该增加或乘以用户空间变量。这是我被困的地方。不是在写系统调用。我不知道怎么读这个proc条目“xxx”。

  1. 我可以使用文件处理吗?
  2. 如果是这样,我应该在系统调用中使用open()系统调用吗?它会起作用吗?
  3. 当我检查时,有sysctl系统调用,但现在似乎已弃用。这个IBM tutorial讨论了阅读proc条目。但是create_proc_entry不适用于/ proc / sys / kernel目录下的参数吧?如果是这样,我怎么能使用read proc entry函数?

1 个答案:

答案 0 :(得分:1)

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

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

请参阅Adding a new system call in Linux kernel 3.3