【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】驱动移植

一、环境介绍

RK3588主板搭载Android12操作系统,内核是Linux5.10,使用ST的六轴传感器LSM6DSR芯片。

二、芯片介绍

LSM6DSR是一款加速度和角速度(陀螺仪)六轴传感器,还内置了一个温度传感器。该芯片可以选择I2C,SPI通讯,还有可编程终端,可以后置摄像头等设备,功能是很强大的(感兴趣的可以去看数据手册)。该芯片原厂公开了input和iio两种驱动,我这边选用的是iio驱动。

三、驱动移植

驱动移植的目标是内核,所以下面的路径都是在kernel目录下。

源码链接:https://github.com/STMicroelectronics/STMems_Linux_IIO_drivers/tree/linux-4.19.y-gh

1,拷贝drivers/iio/imu/st_lsm6dsr文件夹到源码内核中相应路径

2,在 drivers/iio/imu/Kconfig中添加驱动支持,如果源码中有自带的st_lsm6dsx驱动的话,需要在对应的代码前加#注释掉,以免影响移植的驱动。

source "drivers/iio/imu/st_lsm6dsr/Kconfig"

3,在drivers/iio/imu/Makefile中添加驱动编译,如果源码中有自带的st_lsm6dsx驱动的话,需要在对应的代码前加#注释掉,以免影响移植的驱动。

obj-y += st_lsm6dsr/

4,在 include/uapi/linux/iio/types.h种增加枚举值(找到对应enum,查找下下面的值是否有缺,增加缺失的即可)

     enum iio_event_type {
            IIO_EV_TYPE_THRESH_ADAPTIVE,
            IIO_EV_TYPE_MAG_ADAPTIVE,
            IIO_EV_TYPE_CHANGE,
            IIO_EV_TYPE_FIFO_FLUSH,
    };

     enum iio_event_direction {
            IIO_EV_DIR_RISING,
            IIO_EV_DIR_FALLING,
            IIO_EV_DIR_NONE,
            IIO_EV_DIR_FIFO_EMPTY,
            IIO_EV_DIR_FIFO_DATA,
    };

5,在include/uapi/linux/iio/types.h中增加枚举值

     enum iio_chan_type {
             IIO_ELECTRICALCONDUCTIVITY,
             IIO_COUNT,
             IIO_INDEX,
             IIO_SIGN_MOTION,
             IIO_STEP_DETECTOR,
             IIO_STEP_COUNTER,
             IIO_TILT,
             IIO_TAP,
             IIO_TAP_TAP,
             IIO_WRIST_TILT_GESTURE,
             IIO_GESTURE,
             IIO_WKUP,
             IIO_FREE_FALL,
             IIO_GRAVITY,
     };

6,在arch/arm64/boot/dts/rockchip/rd-rk3588.dts中增加设备树支持

&i2c1 {#总线名称需根据自身情况修改

	status = "okay";

	st_lsm6dsr: lsm6dsr@6b {
		compatible = "st,lsm6dsr";
		reg = <0x6b>;
		interrupt-parent = <&gpio3>;#需根据自身情况修改
		interrupts = <RK_PC3 IRQ_TYPE_LEVEL_HIGH>;#需根据自身情况修改
	};
}

7,进入到源码根目录执行指令“./build.sh menuconfig”后配置增加芯片支持(也可以直接编译,然后根据提示输入Y就行)

  Device Drivers  --->
  	<M> Industrial I/O support  --->
  		Inertial measurement units  --->
  		<M>   STMicroelectronics LSM6DSM/LSM6DSL sensor  --->

8,修改取时间调用接口

【android12-linux-5.1】【ST芯片】驱动移植后编译不通过__花花的博客-CSDN博客

9,增加iio驱动名称定义

【android12-linux-5.1】【ST芯片】驱动移植后文件名乱码-CSDN博客

10,编译烧录后查看设备情况

1)“adb shell” 指令进入设备

2)“cd /sys/bus/iio/devices”指令进入iio设备路径并用“ls -l”指令查看设备列表

