紫光展锐驱动之sensorhub调试

第一章 平台及硬件信息简介

本文档基于ums312(T310),Android 11,sensorhub架构,sensor的硬件接口为i2c1(该平台目前不支持spi)

第二章 紫光展锐的移植文档

紫光展锐驱动之sensorhub调试_第1张图片

第三章 sensor厂家提供的代码

代码在共享的资源中有《加速度&陀螺仪+光距感+地磁驱动.zip》。

3.1 地磁(AF6133E)的驱动–需要动态加载

紫光展锐驱动之sensorhub调试_第2张图片

3.2 光距感(STK33562)的驱动–需要动态加载

紫光展锐驱动之sensorhub调试_第3张图片

3.3 加速度&陀螺仪(icm40607)的驱动–不需要动态加载

紫光展锐驱动之sensorhub调试_第4张图片

第四章 动态驱动的编译工具及配置

编译工具:EmBitz_1.11.zip;在共享的资源中有。
使用EmBitz创建和编译工程按文档《33457_Android11.0EmBitz编译Sensorhub动态加载驱动介绍V1.3.pdf》中的操作,下面是添加工程文件:
1、导入编译文件(导入方法按文档中的3.3中的方式操作)
需要导入的文件是:使用Embitz编译的文件,包括地磁驱动overlay_types.h、patch_table_sensor.c、vtc_algo.a、vtc_algo.h、vtc_cali.ld及光距感patch_table_sensor.c,其中光距感patch_table_sensor.c暂时不要导入
2、添加链接脚本,即vtc_cali.ld
3、编译工程生成elf文件,如果没有生成该文件说明以上配置有问题(光距感patch_table_sensor.c先不要加工程)
4、生成elf格式文件后,需要将elf文件转成bin文件,操作如下:
4.1 桌面右键Embitz,打开文件所在位置,找到如下图所示文件
紫光展锐驱动之sensorhub调试_第5张图片
4.2 打开Embitz软件,点击project->Build Options ->选择 Pre/post build steps 中的Post build steps,将 disable 置为 always
紫光展锐驱动之sensorhub调试_第6张图片
4.3 配置编译工具
紫光展锐驱动之sensorhub调试_第7张图片
配置内容格式为:objcopy.exe所在位置 -O binary elf文件所在位置 生成bin文件的位置,如:
C:\Program Files (x86)\EmBitz\1.11\share\em_armgcc\arm-none-eabi\bin\objcopy.exe -O binary E:\ums312_sensorhub\7_5_sh_driver\7_5_sh_driver\bin\Release\7_5_sh_driver.elf E:\ums312_sensorhub\7_5_sh_driver\7_5_sh_driver\bin\Release\7_5_sh_driver.bin
在这里插入图片描述
4.4 再次点击编译就可以发现重新生成elf文件后会同时生成bin文件

第五章 动态驱动编译及二进制bin文件

动态驱动的编译就是为了生成bin文件,但以上工程,编译了地磁的驱动,现在需要将光距感的驱动加入
1、基本原理:光距感和地磁都有patch_table_sensor.c文件,且作用都是实现了overlay_types.h中定义的结构体struct patch_table_sensor中的函数,只要将patch_table_sensor.c文件内容进行整合就行,实现完整的struct patch_table_sensor dynamic_driver_interface结构体
2、注意名称的对应关系,否则无法使用
紫光展锐驱动之sensorhub调试_第8张图片
3、重新编译,就可以生成具有包含了地磁和光距感功能的bin文件

第六章 opcode驱动代码

6.1 配置Sensor型号

路径:device/sprd/(平台名)/(工程名)/module/sensor/md.mk
示例:
以UMS512平台为例,路径为device/sprd/sharkl5Pro/ums512_1h10/module/sensor/md.mk
SENSOR_HUB_ACCELEROMETER := lsm6dsl_ums512
SENSOR_HUB_GYROSCOPE := lsm6dsl
SENSOR_HUB_LIGHT := ltr578als ltr553als
SENSOR_HUB_MAGNETIC := akm09918_ums512
SENSOR_HUB_PROXIMITY := ltr578als
SENSOR_HUB_PRESSURE := null
说明:
赋值的名字需与opcode文件名中的(Sensor型号)一致。
赋值null表示不支持此类型Sensor。
同类型Sensor,如需兼容多个型号,型号以空格隔开,如上面LIGHT所示,同时兼容ltr578als和ltr553als。

