linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()
来源:互联网 发布:淘宝刷收藏有什么用 编辑:程序博客网 时间:2024/06/06 06:50
前面的一篇文章中简单的描述了一下内存映射的内容,http://blog.csdn.net/codectq/article/details/25658813,这篇文章作为用户把内存规划好之后,在用户空间使用IOCTL对设备进行控制时的常用函数的代码摘录。后续我会把这部分完善起来。
#ifdefCONFIG_MMU
externunsigned long __must_check __copy_from_user(void *to, const void __user *from,unsigned long n);
externunsigned long __must_check __copy_to_user(void __user *to, const void *from,unsigned long n);
externunsigned long __must_check __copy_to_user_std(void __user *to, const void*from, unsigned long n);
externunsigned long __must_check __clear_user(void __user *addr, unsigned long n);
externunsigned long __must_check __clear_user_std(void __user *addr, unsigned longn);
#else
#define__copy_from_user(to,from,n)
(memcpy(to, (void __force *)from, n),0)
#define__copy_to_user(to,from,n)
(memcpy((void __force *)to, from, n),0)
#define__clear_user(addr,n)
(memset((void __force *)addr, 0, n), 0)
#endif
externunsigned long __must_check __strncpy_from_user(char *to, const char __user*from, unsigned long count);
externunsigned long __must_check __strnlen_user(const char __user *s, long n);
staticinline unsigned long __must_check copy_from_user(void *to, const void __user*from, unsigned long n)
{
if (access_ok(VERIFY_READ, from, n))
n = __copy_from_user(to, from, n);
else /* security hole - plug it */
memset(to, 0, n);
return n;
}
staticinline unsigned long __must_check copy_to_user(void __user *to, const void*from, unsigned long n)
{
if (access_ok(VERIFY_WRITE, to, n))
n = __copy_to_user(to, from, n);
return n;
}
在新的内核中,修改了这部分代码。部分网上能够查到的资料还一直以很老的内核版本在说明。实在受不了有些对新内核讲解的文章不负责任的添加链接。
./arch/arm/lib/uaccess.S:288:/*Prototype: unsigned long __copy_from_user(void *to,const void *from,unsignedlong n);
./arch/arm/lib/uaccess.S:307:ENTRY(__copy_from_user)
./arch/arm/lib/uaccess.S:547:ENDPROC(__copy_from_user)
copy_to_user与mmap的工作原理
copy_to_user在每次拷贝时需要检测指针的合法性,也就是用户空间的指针所指向的地址的确是一段该进程本身的地址,而不是指向了不属于它的地方,而且每次都会拷贝一次数据,频繁访问内存,由于虚拟地址连续,物理地址不一定会连续,从而造成CPU的CACHE频繁失效,从而使速度降低
- linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()
- linux内核中的copy_to_user和copy_from_user(一)
- linux内核中的copy_to_user和copy_from_user(一)
- linux内核学习---copy_to_user和copy_from_user
- linux内核中的copy_to_user和copy_from_user(一)
- linux copy_to_user和copy_from_user函数的使用说明
- linux内核中的copy_to_user和copy_from_user(一)
- linux内核中的copy_to_user和copy_from_user(一)
- linux copy_to_user() copy_from_user()
- linux copy_from_user/copy_to_user
- Linux copy_to_user、copy_from_user使用
- copy_to_user和copy_from_user函数
- copy_to_user 和 copy_from_user
- copy_to_user和copy_from_user
- copy_to_user和copy_from_user
- copy_to_user和copy_from_user
- copy_to_user和copy_from_user
- copy_to_user()和copy_from_user()
- 喜欢有点幸福到忧伤的旋律
- cocos2d-x经验杂谈
- 3DES算法
- DOMContentLoaded事件
- 在任意UIView上显示Badge
- linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()
- js判断undefined类型
- 项目6 配置与管理Apache服务器
- Android优秀开源项目
- Ubuntu上SVN命令的使用
- 套接字(socket) 端口
- 淡墨轻舞,心若尘香
- gcc编译 strip使用
- System.Data.OracleClient.OracleCommand 已过时: 解决方案