Потерял некоторый параметр из пространства пользователя в пространство ядра

У меня вопрос по параметру передачи хочу проконсультироваться,

Мне нужно передать некоторые параметры из пространства пользователя в пространство ядра, но один из них потерян (неверное значение, когда я проверяю его из пространства ядра). Но я понятия не имею, почему это потеряно.

Ниже приведены некоторые из моего кода и журнала, потерянный параметр - write_flag, я установил write_flag как целое число (2) в пространстве пользователя.

Но когда я печатаю write_flag в пространстве ядра, это совершенно неправильно (1651866136). некоторые параметры были переданы без проблем, как код операции и аргумент.

[  859.877750] user.write_flag:1651866136, idata->ic.write_flag:1651866136      
[  859.883133] user.opcode:8, idata->ic.opcode:8                                
[  859.887421] user.arg:0, idata->ic.arg:0   

Кто-нибудь может дать мне некоторую идею, чтобы решить эту проблему, тип данных для write_flag - int, opcode и arg - __u32.

Благодарю.

HAL сторона:

LOGI("dev->fd:%d, cmd_idx:%d, arg:%d.",dev->fd,mmc_local_cmd->opcode, mmc_local_cmd->arg);
LOGI("dev->write_flag:%d.",mmc_local_cmd->write_flag);
ret = ioctl(dev->fd,MMC_IOC_CMD,&mmc_local_cmd);

Сторона ядра:

if (copy_from_user(&idata->ic, user, sizeof(idata->ic))) {
    err = -EFAULT;
    goto idata_err;
}
/*FIXME: write_flag is incorrect before copy_from_user execute */
printk("user.write_flag:%d, idata->ic.write_flag:%d\n",user->write_flag, idata->ic.write_flag);
printk("user.opcode:%d, idata->ic.opcode:%d\n",user->opcode, idata->ic.opcode);
printk("user.arg:%d, idata->ic.arg:%d\n",user->arg, idata->ic.arg);

1 ответ

Решение

Я исправил проблему, удалив &, потому что нам не нужно ссылаться здесь.

ret = ioctl(dev->fd,MMC_IOC_CMD,mmc_local_cmd);
Другие вопросы по тегам