STMems_Android_Sensor_HAL_IIO icon indicating copy to clipboard operation
STMems_Android_Sensor_HAL_IIO copied to clipboard

App cannot read the data using st_imu68 driver

Open toni1727 opened this issue 5 years ago • 1 comments

Hello and Happy new year!,

I'm using the LSM9DS1 sensor and i added the st_imu68 IIO driver into my kernel.

https://github.com/STMicroelectronics/STMems_Linux_IIO_drivers/tree/linux-4.14.y-gh/drivers/iio/imu/st_imu68

Inside /sys/bus/iio/devices i can read raw devices. So the driver is working fine.

But the app still cannot read the data.

The LOG is this:

image

image image

ueventd.rc

#common iio char devices /dev/iio:device* 0666 system system

#common sensors files

/sys/bus/iio/devices/iio:device* buffer/enable 0666 system system /sys/bus/iio/devices/iio:device* buffer/length 0666 system system /sys/bus/iio/devices/iio:device* buffer/watermark 0666 system system

/sys/bus/iio/devices/iio:device* dev 0666 system system

/sys/bus/iio/devices/iio:device* sampling_frequency 0666 system system /sys/bus/iio/devices/iio:device* sampling_frequency_available 0666 system system

/sys/bus/iio/devices/iio:device* scan_elements/in_timestamp_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_timestamp_index 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_timestamp_type 0666 system system

/sys/bus/iio/devices/iio:device* hwfifo_flush 0666 system system /sys/bus/iio/devices/iio:device* hwfifo_enabled 0666 system system /sys/bus/iio/devices/iio:device* hwfifo_watermark 0666 system system /sys/bus/iio/devices/iio:device* injection_mode 0666 system system /sys/bus/iio/devices/iio:device* trigger/current_trigger 0666 system system

#accelerometer sensor /sys/bus/iio/devices/iio:device* scan_elements/in_accel_x_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_accel_y_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_accel_z_en 0666 system system /sys/bus/iio/devices/iio:device* in_accel_x_scale 0666 system system /sys/bus/iio/devices/iio:device* in_accel_y_scale 0666 system system /sys/bus/iio/devices/iio:device* in_accel_z_scale 0666 system system /sys/bus/iio/devices/iio:device* in_accel_x_raw 0666 system system /sys/bus/iio/devices/iio:device* in_accel_y_raw 0666 system system /sys/bus/iio/devices/iio:device* in_accel_z_raw 0666 system system

/sys/bus/iio/devices/iio:device* in_accel_injection_raw 0666 system system

#magnetometer sensor /sys/bus/iio/devices/iio:device* scan_elements/in_magn_x_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_magn_y_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_magn_z_en 0666 system system /sys/bus/iio/devices/iio:device* in_magn_x_scale 0666 system system /sys/bus/iio/devices/iio:device* in_magn_y_scale 0666 system system /sys/bus/iio/devices/iio:device* in_magn_z_scale 0666 system system /sys/bus/iio/devices/iio:device* in_magn_x_raw 0666 system system /sys/bus/iio/devices/iio:device* in_magn_y_raw 0666 system system /sys/bus/iio/devices/iio:device* in_magn_z_raw 0666 system system

#gyroscope sensor /sys/bus/iio/devices/iio:device* scan_elements/in_anglvel_x_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_anglvel_y_en 0666 system system /sys/bus/iio/devices/iio:device* scan_elements/in_anglvel_z_en 0666 system system /sys/bus/iio/devices/iio:device* in_anglvel_x_scale 0666 system system /sys/bus/iio/devices/iio:device* in_anglvel_y_scale 0666 system system /sys/bus/iio/devices/iio:device* in_anglvel_z_scale 0666 system system /sys/bus/iio/devices/iio:device* in_anglvel_x_raw 0666 system system /sys/bus/iio/devices/iio:device* in_anglvel_y_raw 0666 system system /sys/bus/iio/devices/iio:device* in_anglvel_z_raw 0666 system system

Dts file (I don't have an IRQ pin physically connected. I don't know if that is mandatory. Or the configuration would have to be different.):

lsm9ds1_ag@6b {
		compatible = "st,lsm9ds1";
		reg = <0x6B>;
		status = "okay";			
		interrupt-parent = <&intc>;
		interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-names = "ag_irq";
		pinctrl-names = "default";
		rot-matrix = /bits/ 16 <(1) (0) (0)
		(0) (1) (0)
		(0) (0) (1)>;
		g-poll-interval = <100>;
		g-min-interval = <2>;
		g-fs-range = <0>;
		x-poll-interval = <100>;
		x-min-interval = <1>;
		x-fs-range = <0>;
		aa-filter-bw = <0>;			
};
lsm9ds1_m@1e{
		compatible = "st,lsm9ds1_magn";
		reg = <0x1E>;
		status = "okay";			
		interrupt-parent = <&intc>;
		interrupts = <0 90 IRQ_TYPE_LEVEL_HIGH>;	
		interrupt-names = "m_irq";	
		pinctrl-names = "default";
		rot-matrix = /bits/ 16 <(1) (0) (0)
                     (0) (1) (0)
                     (0) (0) (1)>;
        		poll-interval = <100>;
        		min-interval = <13>;
        		fs-range = <0>;			
};

image

'cat /proc/interrupts'

image

