3

我正在尝试编写一个内核模块,它在一天中的某些时间禁用输入。我发现了如何获取时间(如何在 linux 内核空间中获取当前时间(一天中的时间))以及如何安排函数。我似乎无法弄清楚如何禁用输入。我认为内核必须在某个地方执行此操作,但是在阅读了 API 之后,我仍然没有进一步前进。我想我应该直接访问驱动程序并将它们关闭或其他东西,但这似乎有点不通用。这甚至可能吗?

谢谢你的时间。

4

2 回答 2

2

我不确定,但是如果您在用户空间中,切换到未使用的虚拟控制台就足够了,然后将键盘置于原始模式。这将阻止通常会切换回另一个虚拟控制台的组合键。这不会禁用鼠标,但如果鼠标不是当前的 VT,X 应该忽略鼠标(只要确保 gpm 没有运行)。

如果启用,您还必须禁用 magic-sysrq 组合键,因为有一个 sysrq 键可以使键盘脱离原始模式,否则可以解决这个问题。


编辑:如果您在正常的任务上下文中,应该可以从内核空间完成所有这些操作。我期望一个内核线程会做。

您可以从内核打开文件和设备,但不建议这样做。具有包含 /dev 命名空间的任务(我不确定内核任务是否这样做)。您可以调用 filp_open(我认为)并获取一个文件 *,然后您可以在其 file_operations (f_op) 上调用适当的方法。这应该包括执行上述操作所需的 ioctl。

可能有一种方法可以直接打开设备,而不是通过 filp_open。

简而言之,应该是可以的。从内核空间做这是一件非常狡猾的事情。

于 2011-03-02T22:16:12.100 回答
0

我能想到的一种方法是禁用关键字和鼠标的 IRQ。 disable_irqenable_irq可以用来做到这一点。

这是 x86 的 IRQ 编号。如果需要,您可能必须查阅其他表以获取其他平台(如 SPARC、IA-64)的 IRQ。

于 2011-03-03T16:55:22.383 回答