一、定义
copy_from_user(rwbuf, buf, count);
【作用】:从用户空间复制到内核空间
copy_to_user( buf, rwbuf, count);
【作用】:从内核空间复制到用户空间
【头文件】:
#include <linux/uaccess.h> // copy_to_user() & copy_from_user
【参数】:
-
rwbuf
:这个是(内核空间中的)模块文件中的数组
-
buf
:这个是(用户空间中)调用时传入的参数
-
count
:数组长度
记忆:
- 都是将第二个数组的值赋值给第一个参数
-
rwbuf
←buf
就是从用户态到内核态,这是from_user;buf
←rwbuf
就是从内核态到用户态,这是to_user;
二、例子
Ubuntu10.04+kernel2.6.32.60编译内核(四):Linux设备驱动
三、问题
1.隐式声明函数‘copy_from_user’
这是没加头文件的原因
#include <linux/uaccess.h> // copy_to_user() & copy_from_user
2.copy_from_user()缓冲区爆炸
可以看到write写入部分的字符"just"和"do it"后面有很多乱码,而read部分没有。
这是因为static ssize_t _seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
之类的buffer
,也就是copy_from_user()
中的buffer
。
这个东西是用户的全部缓冲区,所以后面有其他的东西。要不然为什么还要传个count
来表示要截取buffer
的长度。