android sensor 驱动,关于Android的Sensor驱动,不支持内核模块模式的驱动

今天我把我开发的内核传感器驱动用模块模式进行了编译,但是当我在使用测试APL时却无法启动传感器来获取数据。当时还没有认识到问题出在哪里,所以进行了很多无谓调查。

我先是想到了,在Android启动过程中要给内核驱动加载生成的设备属性文件设置权限,但是设备属性文件是在内核驱动结果体的probe函数中进行生成的,所以在驱动模块没有加载是给内核驱动加载生成的设备属性文件设置权限是无效的。

于是我又在手动加载驱动后,手动进行设备属性文件设置权限,然而Android HAL层还是无法获得底层驱动的数据,这时才意识到问题的严重性。

我通过 “cat /proc/kmsg” 命令发现底层驱动是能够取到传感器数据,至于传感器的Android HAL代码是在libsensor目录下,之前曾大概阅读过这段代码,那么问题肯定是出在这里了,并且肯定是出在Input子系统中。在Android传感器驱动的整个架构中,底层Linux驱动与Android HAL层是通过Input子系统进行数据传递的。

重新察看Android HAL层代码,发现我的Sensor实现的类XXXXXSensor的构造函数里进行了对Input子系统的设备名进行了赋值。XXXXXSensor 类是继承于 SensorBase 类,SensorBase 类的构造函数里根据Input子系统的设备名打开相应的Input子系统的设备文件,生成文件标示符。在sensors.cpp 里, 在构造sensor列表时会生成各种sensor的对象,此时就会生成文件标示符。但kernel的驱动以模块的模式编译并没有及时加载时,生成的Input子系统的文件标示符就是空的,从而导致了Android HAL层还是无法获得底层驱动的数据。

根据以上情况,我认为Android HAL层的代码有多可以改进的空间,设计上可以更精妙一些,相信不久之后Android会变得更好用。希望这篇博文能给大家一点帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值