如何从 /dev/iio:deviceX 中的 LSM330 读取数据?
How to read data from LSM330 in /dev/iio:deviceX?
我正在尝试在 i.MX6 板上连接 LSM330 accelerometer/gyroscope 模块。模块连接到I2C总线,设备树文件相关部分如下:
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1_2>;
status = "okay";
/* LSM330 motion detector (accelerometer) */
lsm330_accel: lsm330_accel@0x1e {
compatible = "st,lsm330-accel";
st,drdy-int-pin = <1>;
reg = <0x1e>;
};
/* LSM330 motion detector (gyroscope) */
lsm330_gyro: lsm330_gyro@0x6a {
compatible = "st,lsm330-gyro";
st,drdy-int-pin = <2>;
reg = <0x6a>;
};
};
加速度计模块显示为 /dev/iio:device0
,陀螺仪模块显示为 /dev/iio:device1
。它们还显示为 /sys/bus/iio/devices/iio:device0
和 /sys/bus/iio/devices/iio:device1
。我可以通过 cat in_accel_x_raw
等获取传感器读数。但是,运行 cat /dev/iio:device0
立即 returns 并且没有输出。
在网上搜索后,我也尝试了以下命令:
cd /sys/bus/iio/devices/iio_sysfs_trigger
echo 0 > add_trigger
cd /sys/bus/iio/devices/iio:device0
echo 1 > scan_elements/in_accel_x_en
echo 1 > scan_elements/in_accel_y_en
echo 1 > scan_elements/in_accel_z_en
echo 1 > scan_elements/in_timestamp_en
echo sysfstrig0 > trigger/current_trigger
echo 100 > buffer/length
echo 1 > buffer/enable
echo 1 > /sys/bus/iio/devices/trigger0/trigger_now
这应该设置通道、启用缓冲区并将一些读数写入缓冲区。据我所知,cat /dev/iio:device0
应该显示缓冲区,但它给了我 Device or resource busy
。使用 cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw
从内核进一步读取不再有效并给出相同的错误消息。
我是 linux 内核的新手,我的目标是将传感器数据公开给 Android 系统,以便用户可以旋转屏幕等。如何获得 Android 从模块获取传感器读数?
查看 android logcat 后,发现 Android HAL 没有权限读取或写入 sysfs 中的目录。我最终在 init.rc 文件中放置了一堆 chmod
命令,因此 Android 可以访问传感器数据。
# Change permissions for the LSM330 sysfs entries (accelerometer)
chmod 0666 /sys/bus/iio/devices/iio\:device0/sampling_frequency
chmod 0666 /sys/bus/iio/devices/iio\:device0/buffer/enable
chmod 0666 /sys/bus/iio/devices/iio\:device0/buffer/length
chmod 0666 /sys/bus/iio/devices/iio\:device0/trigger/current_trigger
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_x_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_y_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_z_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_timestamp_en
chmod 0666 /dev/iio\:device0
希望这对某人有所帮助。
我正在尝试在 i.MX6 板上连接 LSM330 accelerometer/gyroscope 模块。模块连接到I2C总线,设备树文件相关部分如下:
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1_2>;
status = "okay";
/* LSM330 motion detector (accelerometer) */
lsm330_accel: lsm330_accel@0x1e {
compatible = "st,lsm330-accel";
st,drdy-int-pin = <1>;
reg = <0x1e>;
};
/* LSM330 motion detector (gyroscope) */
lsm330_gyro: lsm330_gyro@0x6a {
compatible = "st,lsm330-gyro";
st,drdy-int-pin = <2>;
reg = <0x6a>;
};
};
加速度计模块显示为 /dev/iio:device0
,陀螺仪模块显示为 /dev/iio:device1
。它们还显示为 /sys/bus/iio/devices/iio:device0
和 /sys/bus/iio/devices/iio:device1
。我可以通过 cat in_accel_x_raw
等获取传感器读数。但是,运行 cat /dev/iio:device0
立即 returns 并且没有输出。
在网上搜索后,我也尝试了以下命令:
cd /sys/bus/iio/devices/iio_sysfs_trigger
echo 0 > add_trigger
cd /sys/bus/iio/devices/iio:device0
echo 1 > scan_elements/in_accel_x_en
echo 1 > scan_elements/in_accel_y_en
echo 1 > scan_elements/in_accel_z_en
echo 1 > scan_elements/in_timestamp_en
echo sysfstrig0 > trigger/current_trigger
echo 100 > buffer/length
echo 1 > buffer/enable
echo 1 > /sys/bus/iio/devices/trigger0/trigger_now
这应该设置通道、启用缓冲区并将一些读数写入缓冲区。据我所知,cat /dev/iio:device0
应该显示缓冲区,但它给了我 Device or resource busy
。使用 cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw
从内核进一步读取不再有效并给出相同的错误消息。
我是 linux 内核的新手,我的目标是将传感器数据公开给 Android 系统,以便用户可以旋转屏幕等。如何获得 Android 从模块获取传感器读数?
查看 android logcat 后,发现 Android HAL 没有权限读取或写入 sysfs 中的目录。我最终在 init.rc 文件中放置了一堆 chmod
命令,因此 Android 可以访问传感器数据。
# Change permissions for the LSM330 sysfs entries (accelerometer)
chmod 0666 /sys/bus/iio/devices/iio\:device0/sampling_frequency
chmod 0666 /sys/bus/iio/devices/iio\:device0/buffer/enable
chmod 0666 /sys/bus/iio/devices/iio\:device0/buffer/length
chmod 0666 /sys/bus/iio/devices/iio\:device0/trigger/current_trigger
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_x_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_y_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_z_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_timestamp_en
chmod 0666 /dev/iio\:device0
希望这对某人有所帮助。