6.2 增加对应Sensor参数配置文件(opcode)

路径:vendor/sprd/modules/sensors/libsensorhub/ConfigSensor/(Sensor类型)/
在路径中增加(Sensor类型)_(Sensor型号).cpp文件。
示例:
以ums512_1h10工程添加加速计lsm6dsl为例,增加文件:
vendor/sprd/modules/sensors/libsensorhub/ConfigSensor/accelerometer/accelerometer_lsm6dsl_ums512.cpp
说明:(Sensor型号)需与device路径下的工程配置中的Sensor类型赋值一致。

6.3 注册opcode接口

路径:vendor/sprd/modules/sensors/libsensorhub/ConfigSensor/
示例:
以加速度计lsm6dsl为例。
• 在SensorHubOpCodeExtrator.h中增加以下代码:
extern void SensorHubOpcodeRegisterAccelerometer_lsm6dsl();
• 在SensorHubOpCodeExtrator.cpp中增加以下代码:
#ifdef SENSORHUB_WITH_ACCELEROMETER_lsm6dsl
strcat(accelerometer_list, “accelerometer_lsm6dsl,”);
SensorHubOpcodeRegisterAccelerometer_lsm6dsl();
#endif

6.4 配置Native MMI工模菜单

如使用展锐提供的关机工模和工厂板级自动化测试方案,需要对工模以及bbat需支持的测试项进行配置。如对UMS512平台
ums512_1h10工程进行配置,此工程支持加速计、陀螺仪、地磁、光感、距感。在下述文件中,将支持的配置项置1,不支持的置0。 • device/sprd/sharkl5Pro/ums512_1h10/module/engpc/prodnv/PCBA.conf
• device/sprd/sharkl5Pro/ums512_1h10/module/engpc/prodnv/BBAT.conf
示例:
31 1 ACCSOR
表示支持加速计功能测试
32 1 MAGSOR
表示支持对地磁传感器的功能测试
36 0 PRESSOR
表示不支持对气压计的测试
4.配置Native MMI工模菜单
说明:其他Sensor相关英文简写含义如下,请根据实际情况仿照上述示例进行配置。 • GYRSOR:陀螺仪功能测试
• LSENSOR:光感功能测试
• PXYSOR:距感功能测试
• CALI_ACCOSOR:加速计校准
• CALI_GYRSOR:陀螺仪校准
• CALI_MAGSOR:地磁校准(暂未使用) • CALI_PROSOR:距感校准
• CALI_LSOR:光感校准

6.5 拷贝动态加载bin

如果使用了动态加载驱动,需要在编译阶段将已经编译好的动态加载驱动bin拷贝到$(TARGET_COPY_OUT_VENDOR)/firmware/目录,
并改名为EXEC_CALIBRATE_MAG_IMAGE。
示例:
ums512_1h10工程配置中需要使用akm09918_cali_img_l5p.bin:
device/sprd/sharkl5Pro/ums512_1h10/module/sensor/md.mk

PRODUCT_COPY_FILES +=
vendor/sprd/modules/sensors/libsensorhub/ConfigSensor/calibration/mag_cali/akm09918_cali_img_l5p.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/EXEC_CALIBRATE_MAG_IMAGE

opcode移植请参考《33445_Android11.0SensorHub客制化指导手册V1.2.pdf》

第七章 代码提交记录

vendor/sprd/modules/sensors路径下:
紫光展锐驱动之sensorhub调试_第9张图片
device/sprd/sharkl5路径下:
在这里插入图片描述

你可能感兴趣的:(安卓系统,linux驱动外设,sensorhub)