Porting目标平台:
MT8735_L,MT8173_M,MT8783_N
这里总结一下移植过程中遇到的一些坑
1. 由于 IOCTL 时传递参数类型错误导致的初始化失败
原因:由于 Hal 层中定义的 IOCTL 参数使用了long类型,但是kernel中定义的是unsigned int,hal 的指令在 kernel 中进行强转时会发生 errno = 0x16 的报错。
(6.0和7.0移植的过程中都有发现这个错误)
NXP在github上面的源码地址:点击这里跳转
kernel和配置文件请务必让采购找供应商提供!!
github上面的kernel源码并没有对特定平台做适配,部分功能可能需要微调,这个就看驱动工程师的实力了,跟Framework关系不大所以没有太多接触到。
conf配置文件(下图中两个)一般直接让供应商提供项目中实际使用的芯片对应的配置文件即可,不需要做改动(如果需要调整log打印level等可以对照里面的注释来修改),这两个文件放在 system/etc/ 下
Log分析过程如下(以8783_N平台的log来分析):
如何从 log 打印信息中过滤查找自己需要的信息:
为了能够方便查找log信息,对问题进行定位,请务必记住一点,系统 log 日志请不要使用AS或者Eclipse来抓取!(IDE实时抓取的log缓冲区不足够支撑系统级log分析)
这是使用MTKLogger抓取出来的mtklog(截图中展示的是其中的mobilelog),我们需要关注的是图中圈注的两份log,加起来大约2M左右,不算太多。
我这里遇到的现象是:
开机之后进入设置,UI上的显示是enabling(switch开关切换到开,但是选项属于disable状态),判断应该是开机初始化的时候出现的问题,所以我们从main_log.boot开始查。
Log文件大概有一万行左右,但是并不是所有信息都是我们需要的,我们先通过字符串过滤的方式过滤一遍(NXP的log信息还算比较规范的,直接按照nxp作为关键字过滤即可),文本工具使用notepad++或者UltraEdit均可:
Search "Nxp" (109 hits in 1 file)
e:\Users\linqihan\Desktop\nfc\ng\mobilelog\APLog_2010_0101_000256\main_log.boot (109 hits)
Line 8640: 01-01 00:02:54.029246 1736 1736 D NfcAdaptation: bool CNfcConfig::readConfig(const char *, bool) Opened optional config /etc/libnfc-nxp.conf
Line 8642: 01-01 00:02:54.034890 1736 1736 D NfcAdaptation: bool CNfcConfig::readConfig(const char *, bool) Cannot open config file /data/nfc/libnfc-nxpTransit.conf
Line 8650: 01-01 00:02:54.037072 1736 1736 D : bool CNxpNfcConfig::readConfig(const char *, bool) Opened base config /etc/libnfc-nxp.conf
Line 8650: 01-01 00:02:54.037072 1736 1736 D : bool CNxpNfcConfig::readConfig(const char *, bool) Ope