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

max*_*max 1 kernel system-calls linux-kernel

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

我想要的东西:

pid_t my_pid(){return getpid(); }

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

Fra*_*kH. 9

还有就是做这个的没有通用的方法.

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

对于具体情况getpid(),您可以简单地使用current->pid.

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