2014-02-18 51 views
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); 

回答

0

我固定的去除&,因爲我們並不需要在這裏參考的問題。

ret = ioctl(dev->fd,MMC_IOC_CMD,mmc_local_cmd); 
相關問題