Also I modified SELinux policy: (I don't know if that is necesary)

############################################################
STSensors.te

type STSensors, domain, mlstrustedsubject, coredomain;
type STSensors_exec, exec_type, file_type;

# Started by init
init_daemon_domain(STSensors)

# Access to /persist/STSensors
allow STSensors persist_file:dir r_dir_perms;
allow STSensors persist_STSensors_file:dir rw_dir_perms;
allow STSensors persist_STSensors_file:file create_file_perms;

# Access to /data/STSensorHAL
allow STSensors system_data_file:dir  { create_dir_perms getattr };
allow STSensors system_data_file:file create_file_perms;

# This part is to be used if APK is used to get calibration data
allow STSensors app_data_file:dir  { rw_dir_perms getattr };
allow STSensors app_data_file:file rw_file_perms;

############################################################

But I received two errors when I compile:

STSensors.te:8:ERROR 'unknown type persist_file' at token ';'

"ERROR: permissive domains not allowed in user builds" violated by allow STSensors system_data_file:file { write create setattr append unlink rename }

toni1727 avatar Jan 03 '21 19:01 toni1727

Hi @toni1727 Have you resolved the integration of LSM9DS1 in your source code and getting the value through the apk file successfully?? I am also trying to integrate LSM6DSM sensor with my Android 11 source code and i have followed the steps as mentioned in the link:https://github.com/STMicroelectronics/STMems_Android_Sensor_HAL_IIO.git .

i have tried both the way in the mentioned Documentation Steps. First i have followed the Selftest tool manual and during compilation i got many errors.Then i followed the Factory calibration option and also i am getting the same error as you as: 16:42:51 ************************************************************ 16:42:51 You are building on a machine with 7.64GB of RAM 16:42:51 16:42:51 The minimum required amount of free memory is around 16GB, 16:42:51 and even with that, some configurations may not work. 16:42:51 16:42:51 If you run into segfaults or other errors, try reducing your 16:42:51 -j value. 16:42:51 ************************************************************

PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=11 TARGET_PRODUCT=phyboard_polis TARGET_BUILD_VARIANT=userdebug TARGET_BUILD_TYPE=release TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=cortex-a53 TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv7-a-neon TARGET_2ND_CPU_VARIANT=cortex-a9 HOST_ARCH=x86_64 HOST_2ND_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-5.4.0-150-generic-x86_64-Ubuntu-18.04.6-LTS HOST_CROSS_OS=windows HOST_CROSS_ARCH=x86 HOST_CROSS_2ND_ARCH=x86_64 HOST_BUILD_TYPE=release BUILD_ID=RQ1A.201205.003 OUT_DIR=out PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl external/mesa3d vendor/nxp-opensource/imx/power hardware/google/pixel vendor/partner_gms hardware/google/camera vendor/nxp- opensource/imx/camera

[ 1% 24/1701] build out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows FAILED: out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows /bin/bash -c "(ASAN_OPTIONS=detect_leaks=0 out/host/linux-x86/bin/checkpolicy -M -c 30 -o out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows.tm p out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/policy.conf ) && (out/host/linux-x86/bin/sepolicy-analyze out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_i ntermediates/sepolicy_neverallows.tmp neverallow -w -f out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/policy_2.conf || ( echo "" 1>&2; echo "sepolicy-analyze failed. This is most likely due to the use" 1>&2; echo "of an expanded attribute in a neverallow assertion. Please fix" 1>&2; echo "the policy." 1>&2; exit 1 ) ) && (touch ou t/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp ) && (mv out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_nevera llows.tmp out/target/product/phyboard_polis/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows )" device/nxp/imx8m/sepolicy/STSensors.te:8:ERROR 'unknown type persist_file' at token ';' on line 58506:

Access to /persist/STSensors

allow STSensors persist_file:dir { open getattr read search ioctl lock watch watch_reads }; checkpolicy: error(s) encountered while parsing configuration [ 1% 25/1701] build out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy FAILED: out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy /bin/bash -c "(ASAN_OPTIONS=detect_leaks=0 out/host/linux-x86/bin/checkpolicy -M -c 30 -o out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy.tmp out/target/pro duct/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy.recovery.conf ) && (out/host/linux-x86/bin/sepolicy-analyze out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/ sepolicy.tmp permissive > out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy.permissivedomains ) && (if [ "userdebug" = "user" -a -s out/target/product/phyboard_polis/ obj/ETC/sepolicy.recovery_intermediates/sepolicy.permissivedomains ]; then echo "==========" 1>&2; echo "ERROR: permissive domains not allowed in user builds" 1>&2; e cho "List of invalid domains:" 1>&2; cat out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy.permissivedomains 1>&2; exit 1; fi ) && (mv out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy.tmp out/target/product/phyboard_polis/obj/ETC/sepolicy.recovery_intermediates/sepolicy )" device/nxp/imx8m/sepolicy/STSensors.te:8:ERROR 'unknown type persist_file' at token ';' on line 62204:

Access to /persist/STSensors

allow STSensors persist_file:dir { open getattr read search ioctl lock watch watch_reads }; checkpolicy: error(s) encountered while parsing configuration 16:43:16 ninja failed with: exit status 1

failed to build some targets (28 seconds)

Any solution to deal with the error??

Thanks in advance.

PritamSSahoo01 avatar Oct 06 '23 11:10 PritamSSahoo01