2

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

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

我在系统调用中做了以下事情:我写了一个系统调用来读取用户空间变量。我还完成并测试了 access_ok、copy_from user、copy_to_user 等等。我还完成了操作用户空间变量以始终递增(现在)。

我面临的问题:现在,我必须添加一个 if 条件来检查“xxx”值,以确定我应该增加还是乘以用户空间变量。这就是我卡住的地方。不是在写系统调用。我不知道如何阅读这个 proc 条目“xxx”。

  1. 我可以使用文件处理吗?
  2. 如果是这样,我应该在我的系统调用中使用 open() 系统调用吗?它会起作用吗?

当我检查时,有 sysctl 系统调用,但现在似乎已弃用。这个IBM 教程讨论了阅读 proc 条目。但是 create_proc_entry 不适用于 /proc/sys/kernel 目录中的参数,对吗?如果是这样,我怎么能使用 read proc entry 功能?

4

1 回答 1

1

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

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

请参阅在 Linux 内核 3.3 中添加新系统调用

于 2013-02-06T08:35:54.383 回答