问题描述
#include <linux/kernel.h>
#include <linux/uaccess.h>
unsigned long long cnt = 0;
asmlinkage long sys_customcall(unsigned long long __user *output)
{
unsigned long err;
err = copy_to_user(output,&cnt,sizeof(unsigned long long));
return err;
}
我正在实现一个简单的系统调用。我想将一个值从内核(cnt
)复制到用户指针(output
)。但是,当我运行代码err = 8时,该代码为sizeof(unsigned long long)
-用户端值没有更改。我做错了什么?
我正在使用5.4.59版的Linux内核。
用户级代码如下。
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
unsigned long long cnt=0;
long int err = syscall(436,&cnt);
printf("System call returned %lu\n",err);
printf("System call returned %llu\n",cnt);
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)