如何在内核空间中从另一个系统调用进行系统调用

时间:2011-10-25 18:54:41

标签: linux-kernel kernel system-calls

我是Linux内核开发的新手。我在linux内核2.6中实现了一个系统调用my_pid。我想从系统调用中调用getpid系统调用。我该怎么办?

我想要类似的东西:

  

pid_t my_pid(){       return getpid(); }

同样来自用户空间中的C我可以使用以下命令调用任何系统调用:syscall();在内核模式下执行此操作的一般方法是什么?

1 个答案:

答案 0 :(得分:9)

没有通用的方法。

如果您在内核空间,则应调用直接实现系统调用功能的内核函数而不是使用syscall - 类型指令,或使用其他方法提取所需信息/影响所需的行动。

对于getpid()的特定情况,您只需使用current->pid

内核名称current始终是指向当前task_struct的指针,该struct task_struct是通过<linux/sched.h>定义的(搜索{{1}})。访问其成员的代码通常会被内联,即当代码作为内核的一部分运行时,甚至不需要函数调用(更不用说系统调用)了。