case I2C_RDWR: if (copy_from_user(&rdwr_arg, //第一次拷贝到rdwr_arg (struct i2c_rdwr_ioctl_data __user *)arg, sizeof(rdwr_arg))) return -EFAULT; /* Put an arbitrary limit on the number of messages that can * be sent at once */ if (rdwr_arg.nmsgs > I2C_RDRW_IOCTL_MAX_MSGS) return -EINVAL; rdwr_pa = (struct i2c_msg *) kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg), GFP_KERNEL); if (rdwr_pa == NULL) return -ENOMEM; if (copy_from_user(rdwr_pa, rdwr_arg.msgs, //还从rdwr_arg复制,但是这个是内核的数据 rdwr_arg.nmsgs * sizeof(struct i2c_msg))) { kfree(rdwr_pa); return -EFAULT; } |
原帖由 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( ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |