0
我有傳輸參數的問題想諮詢,失去了一些參數從用戶空間到內核空間
我需要一些參數從用戶空間轉移到內核空間,但其中一人丟失(該值不正確,當我從內核空間檢查它)。 但我不知道爲什麼它輸了。
下面是我的一些代碼和日誌,丟失的參數是write_flag,我把write_flag設置爲用戶空間中的整數(2)。
但是,當我在內核空間打印write_flag它完全錯誤(1651866136)。 一些參數沒有像操作碼和arg那樣的問題轉移。
[ 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,操作碼和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);