ユーザー空間からカーネル空間に構造体を渡そうとしています。私は何時間も試していましたが、うまくいきません。これが私がこれまでに行ったことです..
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] のように定義されます)?
編集:
上記の変更により、このエラーが発生しますか? エラー:「構造体」の前に式が必要ですか?