【发布时间】:2021-05-03 21:23:49
【问题描述】:
我正在尝试将结构的地址作为ioctl() 的第三个参数传递。当我尝试在 my_ioctl() 中读取结构成员时,我无法访问它们。我在将地址传递给 ioctl() 之前读取了地址,然后将 my_ioctl() 内的地址转换为结构指针类型并将其分配给新的指针变量。然后,当我再次读取地址时,它与我最初传入的地址不匹配。
所以
MY_STRUCT struct;
MY_STRUCT *pStruct = &struct;
printf("address before ioctl: x%08X\n", (int)pStruct);
if(ioctl(fd, command, (int)pStruct) < 0)
。 . .
然后在驱动中
int my_ioctl(struct dev *pDev, int cmd, int arg)
MY_STRUCT *pStruct = (MY_STRUCT*)arg;
printf("addr in ioctl: x08X\n", pStruct);
switch(cmd)
。 . .
为什么地址变了?
【问题讨论】:
-
你需要做
copy_from_user -
@stark 我已经在 linux 驱动程序中看到过,但是 vxworks 是否也有 copy_from_user 函数?
-
在第二个 printf() 中,格式中缺少 %。是错字吗?