在一些混乱中,我需要调用一个内核函数,而不是从内核空间调用,因为在参数中它从用户空间分配缓冲区。
const char __user *buf
但我需要调用,所以我怎么可以分配用户空间缓冲区,并传递给它的函数参数。
如果可能的话,我需要做,而不需要任何用户空间的交互。 真的有可能吗?
我的目标是调用内核驱动程序的内核例程,它的参数是const char __user *buf
有可能是另一种方式,这取决于你实际上试图调用什么系统调用。
这里有一篇关于系统调用机制的文章。 有一节介绍如何从内核空间调用系统调用,使用内核内存并避免验证。
mm_segment_t fs; fs = get_fs(); /* save previous value */ set_fs (get_ds()); /* use kernel limit */ /* system calls can be invoked */ set_fs(fs); /* restore before returning to user space */
AFAIK,通常这样做的方法是打破两个内核例程 – 一个处理系统调用机制的外部例程,处理copyin()/ coyout()等,然后调用内部例程,工作。
当然,如果你需要将你的代码自包含在一个模块中,并且不控制内核的其余部分,那么这将不起作用。
而在回答你的具体问题 – 我不知道是否有任何这样的API,但我相当怀疑。