当前位置: 技术问答>linux和unix
内核访问用户空间
来源: 互联网 发布时间:2016-06-10
本文导语: 现在我的驱动程序有这样一个问题,需要直接访问用户空间的数据,因为数据量很大,内核的驱动需要处理他们,如果拷贝的话太耗费资源。有没有什么方法让内核驱动直接访问用户空间的数据,比如用户态程序通过...
现在我的驱动程序有这样一个问题,需要直接访问用户空间的数据,因为数据量很大,内核的驱动需要处理他们,如果拷贝的话太耗费资源。有没有什么方法让内核驱动直接访问用户空间的数据,比如用户态程序通过ioctl传递一个用户程序中的数据空间的指针,通过这个指针,内核驱动有没有办法访问这个空间?
谢谢大家啦!
谢谢大家啦!
|
unsigned long
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
memset(to, 0, n);
return n;
}
参考 copy_from_user 的实现, 用access_ok 检查一下该内存是否可以被访问现。
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
memset(to, 0, n);
return n;
}
参考 copy_from_user 的实现, 用access_ok 检查一下该内存是否可以被访问现。
|
我觉得是没有问题的。 不过要注意 检测指针的 是否属于有效的 用户空间线性区 当然内核也是有相应函数的。