为什么在没有连接设备的情况下ioctl返回0?

问题描述

我有一个带有运动传感器的树莓派。当我运行ioctl()调用时,无论是否连接了运动传感器,它始终返回0?

ioctl(fd,I2C_SLAVE,_DEVICE_Addr)

解决方法

这是预期的行为。 I2C_SLAVE ioctl不会检查设备是否存在。它根本不通过I2C总线进行通信。它只是进行一些检查以了解该地址是否已被使用,然后保存客户端地址以供后续调用。

不幸的是,这没有记录,但是您可以在代码https://elixir.bootlin.com/linux/v5.8/source/drivers/i2c/i2c-dev.c#L401

中阅读它。