如何访问 android 内核空间中的加速度计并使用它的数据?我正在做一个项目,我需要在手机移动(在汽车中)时控制手机的一些功能,并且我想使用加速度计来帮助确定手机是否加速。这一切都必须在内核空间中完成。我在 android 开发者页面上找到了如何使用加速度计和 SensorEvent 来检测用户级应用程序中的变化。但是如何在内核级别做类似的事情呢?我应该进行系统调用吗?
通过环顾四周和搜索,我认为这些文件位于 /goldfish/drivers/hwmon/ 中,但我不太确定。
如何访问 android 内核空间中的加速度计并使用它的数据?我正在做一个项目,我需要在手机移动(在汽车中)时控制手机的一些功能,并且我想使用加速度计来帮助确定手机是否加速。这一切都必须在内核空间中完成。我在 android 开发者页面上找到了如何使用加速度计和 SensorEvent 来检测用户级应用程序中的变化。但是如何在内核级别做类似的事情呢?我应该进行系统调用吗?
通过环顾四周和搜索,我认为这些文件位于 /goldfish/drivers/hwmon/ 中,但我不太确定。
加速度计输入,在前级,取自/dev/input/event设备。您可以使用工具箱的 来验证这一点getevent()
,它会在您倾斜手机时实时显示输入事件(如果有记忆,您需要/dev/input/event3但您可以自己轻松检查)。
加速度计的驱动程序会导出这个字符设备,然后 Android 运行时(在libhardware的帮助下)随后会转换为熟悉的 SensorEvent。没有用于此的内核 API。您最简单的解决方案是直接与/dev/event交互。这可以通过两种方式完成:
用户模式守护进程监听/dev/event,并与您的内核线程进行通信(例如,通过阻塞内核模块导出的另一个字符设备、反向系统调用等)
不推荐但可以工作 - 从内核模式打开/dev/input/event(使用直接调用sys_open
然后调用sys_read
)。这将需要“解决”内核保护(最值得注意KERNEL_DS
的是设置)。