0

如何访问 android 内核空间中的加速度计并使用它的数据?我正在做一个项目,我需要在手机移动(在汽车中)时控制手机的一些功能,并且我想使用加速度计来帮助确定手机是否加速。这一切都必须在内核空间中完成。我在 android 开发者页面上找到了如何使用加速度计和 SensorEvent 来检测用户级应用程序中的变化。但是如何在内核级别做类似的事情呢?我应该进行系统调用吗?

通过环顾四周和搜索,我认为这些文件位于 /goldfish/drivers/hwmon/ 中,但我不太确定。

4

1 回答 1

2

加速度计输入,在前级,取自/dev/input/event设备。您可以使用工具箱的 来验证这一点getevent(),它会在您倾斜手机时实时显示输入事件(如果有记忆,您需要/dev/input/event3但您可以自己轻松检查)。

加速度计的驱动程序会导出这个字符设备,然后 Android 运行时(在libhardware的帮助下)随后会转换为熟悉的 SensorEvent。没有用于此的内核 API。您最简单的解决方案是直接与/dev/event交互。这可以通过两种方式完成:

  1. 用户模式守护进程监听/dev/event,并与您的内核线程进行通信(例如,通过阻塞内核模块导出的另一个字符设备、反向系统调用等)

  2. 不推荐但可以工作 - 从内核模式打开/dev/input/event(使用直接调用sys_open然后调用sys_read)。这将需要“解决”内核保护(最值得注意KERNEL_DS的是设置)。

于 2013-04-25T20:59:50.193 回答