mtk sensor 驱动调试

  MTK Sensor 分为AP和SCP两大部分,AP是主芯片,SCP是协处理器,都可以负责处理sensor数据。所以在MTK在驱动调试时经常会说sensor是挂AP侧还是挂scp侧。 

  在AP侧的sensor的调试不是很复杂,一般的步骤是找器件原厂对应的驱动,描述清楚是MTK的哪颗芯片,内核时什么版本。我之前调试的时kernel-4.19版本,sensor 1.0的,后面都是以sensor 1.0的进行说明。

在拿到器件的驱动后,一般的步骤如下:

  (1)根据原理图编辑对应的dts;

(2)将拿到的代码合入到kernel-4.19/drivers/misc/mediatek/sensors-1.0对应的器件子目录,在新增的子目录中增加Makefile跟Kconfig文件,Kconfig中就配置下当前器件模块名称,Makefile指定编译的文件与文件目标;

(3)在 kernel-4.19/arch/arm64/configs对应的config配置文件enable对应的sensor,例如我调的时light sensor 跟p sensor器件,配置CONFIG_CUSTOM_KERNEL_ALSPS=y,因为只有这个选项配置了,kernel-4.19/drivers/misc/mediatek/sensors-1.0/Makefile才配置对应的模块进行编译;增加步骤一的某块名称如CONFIG_MTK_XXX=y;

(4)编辑device/custom/custom_project/ProjectConfig.mk文件,enable对应的sensor模块,例如我的时L/P sensor挂载在AP侧,那就编辑CUSTOM_KERNEL_ALSPS = yes;

(5)开始编译内核,解决对应的编译问题;

(6)更新boot.img,scp.img文件,抓内核的开机日志,看是否有正常跑到module_init。

 (7)安装应用查看应用层是否能获取到对用的sensor。之前就有遇到过,从日志看都已经跑到probe了,但是应用层sensor list中就是没有获取到。这里需要关注下驱动的probe代码中是否有调用sensorlist_register_deviceinfo进行sensor注册,如果没有sensorlist中是获取不到新增的sensor的。

到这里AP 侧sensor 驱动就算合入了。这个过程中需要关注几个

(1)dts一定要配置对,如果对应的GPIO没有上拉,也是在sensor列表中获取不到sensor的;

(2)在probe中一定要调用sensorlist_register_deviceinfo进行注册sensor;

这里编译整理会是比较耗时,运气好也许一个上午就点亮了,运气不好也许三天了还在里面找原因。

sensor 点亮后,像L/P sensor,g sensor、sar sensor都还需要校准,这个工作量会比前期简单的点亮多的多。另外sar sensor 数据正常上抛后,还需要同系统、同天线联调,在什么场景下进行降功耗,而且要确定sar sensor是否可以稳定触发,之前就遇到过sar sensor灭屏一会儿就不触发了,因为进入待机了,没有进行中断唤醒查了好久,还有就是原厂给的不是final的参数,导致出现各种问题。

SCP(Tinysys)协处理器,负责sensor,audio相关的feature,以及可以扩展客户私有的功能。MTK SCP的系统选用的是FreeRTOS。如果器件是挂在scp侧的,修改的代码会稍微多些,原厂在给这部分的驱动时提供的资料会稍微详细些,我这里以g sensor为例。

(1)在vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/MEMS_Driver/accGyro目录下添加器件原厂提供的驱动文件;

(2)修改vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/project/CustomerProject/ProjectConfig.mk文件,定义支持新增的sensor如:CFG_XXXX_SUPORT = yes;

(3)修改vendor/mediatek/proprietary/tinsys/freertos/source/project/CM4_A/project/platform/feature_config/chre.mk,根据步骤2中的定义控制驱动代码参与编译

(4)修改vendor/mediatek/proprietary/tinsys/freetos/source/project/CM4_A/project/customerporject/inc/overlay_sensor.h,看是什么sensor,例如我添加的是gsensor,则修改

#define OVERLAY_SECTION_ACCGYRO, 添加新的器件

(5)修改vendor/mediatek/proprietary/tinsys/freetos/source/project/CM4_A/project/customerproject/cust/overlay/overlay.c,修改accGyroOverlayRemap,添加新的器件;

(6)修改vendor/mediatek/proprietary/tinsys/freertos/source/project/CM4_A/project/customerproject/cust/accGyro/cust_accGyro.c,根据原理图添加器件的对应的i2c引脚

(7)然后就开始编译,如果编译中提示超出memory,那就需要修改下 vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/project/platform/Setting.ini根据对应的编译错误修改对应的size。

(8)更新scp.img,重启抓scp日志,查看日志是否有正常加载器件。我有遇到过不能加载的,是加载上一个同类型器件,加载失败对应index没有示范,导致加载失败的,这样就需要修改对应的器件加载失败,是否对应index;也有遇到过需要写的i2c数据比较大,在写I2C块数据时失败了,这时候就看看是否需要开启DMC对应的配置时CFG_I2C_CH0_DMA_SUPPORT、CFG_I2C_CH1_DMA_SUPPORT。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值