1. 一般高通代码驱动适合自己的HAL层框架,驱动也要适应其框架。最主要的是sys注册的文件节点,HAL层通过统一的方式去读取文件节点,这样就具备通用性,后面直接添加驱动就好了。
首先要了解一下sensor的框架,从最底层到应用层中间会经过:kernel -> hal -> framework -> app,所以调试驱动要一层一层的取保数据正常,那就基本上没什么问题了。
2.调试需要注意的几点
2.1.保证驱动数据正常,上报的数据正常。
2.2.注册的设备名字和hal层sensor读取的文件节点一致。sensor注册的文件节点名字用getevent可以查看。
用 adb shell getevent 得到如下显示:
add device 4: /dev/input/event3
name: "stk8313"
add device 5: /dev/input/event0
name: "Goodix-TS"
could not get driver version for /dev/input/mice, Not a typewriter
add device 6: /dev/input/event2
name: "proximity"
add device 7: /dev/input/event1
name: "light"
从上面可以看出,
add device 4 G-sensor
add device 5 TP
add device 6 P-sensor
add device 7 L-sensor
2.3.用getevent /dev/input/event1 查看是否有数据,手动使能,一般节点在sys/class/input/input*/enable 若得不到数据,那就是驱动层有问题,因为getevent 读取数据是kernel层的数据,还没到hal层。
2.4.应用层若读不到数据,那就是HAL层的问题。
3.hal层调试
hal层主要根据各种sensor去读取数据,多添加log打印,主要看enable和readeven事件,是否调用,若果没调到enable,查看logcat,应该会出现E/SensorManager( 2276): sensor or listener is null 这样的错误,就表示HAL层没有读到此设备,需要修改。
注意:若果驱动层的数据正常,getevent没数据,那就要检查驱动上报数据是否有变化,若没有变化,getevent是看不到数据的。
。所以要检查上报的数据是否成功,上报的数据逻辑有无问题。