从用户读取 IIO 设备数据 Space
Reading IIO device data from User Space
我正在使用 MPU-9250 Invensense 传感器,它的驱动程序来自 android 内核并与 linux 内核集成。驱动程序对内核和节点进行了一些修改后工作正常,/dev/iio:\device0,并且还会生成 sys 文件系统下的文件。所以我假设驱动程序工作正常。
现在我想通过使用 /dev/iio:\device0 节点的应用程序从用户 space 读取传感器数据。为此,我需要在 MPU-9250 驱动程序中打开读取关闭功能。但是驱动中没有文件操作。
我尝试从 sys 文件系统读取数据,即
# echo 1 > /sys/bus/iio/devices/iio:device0/power_state
# echo 1 > /sys/bus/iio/devices/iio:device0/accel_enable
# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable
在此之后,它应该填充从传感器读取的数据。但是什么也没有显示。所以在此之后我尝试从开发文件系统读取数据
# cat /dev/iio:\device0
即便如此,也没有任何显示。
谁能告诉我如何读取数据。
此致
我认为您的问题与您没有启用任何扫描元素有关。
扫描元素位于:
/sys/bus/iio/devices/iio:设备[x]/scan_elements.
在这里你应该启用你想要捕获的扫描元素。你应该有 3 个文件,后缀为:_en、_index 和 _type。
_type 指的是扫描的类型,index 是设备读取时分配给扫描的通道,_en 是哪个状态"enable"。只需将“1”写入您希望启用的扫描 _en 文件,写入 /buffer/length 100 和 /buffer/enable“1”,您应该开始获取数据。
我不认为这是你的问题,因为你可能根本无法启用缓冲区,但是,你可能需要启用一个触发器,它也应该位于 /sys/bus/iio/devices 中。你应该在这里有 trigger1/2/3 个目录,这取决于你拥有的 IIO 设备的数量。您可能需要将触发器名称写到 /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger.
所以你应该这样做:
echo /sys/bus/iio/devices/trigger[x]/name >
/sys/bus/iio/devices/iio:device[x]/trigger/current_trigger
希望对您有所帮助。
我正在使用 MPU-9250 Invensense 传感器,它的驱动程序来自 android 内核并与 linux 内核集成。驱动程序对内核和节点进行了一些修改后工作正常,/dev/iio:\device0,并且还会生成 sys 文件系统下的文件。所以我假设驱动程序工作正常。
现在我想通过使用 /dev/iio:\device0 节点的应用程序从用户 space 读取传感器数据。为此,我需要在 MPU-9250 驱动程序中打开读取关闭功能。但是驱动中没有文件操作。
我尝试从 sys 文件系统读取数据,即
# echo 1 > /sys/bus/iio/devices/iio:device0/power_state
# echo 1 > /sys/bus/iio/devices/iio:device0/accel_enable
# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable
在此之后,它应该填充从传感器读取的数据。但是什么也没有显示。所以在此之后我尝试从开发文件系统读取数据
# cat /dev/iio:\device0
即便如此,也没有任何显示。
谁能告诉我如何读取数据。
此致
我认为您的问题与您没有启用任何扫描元素有关。
扫描元素位于: /sys/bus/iio/devices/iio:设备[x]/scan_elements.
在这里你应该启用你想要捕获的扫描元素。你应该有 3 个文件,后缀为:_en、_index 和 _type。
_type 指的是扫描的类型,index 是设备读取时分配给扫描的通道,_en 是哪个状态"enable"。只需将“1”写入您希望启用的扫描 _en 文件,写入 /buffer/length 100 和 /buffer/enable“1”,您应该开始获取数据。
我不认为这是你的问题,因为你可能根本无法启用缓冲区,但是,你可能需要启用一个触发器,它也应该位于 /sys/bus/iio/devices 中。你应该在这里有 trigger1/2/3 个目录,这取决于你拥有的 IIO 设备的数量。您可能需要将触发器名称写到 /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger.
所以你应该这样做:
echo /sys/bus/iio/devices/trigger[x]/name >
/sys/bus/iio/devices/iio:device[x]/trigger/current_trigger
希望对您有所帮助。