如何检测按键何时被按下?

问题描述 投票:0回答:1

我正在使用 elf-gcc (x86_64),并且我已经有一个可以在屏幕上写入一些文本的工作操作系统。由于我想创建执行简单操作的命令,因此我需要检测用户何时按下某个键,以便执行相应的命令。如何访问键盘并检测何时按下某个键?

操作系统处于64位模式。

c assembly operating-system x86-64 osdev
1个回答
1
投票

如果您正处于编写操作系统的阶段,那么您应该知道以下问题的答案:

  • 您有什么类型的硬件键盘?
  • 您确实有键盘还是只有按钮组?如果是的话,
  • 您是否计划为其制作一个驱动程序,以便可以将多个不同或相似的键盘以面向对象的方式视为键盘?

如果您还没有键盘驱动程序,那么您需要操作硬件本身,这是硬件特定的问题,而不是操作系统特定的问题。操作系统的任务是为硬件设备编写驱动程序。您需要了解一些有关如何构建和访问硬件键盘的背景知识。您的设备硬件手册将对此进行评估。

C 语言本身并没有解决这一点,因为它通常由底层软件或库来解决。 C 中所有与 io 相关的主题都留给库实现,因此,如果没有它,您应该直接访问硬件来解决它。我在评论中读到了有关是否可以访问 BIOS 的内容。这只是一个细节,在某些架构中可用,但在其他架构中则不可用。最常见的事情是您需要从头开始编写一个驱动程序。

另一方面,如果您打算编写驱动程序,它是操作系统的驱动程序,还是只是引导加载程序的驱动程序。通常这些是不同的,因为引导加载程序只涉及引导机器,并且在引导加载程序中访问各种键盘是一种资源浪费。此外,引导引导程序还没有准备好机器在 64 位保护模式下运行是很常见的(但出于同样的原因,您尝试尽快切换到它是一件好事,在最终操作中重用您的引导驱动程序)系统)你必须做出所有这些决定,否则你将结束重新启动并再次重新启动,基于你在实现某些实现后发现的锁定。

最后一个提示。在尝试之前先计划好你的任务。

© www.soinside.com 2019 - 2024. All rights reserved.