[英]My system call is not working properly
我需要创建2个新的系统调用,以通过给定pid从进程中设置和获取属性。 我更改了task_struct,添加了int z_value(这是我需要设置/获取的)
我还设法为每个创建的进程设置默认的z_value(200)。
运行get系统调用时,可以看到默认的z_value正确。 但是,当我尝试设置z_value时,什么也没有发生。
没有编译错误,没有分段错误等。
这是我设置的系统调用。
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/uaccess.h>
asmlinkage void sys_set_z_value ( int user_value , pid_t pid )
{
rcu_read_lock();
struct task_struct *p = find_task_by_vpid(pid);
p->z_value = user_value;
rcu_read_unlock();
}
您对copy_from_user
调用没有任何意义。 没有指向用户空间内存的指针。 user_value
是一个值,而不是指针。 (如果您打算将其用作指针,则需要修复涉及的类型,但看起来您好像是通过值将此int
传递给syscall。)只需分配p->z_value = user_value;
。
long
类型。 SYSCALL_DEFINE2()
宏。 p
类型将触发警告) p
变量将为NULL
,并且应返回-ESRCH
对这个:
我还设法为每个创建的进程设置默认的z_value(200)。
我希望您也能注意init_task
,这是一个常见错误。
两个建议:
1)在源文件中引入故意错误,例如一些随机字符,并确保您的内核构建失败。 令人惊讶的是,归因于您添加的未构建代码的问题数量。
假设不是
2)用很多printk加载代码,这样您就可以通过查看控制台窗口或在运行它后调用dmesg来查看其试图执行的操作。 将它们放到各处检查每个假设-代码是否运行,变量是否符合您的想法等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.