Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从用户空间到内核空间丢失了一些参数_Android_Linux Kernel_Hal_Android Kernel - Fatal编程技术网

Android 从用户空间到内核空间丢失了一些参数

Android 从用户空间到内核空间丢失了一些参数,android,linux-kernel,hal,android-kernel,Android,Linux Kernel,Hal,Android Kernel,我有个问题想请教你 我需要将一些参数从用户空间传输到内核空间,但其中一个参数丢失(当我从内核空间检查时,该值不正确)。 但我不知道它为什么会输 下面是我的一些代码和日志,丢失的参数是write_标志,我在用户空间中将write_标志设置为整数(2) 但当我在内核空间打印write_标志时,它完全错了(1651866136)。 一些参数的传输没有问题,比如操作码和arg [ 859.877750] user.write_flag:1651866136, idata->ic.write_fl

我有个问题想请教你

我需要将一些参数从用户空间传输到内核空间,但其中一个参数丢失(当我从内核空间检查时,该值不正确)。 但我不知道它为什么会输

下面是我的一些代码和日志,丢失的参数是write_标志,我在用户空间中将write_标志设置为整数(2)

但当我在内核空间打印write_标志时,它完全错了(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_标志的数据类型为int,操作码和arg的数据类型为u32

谢谢

哈尔方面:

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);

我通过删除解决了这个问题&因为我们不需要在这里引用

ret = ioctl(dev->fd,MMC_IOC_CMD,mmc_local_cmd);