在未贴brcm4330芯片的情况下,invensense的sensor失效问题分析

在未贴brcm4330芯片的情况下,invensense的sensor失效问题分析
结论:
启动顺序问题。
sensor的上层应用会在启动过程中试图打开invensense的sys文件接口。
invensense驱动目前以ko方式通过init.rc进行加载,并在加载完成后在init.rc文件中通过chmod和chown设置其对应的文件节点属性。
如果上层在尝试打开invensense的sys文件接口时,上述的这些invensense驱动创建的sys文件节点的属性还没有设置成功,则会导致上层调用出错,表现为:
E/Sensors (  341): HAL:Open of /sys/bus/iio/devices/iio:device0/power_state failed with 'Permission denied' (13)
E/Sensors (  341): HAL:enable_sysfs_sensor - write 1 returned -1 (Invalid argument / 22)
E/Sensors (  341): HAL:Open of /sys/bus/iio/devices/iio:device0/power_state failed with 'Permission denied' (13)
E/Sensors (  341): HAL:enable_sysfs_sensor - write 1 returned -1 (Invalid argument / 22)
这些权限错误会导致上层应用无法使用。但是,这并不会影响invensense驱动。invensense的驱动依然是正常工作的。只是上层曾经打开对应接口失败了,便不能再使用驱动的功能了。


根本原因:
在init.rc中对应的ko的加载和对应的文件节点的属性修改动作并没有放在一起:


==================== cut here =============================
on boot
    insmod /system/lib/modules/inv-mpu-iio.ko
    insmod /system/lib/modules/bcmdhd.ko
    chown system system /dev/iio:device0inv-mpu-iio.ko
    chown system system /sys/bus/iio/devices/trigger0/name
    chown system system /sys/bus/iio/devices/iio:device0/accl_bias
    chown system system /sys/bus/iio/devices/iio:device0/accl_enable
    chown system system /sys/bus/iio/devices/iio:device0/accl_matrix
    chown system system /sys/bus/iio/devices/iio:device0/buffer/length
==================== cut here =============================


注意到在inv-mpu-iio.ko加载动作和invensense的对应文件节点属性设置动作之间插入了一个bcmdhd.ko,这是brcm4330的驱动,这个驱动在加载失败的情况下会触发一个12s的等待。
而init.rc文件的执行是顺序的。因此,在未贴brcm芯片的情况,bcmdhd.ko会加载失败,并导致12s延时。
即:在inv-mpu-iio.ko加载后12s,其对应的iio目录下的sys文件节点属性才会被更改。而在这12s期间,上层应用可能已经试图打开这些节点,但因为属性未符合要求,会打开失败。表现为上层sensor对应的功能失效,但是驱动却是OK的。


修改方案:
确保inv-mpu-iio.ko加载动作和其对应的属性修改工作之间不要加入其他可能产生过大延时的操作即可。


另外一個修改方案是將bcmdhd.ko移动到inv-mpu-iio.ko之前,为了确认延时会导致问题,在bcmdhd.ko中增加延时到40秒,本以为这种情况下上层肯定会在打开sensor的节点时出错,但是却发现上层没有出错,因为这40秒的延时阻塞了上层应用的打开,直到这40秒延时结束,上层才开始执行。这说明init.rc中的内容必须全部执行完毕了,上层才会开始。
这样的话,上面的那个12s的分析也说不过去啊。。。。。

你可能感兴趣的:(在未贴brcm4330芯片的情况下,invensense的sensor失效问题分析)