Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178942
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 618
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-15 09:12
文章分类
文章存档

2014年(17)

2013年(10)

我的朋友

分类: Android平台

2014-05-30 19:14:48

今天测试部门报个bug,说是打电话的时候屏幕不黑屏,L/P sensor不工作了,我开始了debug之旅:

第一步:使用Android OS 提供的getevent工具去查找L/P sensor 注册到哪个input设备,就此可以找到改设备挂载到I2C哪条总线,以及提供的相应接口。

第二步:如果提供的接口有enable之类的,可以echo 1 > 该节点,尝试手动打开sensor设备,然后观察getevent 是否数据上报?

第三步:如果还没有数据上来,需要在驱动代码中查看,是中断报点方式还是wakequeue报点方式,检查驱动的调用逻辑。

第四步:观察驱动是否提供debug接口,可以打开debug开关或者自己在报点函数中添加log,自己也添加dump寄存器的接口函数,对于时刻观察寄存器状态很有帮助。

第五部:如果发现报点的值不变,请dump寄存器的值与文档比较,查看。

这是我的操作步骤,但是可惜的是我并没有找到问题,dump出来的寄存器值都和文档说明比较了,没有错误,我就是很费解了,这个时候Ice给我提出了新的思路,既然程序没有看出来问题,就从硬件着手看看:

第一步:打开设备,露出设备芯片,看看getevent是否有值。

第二步:使用一台手机的照相功能对这L/P sensor的发射器照下,如果设备工作会有红点一闪一闪,如果没有闪可能就是没有工作。

第三步:既然写到第三步,这个 L/P sensor是工作的了,这个时候Ice提供新的方法,就是L/P sensor 有发射器和接收器,一般设备都会有一个器件去隔离开发射器与接收器,避免射线从发射器出来直接射入到接收器,我用一个铁板子分隔开后,发现getevent有值上来,而在driver中添加的log报点值也有变化。

从这次debug,总结在解决sensor这些外设的时候,当你从程序看不出来任何破绽的时候,可以考虑从硬件考虑,也许这就是问题关键!


阅读(4869) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~