MTK驱动调试经验

发布时间 : 星期三 文章MTK驱动调试经验更新完毕开始阅读

MTK 6735M项目F100驱动调试报告

一 配置EMMC

按照硬件的选择配置新的flash,因为第一版都是按照MTK认证列表使用,所有一般如果不行有两个可能: 1 配置不正确,需要确定alps\\bootable\\bootloader\\preloader\\tools\\emigen\\MT6735下的flash配置文件的时序是否正确,修改配置文件

alps\\bootable\\bootloader\\preloader\\custom\\f100\\inc的文件custom_MemoryDevice.h 2 需要硬件配合查看是否EMMC元器件未能贴好,造成不能烧录

二 调试LCD

调试步骤:

1 确定LCD的连接方式; 1 确定dws配置正确; 2 确定电源是否正确;

3 确定配置参数的读写方式类型,包括:

LCM_setting_table模式读写: struct LCM_setting_table { unsigned cmd;

unsigned char count;

unsigned char para_list[64]; };

LCM_setting_table_V3模式读写: typedef struct {

unsigned char id; unsigned char cmd; unsigned char count;

unsigned char para_list[128]; } LCM_setting_table_V3;

4 确定开关机的时序和读取初始化参数的方法; 5 确定DSI的配置是否正确,此配置函数为

static void lcm_get_params(LCM_PARAMS *params) 6 如果做屏兼容,需要配置 .compare_id = lcm_compare_id, 此项为读取LCD ID进行判断;

调试碰到问题:

1 参数的读写方式不正确,造成屏花屏,换一种读写方式正确;

2 suspend时未能写正确,在待机时出现kernel crash,需要特别注意; 3 未能配置lcm_compare_id,造成做屏兼容时未能自动识别; 4 TE的配置需要特别注意,此引脚MTK的补丁默认TE中断不开;

三 调试TP

TP连接的接口为I2C模式 调试步骤:

1 确定dws配置正确; 2 确定中断,电源正确; 3 确定I2C读写正确;

4 确定报点没有断点,TP没有坏点; 5 配置虚拟按键时注意键值范围;

调试碰到问题:

调试的TP为GT9157,出现很奇怪的问题,就是I2C的初始化读写没有报错,但是读写数据就是不成功,最后查找到问题为:

I2C加了下拉的防静电电阻,造成实际上的下拉,但是根据规格书配置要求,必须要做上拉处理,否则容易出现读写不正常,所有此处造成I2C没有正常工作;

三 调试sensor system

调试步骤:

一 accelerometer

1 确定dws配置正确; 2 确定中断,电源正确; 3 确定I2C读写正确; 4 确定好旋转的方向;

调试碰到的问题:

调试accelerometer出现没有报点,然后换了驱动就可以了,判断为原驱动内的读取x.y.z的方式不对;

二 alsps

1 确定dws配置正确; 2 确定中断,电源正确; 3 确定I2C读写正确; 4 确定好旋转的方向;

调试碰到的问题:

调试光感出现距离不对的问题,调试距离判断参数,成功;

四 调试camera

调试步骤:

1 确定主副摄像头的型号,在配置文件配置好,添加好驱动代码;

(注意:需要配置alps\\device\\huaying\\f100里的ProjectConfig.mk,此文件为主要配置文件,配置alps\\kernel-3.10\\arch\\arm64\\configs里的f100_debug_defconfig) 2 确定dws配置正确;

3 确定摄像头的开关机的时序,按照摄像头的规格书来配置; 4 根据硬件配置好MCLK;

5 确定好是否支持AF,闪光灯功能;

五 调试Audio

调试步骤:

1 按照驱动开发资料进行驱动配置,确定好是内置功放还是外置功放;

2 配置好音频功放的输入时序,按照喇叭的功率进行配置,外置功放配置路径为 alps\\kernel-3.10\\sound\\soc\\mediatek\\mt_soc_audio_v3\\mt_soc_codec_63xx.c 3 按照硬件配置mic为单/双;

六 调试HEADSET

调试步骤:

按照驱动开发资料配置即可。

调试碰到的问题:

配置dws时需要注意配置好中断;

七 调试MSDC

调试步骤:

1 确定硬件是否支持热插拔,进行配置dws; 2 确定硬件的电源是否正确;

调试碰到问题:

调试时一直不读卡,刚开始的时候因为不支持热插拔,怀疑配置不正确,但按照配置文档查找后发现并没有错误,然后开始确定T卡的电源是否正确,强行打开后,也没有识别到T卡,最后让硬件帮忙查找硬件问题,发现是卡座本身和板子的地短路,所以识别不到T卡。

八 调试Battery

调试步骤:

1 确定dws配置正确; 2 确定电源正确; 3 确定I2C读写正确;

4 确定OTG功能的配置正确; 调试碰到的问题:

在初始调试的时候,就发现不插USB不能开机,一直报低电。初始认为是没有配置好,但是在抓取串口信息时发现硬件工作正常,后查看硬件发现电池检测的一个配置电阻没有贴,造成不能得到正确的fuel gauge值。后又发现OTG功能不正常,后通过硬件确定引脚不正确造成,此中断脚应该配置为IDDIG,但在硬件上只是配置为ID脚。

九 调试connectivity

调试步骤:

1 确定dws配置正确; 2 确定电源正确; 3 确定I2C读写正确; 调试碰到的问题:

一般来说,FM,BT,GPS不需要调试,只需要按照硬件配置好相关的引脚就可以,所以调试的时候只测试了芯片工作是否正常,但调试这几个元器件时,需要确认的并不只是芯片工作是否正常,还需要测试性能,确定外围天线那块是否工作正常,测试性能时发现FM不能收到台,只有杂音,BT的连接距离短,GPS只是搜到两颗星,并未能定位。经过硬件的配置调试发现FM,BT,GPS的匹配没有调试好,造成这种结果。

调试碰到的一些需要注意的问题:

1 摄像头配置时序需要按照datasheet的需求配置;

2 调试一个灯控制程序,hal层不能调用底层的dev设备,花了大量的时间去确定那个地方引起,最后发现是android 5.1的权限管理比4.4的严格,处理如下: [Description]

android KK 4.4 版本后,Google 默认启用了SELinux, 并会把SELinux 审查异常打印在kernel log 或者 android log(L 版本)中,对应的关键字是: \ denied\或者\如一行LOG:

<5>[ 17.285600].(0)[503:idmap]type=1400 audit(1356999072.320:202): avc: denied { create } for pid=503 comm=\name=\scontext=u:r:zygote:s0 tcontext=u:object_r:resource_cache_data_file:s0 tclass=file

即表明idmap 这个process, 使用zygote 的source context, 访问/data/resource_cache 目录,并创建文件时,被SELinux 拒绝访问。

[Keyword]

android, SELinux, avc: denied, audit

[Solution]

KK 版本, Google 只有限制的启用SELinux, 即只有针对netd, installd, zygote, vold 以及它们直接fork 出的child process 使用enforcing mode, 但不包括zygote fork的普通app.

L 版本, Google 全面开启SELinux, 几乎所有的process 都使enforcing mode, 影响面非常广.

联系合同范文客服:xxxxx#qq.com(#替换为@)