我正在尝试将结构从用户空间传递到内核空间。我已经尝试了好几个小时,但它不起作用。这是我到目前为止所做的..
int device_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg){
int ret, SIZE;
switch(cmd){
case PASS_STRUCT_ARRAY_SIZE:
SIZE = (int *)arg;
if(ret < 0){
printk("Error in PASS_STRUCT_ARRAY_SIZE\n");
return -1;
}
printk("Struct Array Size : %d\n",SIZE);
break;
case PASS_STRUCT:
struct mesg{
int pIDs[SIZE];
int niceVal;
};
struct mesg data;
ret = copy_from_user(&data, arg, sizeof(*data));
if(ret < 0){
printk("PASS_STRUCT\n");
return -1;
}
printk("Message PASS_STRUCT : %d\n",data.niceVal);
break;
default :
return -ENOTTY;
}
return 0;
}
我在定义结构时遇到了麻烦。定义它的正确方法是什么?我想要 int pIDs[SIZE]。int *pIDs 会这样做吗(在用户空间中它被定义为 pIDs[SIZE])?
编辑:
通过上述更改,我收到此错误?错误:“结构”之前的预期表达有什么想法吗?