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