编译内核函数copy_from_user()和copy_to_user()

文章目录

  • 一、定义
  • 二、例子
  • 三、问题
    • 1.隐式声明函数‘copy_from_user’
    • 2.copy_from_user()缓冲区爆炸


一、定义

copy_from_user(rwbuf, buf, count);
【作用】:从用户空间复制到内核空间

copy_to_user( buf, rwbuf, count);
【作用】:从内核空间复制到用户空间

【头文件】:

#include 			//  copy_to_user() & copy_from_user

【参数】:

  • rwbuf:这个是(内核空间中的)模块文件中的数组
  • buf:这个是(用户空间中)调用时传入的参数
  • count:数组长度

记忆:

  • 都是将第二个数组的值赋值给第一个参数
  • rwbufbuf就是从用户态到内核态,这是from_user;bufrwbuf就是从内核态到用户态,这是to_user;

二、例子

Ubuntu10.04+kernel2.6.32.60编译内核(四):Linux设备驱动

三、问题

1.隐式声明函数‘copy_from_user’

这是没加头文件的原因

#include 			//  copy_to_user() & copy_from_user

2.copy_from_user()缓冲区爆炸

编译内核函数copy_from_user()和copy_to_user()_第1张图片

编译内核函数copy_from_user()和copy_to_user()_第2张图片

可以看到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的长度

你可能感兴趣的:(#,嵌入式系统设计)