免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: star316
打印 上一主题 下一主题

问个copy_from_user的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-12 14:48 |只看该作者
rdwr_pa.buf = kmalloc(rdwr_pa.len, GFP_KERNEL);
没问题啊,看清楚,这一句让buf重新赋值并指向一片内核空间

论坛徽章:
0
12 [报告]
发表于 2009-03-12 20:31 |只看该作者
不错,这一句是重新分配内存空间,
只是我不明白, 这一句 data_ptrs
= (u8 __user *)rdwr_pa
.buf;  

是如何把用户空间的数据传递过来的???
因为上面只有一句 (copy_from_user(rdwr_pa, rdwr_arg.msgs,   rdwr_arg.nmsgs * sizeof(struct i2c_msg)))
这里拷贝了元素msgs中的内容,但是msgs中的buf 只是一个指针, 那么就是说BUF 中的内容并没有拷贝过来, 那这个BUF 中的内容是什么时候到rdwr_pa
.buf 中的呢?

分析好久了没头绪. 请指教? 谢谢


[ 本帖最后由 star316 于 2009-3-12 20:34 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-03-13 10:35 |只看该作者
原帖由 star316 于 2009-3-12 14:36 发表
这一功能函数变换的好多,看的卡壳了,再帮我看看最后面一个吧, 谢谢

for( i=0; i 8192) {
                                res = -EINVAL;
                                break;
                        }
                        data_ptrs = (u8 __user *)rdwr_pa.buf;
                        rdwr_pa.buf = kmalloc( ...


data_ptrs指针指向用户空间一块数据区啊,后面调用copy_from_user没问题啊,个人感觉你对C里面的指针概念理解还不是很透彻。

论坛徽章:
0
14 [报告]
发表于 2009-03-13 13:00 |只看该作者
呵呵,指针蛮复杂的,谢谢楼上,搞明白了,

看来只要把它当作一般的函数指针传递就可以了, 我总把用户空间与内核空间的指针独立开了。

论坛徽章:
0
15 [报告]
发表于 2009-03-13 13:49 |只看该作者
八用客气
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP