gpt4 book ai didi

linux-kernel - 如何使用 copy_to_user

转载 作者:行者123 更新时间:2023-12-04 05:11:35 27 4
gpt4 key购买 nike

我正在尝试将自定义系统调用添加到 linux 内核中。这是一个简单的代码:

#include <linux/mysyscall.h>
#include <linux/kernel.h>
#include <asm/uaccess.h>
#include <asm/system.h>

asmlinkage int sys_mysyscall(int *data){

int a = 3;

cli();
copy_to_user(data, &a, 1);
sti();

printk(KERN_EMERG "Called with %d\n", a);

return a;
}

我可以编译一个添加了 mysyscall 的内核,当我尝试使用如下用户程序访问它时:

#include <linux/mysyscall.h>

int main(void){

int *data;
int r;
int a = 0;
data = &a;

r = mysyscall(data);

printf("r is %d and data is %d", r, *data);
}

*data 不等于 3 它等于 0。

我应该如何使用 copy_to_user 来修复它?

最佳答案

向用户代码行的复制仅从“a”复制一个字节。在小端系统的情况下,它将为 0。复制所有 4 个字节以获得正确的结果。

关于linux-kernel - 如何使用 copy_to_user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com