天天看点

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

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

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

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

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

第三章 sensor厂家提供的代码

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

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

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

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

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

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

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

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

编译工具: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调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

4.2 打开Embitz软件,点击project->Build Options ->选择 Pre/post build steps 中的Post build steps,将 disable 置为 always

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

4.3 配置编译工具

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

配置内容格式为: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

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

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调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

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调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

device/sprd/sharkl5路径下:

紫光展锐驱动之sensorhub调试第一章 平台及硬件信息简介第二章 紫光展锐的移植文档第三章 sensor厂家提供的代码第四章 动态驱动的编译工具及配置第五章 动态驱动编译及二进制bin文件第六章 opcode驱动代码第七章 代码提交记录

继续阅读