- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用此函数将缓冲区从用户复制到内核中的缓冲区。两个缓冲区都已分配。我使用 while
以防第一次尝试时未复制所有字节。但由于某种原因,没有复制任何内容,并且程序卡在 while 循环中。原因可能是什么?
void my_copy_from_user(const char* source_buff, char* dest_buff, int size_to_copy){
int not_copied = size_to_copy
int left = size_to_copy;
while( not_copied ){
not_copied = copy_from_user(dest_buff, source_buff, left);
dest_buff += (left - not_copied);
source_buff += (left - not_copied);
left = not_copied;
}
}
最佳答案
有可能由于您无法恢复的原因而发生合理的失败。
请查看:http://lxr.free-electrons.com/source/arch/x86/lib/usercopy_32.c#L681
unsigned long _copy_from_user(void *to, const void __user *from, unsigned n)
{
if (access_ok(VERIFY_READ, from, n))
n = __copy_from_user(to, from, n);
else
memset(to, 0, n);
return n;
}
这是 x86 处理器上 Linux 的 copy_from_user
的底层实现。它首先检查access_ok
。如果不允许访问,它将失败并立即返回n
(您请求复制的字节数)。这会导致无限循环。
两点:
copy_from_user
。如果它在内核模式下复制失败,这是有原因的。从套接字等读取时,这与 read() 函数不同,鼓励您在循环中使用 read() 。dest_buff
传递给copy_from_user
?提示:
left
是否被改变?很可能不是。关于linux - 内核中的 copy_from_user 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27933423/
我正在尝试使用模块读取/写入内核内存,到目前为止读取部分正在工作。我有一个来自用户空间的程序,它打开我的模块创建的设备,并且可以从 x addr (内核内存地址)读取 n 个字节,并且这可以工作(正在
我在编译我的内核模块时遇到了一个警告,我无法解决这个问题。 首先看一下这个简化的代码: #define READ_CHUNK 100u static int _procfs_write(struct
我正在尝试编写一个 Open RG 内核模块,它在给定的时间间隔内向用户空间发送一条消息。为此,我需要内核在将存储此消息的用户空间中保存一个指向静态缓冲区的指针。我在将指针发送到内核时遇到问题。 用户
涉及的结构如下。 结构节点{ 诠释; 诠释乙; } struct ioctl_node { struct node **ptr; int count; //Stores
我正在阅读“The Linux Kernel Module Programming Guide”中的一段,我对下一段有一些疑问。 The reason for copy_from_user or ge
我正在阅读 LDD3。在 chapter 8 ,我无法理解这一段: An example of a function in the kernel that uses vmalloc is the cr
我有一个指向用户空间模式下的数据缓冲区的指针,现在我想使用“copy_from_user”函数将该数据的值复制到内核模式。 假设我的数据指针是“data.ptr.buffer”,它的大小是“dat
我只是想知道为什么 copy_from_user(to, from, bytes) 做真正的复制?因为它只是想让内核访问用户空间的数据,是否可以不移动数据而直接将物理地址映射到内核的地址空间?谢谢,
我正在尝试为保存整数“timer_interval”(全局变量)的 sysfs 文件创建一个存储函数。 static ssize_t sys_store(struct kobject *kobj, s
copy_from_user() 用于内核模块。所以我的理解是它在内核空间中运行。但是,在阅读此“仅用户上下文。此功能可能会休眠”后,我感到困惑。谁能给我一个解释? 最佳答案 短语“用户上下文”并不是
在 uaccess.h 中声明的 copy_from_user 函数是否修改了 (void __user *)from 指针?该指针在函数声明中未声明为 const,仅声明其指向的内容。 我问的原因是
这里是返回值的说明。 unsigned long copy_from_user (void *to, const void __user *from, unsigned long count)
我正在寻找将 PID 值从用户空间复制到内核空间的方法,这是我的代码快照。 内核模块: #include #include #include #include #include #inclu
这个问题在这里已经有了答案: Why do you have to use copy_to_user()/copy_from_user() to access user space from the
我正在尝试使用此函数将缓冲区从用户复制到内核中的缓冲区。两个缓冲区都已分配。我使用 while 以防第一次尝试时未复制所有字节。但由于某种原因,没有复制任何内容,并且程序卡在 while 循环中。原因
我有以下系统调用: long do_print(int n, char *p){ char tmp[n]; //allocate array of n bytes int ret = copy
我试图在 Linux 中编写一个加密驱动程序,但是当我加密字符串并使用 copy_from_user() 将其复制到缓冲区时,它不起作用并且 k 值是字符串中的字符数 如果我将 copy_from_u
我使用在 Mint Linux 下运行的 Linux 内核 v4.0.5 开发了一个简单的线规程。 tty_ldisc_ops 结构如下所示: static struct tty_ldisc_ops
我正在尝试使用以下函数将值从用户空间复制到内核空间: static ssize_t device_write(struct file *filp, const char *buff, size_t l
我正在编写一个 linux 内核驱动程序,对于将数据发送到用户空间或从用户空间读取数据的每个函数,我正在使用 copy_to_user() 和 copy_from_user()。我的问题是:如果我只是
我是一名优秀的程序员,十分优秀!