Я пытаюсь передать структуру из пространства пользователя в пространство ядра. Я пытался в течение многих часов, и это не работает. Вот что я сделал до сих пор.
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 *pID (в пользовательском пространстве он определяется как pIDs[SIZE])?
РЕДАКТИРОВАТЬ:
С вышеуказанным изменением я получаю эту ошибку? ошибка: ожидаемое выражение перед «структурой», есть идеи?