STMicroelectronics / STMems_Android_Sensor_HAL_IIO

DISCONTINUED (October 2022): the maintenance for this repository has been discontinued. Please refer to https://github.com/STMicroelectronics/st-mems-android-linux-sensors-hal for the up-to-date HAL repository. This repository contains ST Android sensor Hardware Abstraction Layer (HAL) for MEMS Linux IIO drivers
Apache License 2.0
34 stars 21 forks source link

App cannot read the data using st_imu68 driver #7

Open toni1727 opened 3 years ago

toni1727 commented 3 years ago

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 }

PritamSSahoo01 commented 11 months ago

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.