3)“cat */name”查看设备名称,这个驱动注册了15个设备(iio序号不同系统和配置可能会有区别,请根据自己的情况分析使用)。

设备情况列表总结如下

numdevicedevice namesensor nametype传感器名称描述
1iio:device1lsm6dsr_gyroLSM6DSR Gyroscope SensorSENSOR_TYPE_GYROSCOPE角速度传感器/陀螺仪陀螺仪测量围绕设备的 x、y 和 z 轴的旋转速率(弧度/秒)
2iio:device2lsm6dsr_accelLSM6DSR Accelerometer SensorSENSOR_TYPE_ACCELEROMETER加速度传感器加速度传感器测量施加到设备的加速度,包括重力
3iio:device3lsm6dsr_tempLSM6DSR Temperature SensorSENSOR_TYPE_AMBIENT_TEMPERATURE温度传感器环境空气温度
4iio:device4lsm6dsr_step_cLSM6DSR Step Counter SensorSENSOR_TYPE_STEP_COUNTER计步器传感器提供自已激活传感器后最后一次重启以来用户迈出的步数
5iio:device5lsm6dsr_step_dLSM6DSR Step Detector SensorSENSOR_TYPE_STEP_DETECTOR步行检测传感器每次用户迈步时,步测器传感器都会触发事件
6iio:device6lsm6dsr_sign_motionLSM6DSR Significant Motion SensorSENSOR_TYPE_SIGNIFICANT_MOTION特殊动作触发传感器每次检测到有效运动时,有效运动传感器都会触发事件,然后将其禁用
7iio:device7lsm6dsr_glanceLSM6DSR Glance GestureSENSOR_TYPE_GLANCE_GESTURE掠过手势传感器支持短暂打开屏幕,以便用户根据特定动作浏览屏幕上的内容
8iio:device8lsm6dsr_motionLSM6DSR Motion GestureSENSOR_TYPE_MOTION_DETECT运动检测传感器如果设备处于运动状态至少5秒,并且最大延迟为5秒,则产生事件
9iio:device9lsm6dsr_no_motionLSM6DSR No-Motion GestureSENSOR_TYPE_STATIONARY_DETECT静止检测器如果设备静止至少5秒,并且最大延迟时间为5秒,则产生事件
10iio:device10lsm6dsr_wkLSM6DSR WakeUp GestureSENSOR_TYPE_WAKE_GESTURE唤醒手势传感器支持根据设备特定的动作唤醒设备
11iio:device11lsm6dsr_pickupLSM6DSR PickUp GestureSENSOR_TYPE_PICK_UP_GESTURE拾取手势传感器拾起设备时触发,无论面前是什么(桌子、口袋、手提袋)
12iio:device12lsm6dsr_dev_orientationLSM6DSR Device Orientation SensorSENSOR_TYPE_DEVICE_ORIENTATION设备方向传感器测量设备的旋转方向
13iio:device13lsm6dsr_wristLSM6DSR Wrist Tilt GestureSENSOR_TYPE_WRIST_TILT_GESTURE手腕倾斜手势传感器描述手腕倾斜手势传感器的常数
14iio:device14lsm6dsr_tiltLSM6DSR Tilt SensorSENSOR_TYPE_TILT_DETECTOR倾斜检测传感器每次检测到倾斜事件后均生成事件

4)设备数据读取,以最简单的温度数据读取为例。

1>“cd iio:device3”进入温度传感器路径,“ls”指令查看属性文件:

2>可以通过读取“in_temp_raw”来查看温度传感器原始数据,“cat in_temp_raw”指令查看温度数据:

提示:该驱动于2022年就停止维护了,最新维护源码路径:https://github.com/STMicroelectronics/st-mems-android-linux-drivers-iio。开始移植的时候完全没头绪,只顾着检测是否能用,没注意维护情况问题。但是该驱动亲测能用,HAL移植请看下篇。

另,源码包上传资源被拒,提示侵权,需要的可以评论私信我获取。

新人入行,经验分享,如有所误,欢迎指出~

版权归属:深圳市琪智科技有限公司-花花

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值