|
|
1
15
这个 MIT operating systems class 有很多很好的参考。特别是,看看 Adam Chapweske's resources 关于键盘和鼠标编程。 简而言之,是的,您将使用原始输入/输出端口,这需要在内核模式下运行,或者在EFLAGS寄存器中设置I/O权限位(IOPL)。看见 this page 有关I/O权限的更多详细信息。 |
|
|
2
3
您可以在真实模式和保护模式下以相同的方式使用标准的传统硬件。在这种情况下,您想在I/O端口0x60到0x6f与8042通信,这反过来又会与线路另一端的键盘内的控制器通信。 在谷歌上快速搜索后,我发现了一个有趣的资源 http://heim.ifi.uio.no/~stanisls/helppc/8042.html (8042)和 http://heim.ifi.uio.no/~stanisls/helppc/keyboard_commands.html (用于键盘)。 如果您不习惯它,您可以通过In(读取)和OUT(写入)操作码与I/O端口的组件进行通信,这些操作码接收I/O端口号(16位值)和要读取或写入的值(8、16或32位)。请注意,读取或写入的大小很重要!将16位写入预期为8位的内容(反之亦然)是灾难的根源。习惯这些操作码,因为您将经常使用它们(这是与某些外围设备(包括几个基本外围设备)通信的唯一方法;其他外围设备使用内存映射I/O(MMIO)或总线主控DMA)。 |
|
3
1
这个 8042 PS/2控制器 看起来是最简单的可能性。 oszur11操作系统教程包含以下工作示例 https://sourceforge.net/p/oszur11/code/ci/master/tree/Chapter_06_Shell/04_Makepp/arch/i386/arch/devices/i8042.c 只是:
在Ubuntu 14.04 AMD64上测试。 我的GitHub镜像(上游不活动): https://github.com/cirosantilli/oszur11-operating-system-examples 在这里不复制它,因为代码太长,如果我设法在一个最小的例子中隔离键盘部分,它就会更新。 |
|
|
Blank · x86程序集上的保护模式键盘访问 17 年前 |