从A33移植ICM20608D谈Android sensors移植

在A33上移植ICM20608D,历时3.5天。回顾该Sneosr移植、调试历程,没有产生过多障碍及意外。能够说,一切按设想中的样子演进。16日下午完成了linux driver及android hal的移植,确认sensor工做正常,interrupt可产生,driver可做出响应。17日及18日,熟悉代码及调试。19日供应商现场支持,收官。linux

Android sensors的移植方法,能够归纳为如下步骤:android

  1. 确认硬件线路是否正确。
  2. 移植sensor driver。
  3. 脱离HAL层对driver及sensor进行调试,确认sensor工做是否正常,driver是否移植正确。
  4. 移植HAL层,结合HAL及driver调试。
  5. 必要时检查SensorService。

若上述5步作到位但未获得预期结果,迅速联系供应商作现场支持。shell

 

第1点没必要多说,读懂原理图是做为嵌入式软件工程师的基本素质。函数

第2点是移植driver,通常来讲,供应商会给到某平台的适用source code,不必定是全志平台,但必须是可用的,完整的source code。移植driver要作的工做通常是:工具

  • linux core打开driver所须要的外部模块及代码。
  • 根据平台特性加入driver private data。
  • 根据平台特性加入bus识别sensor的代码。
  • 根据平台特性完成中断/唤醒等gpio申请注册使用。

 

将驱动代码正确移植到平台,成功编译后。须要检查软件代码在时序上是否知足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

  • HAL层及如下的代码,各家有各家的规范,应优先找产家支持。
  • 供应商比咱们更熟悉他们的代码。
  • 供应商能够找到Sensor的原厂支持。

 

总结:

  1. 在Android System移植sensor代码,要注意向供应商确认代码的完整性和准确性。通常来讲拿过来能够编译经过并使用的状况比较少,仍是需要工程师耐心地移植调试。一步一步去完成。
  2. Android System不一样于Melis等小型专用系统,全志的linux core也是抓取自公共linux core的sunxi分支,如非全志有意封装,都可视为通用模块。
  3. 在移植工做已经基本作到位,不存在中断申请错误等低级问题的前提下,应大胆申请供应商技术支持,推动调试进度。
相关文章
相关标签/搜索