很抱歉,如果之前已经问过这个问题,因为它看起来很基本,但我在这个网站的任何地方都找不到它。 我正在使用linux(debian)进行OS编程,我正试图从我的用户空间给我的内核空间函数指针。
即我在用户空间
...
long res;
int x = -1;
int *p1 = &x; // also tried doing a malloc, didn't change anything
res = kernel_function(p1);
...
在内核空间文件kernel_function.c中我做
asmlinkage long kernel_function( int __user *p){
printk("%p \n", (void*) p);
return 0;
}
我还做了通常的其他步骤,比如将函数的原型添加到syscalls.h,将文件名添加到syscall_32.tbl等。但是当我运行我的用户空间函数时,唯一被打印到内核日志的是(NULL)。所以函数会被调用,但是指针会丢失,不知道为什么会这样?
答案 0 :(得分:7)
您没有查看任何其他Linux内核函数?
你不能只传递一个指针。那将是非常不安全的。
您需要使用copy_from_user将数据导入内核空间。
似乎有一些答案就像这样:how is the correct way to use copy_from_user?