在A33上移植ICM20608D,历时3.5天。回顾该Sneosr移植、调试历程,没有产生过多障碍及意外。能够说,一切按设想中的样子演进。16日下午完成了linux driver及android hal的移植,确认sensor工做正常,interrupt可产生,driver可做出响应。17日及18日,熟悉代码及调试。19日供应商现场支持,收官。linux
Android sensors的移植方法,能够归纳为如下步骤:android
若上述5步作到位但未获得预期结果,迅速联系供应商作现场支持。shell
第1点没必要多说,读懂原理图是做为嵌入式软件工程师的基本素质。函数
第2点是移植driver,通常来讲,供应商会给到某平台的适用source code,不必定是全志平台,但必须是可用的,完整的source code。移植driver要作的工做通常是:工具
将驱动代码正确移植到平台,成功编译后。须要检查软件代码在时序上是否知足sensor工做所需的时序,sensor的中断是否合理地产生,driver的中断处理函数是否合理地进行响应。spa
第3点至关重要,在移植HAL以前,必须想办法尝试脱离HAL层的影响对底层进行debug确认。仔细阅读ICM20608D驱动代码后,不难发现,驱动里面会产生若干节点,其中就包括读取sensor registers当前值的节点及其余重要的节点。另外,在HAL代码中,也存在好几个调试用的工具源码,好比selftest、mpu_iio等。能够将它们编译出现,在shell中直接执行。debug
第4点是移植HAL层代码,将HAL代码存放到android/hardware下,全志平台加载sensor hal是根据sensors.<platform>.so的规划进行加载,所以,应优先将LOCAL_MODULE的值修改成sensors.$(TARGET_BOARD_PLATFORM)。因为HAL层代码不一样产家规范不同,很难抽象出能适用于全部sensor hal移植的方法论。可是,只要代码自己是完整的,经过阅读代码,编译,debug,成功移植只是时间问题。调试
HAL代码向上注册硬件设备使用是公共的规范和接口,通常来讲,不须要太怀疑SensorService的正确性。code
若是说经历了上面的过程,sensor仍然没有办法在系统中正常使用起来,就应该坚决果断地约供应商技术人员过来现场支持。缘由有:orm
总结: