gpt4 book ai didi

c - 当使用 copy_to_user 时,它给出了错误的地址

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:32 24 4
gpt4 key购买 nike

我正在尝试添加一个 proc 文件以从内核中读取一些信息。但是当我尝试从 proc 文件中 cat 信息时,它给出了“错误地址”错误。

int proc_read(char *buffer, char **starter, off_t off, int count, 
int *eof, void *data)
{

if (off > 0)
{
*eof = 1;
return 0;
}

if (copy_to_user(buffer, info_str, info_str_size))
{
return -EFAULT;
}

return info_str_size;
}

insmod后,使用cat读取proc文件,但给出bad address错误; info_str 是一个全局的 char 数组。

最佳答案

您的问题的答案非常简单。在 proc_read 函数中,您不需要使用 copy_to_user:一个简单的 memcpy 就可以完成这项工作,因为缓冲区位于内核内存中。但是,如果您正在创建一个 proc_write 函数,您确实需要使用 copy_from_user,因为在这种情况下缓冲区位于用户内存中。

一个提示是,您可能还应该在成功时发出 EOF 信号。这将使您的函数免于被调用两次。

以下应该足够了:

int proc_read(char *buffer, char **starter, off_t off, int count,
int *eof, void *data)
{
if (off > 0)
{
*eof = 1;
return 0;
}

memcpy(buffer, info_str, info_str_size);
*eof = 1;
return info_str_size;
}

您还应该注意,这种编写文件条目的方式已经很老了,您应该避免使用它。 seq_file 接口(interface)更不容易出错(并且可以像 less 和 more 这样的分页器一起工作)。看看http://lwn.net/Articles/22355/如果你有兴趣。

关于c - 当使用 copy_to_user 时,它给出了错误的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344910/

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