SPI_IOC_RD_CODE 和 SPI_IOC_RD_MODE32 的区别?

问题描述 投票:0回答:1

我的设备使用ARM进行处理,操作系统是32位的。我在应用层使用SPI时,如果

ioctl()
函数中的参数为
SPI_IOC_WR_MODE
,则不会报错。如果是
SPI_IOC_WR_MODE32
,就会报如下错误:

can't set spi mode: Inappropriate ioctl for device

这两个选项有什么区别?

ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
if (ret == -1)
    pabort("can't set spi mode");
linux linux-kernel arm spi
1个回答
0
投票

这些 IOCTL 有点像版本“1”和版本“2”。在此期间,还需要更多位。引入了新的 IOCTL,而不是添加一些版本字段。

旧的,即

SPI_IOC_*_MODE
在模式字段仅为 8 位宽时使用,而
SPI_IOC_*_MODE32
预计在 32 位参数上运行。您可以查看可能位的列表并检查两个 IOCTL 都支持的 8 LSB 位。并且各自的处理代码是相同的,只是参数大小不同。

您看到的错误意味着在您的情况下设备不支持它(旧内核?)或参数的大小无效(但根据代码后者甚至不应该编译)。因此,如果没有附加信息,很难判断您的情况到底出了什么问题,但至少您现在应该知道这些 IOCTL 之间的区别。

© www.soinside.com 2019 - 2024. All rights reserved.