[第7天] 键盘 FIFO缓冲和bochs

       今天最大的收获是从qemu转向bochs。不是说qemu不好,而是bochs专业,可以debug,是制作操作系统必备啊!qemu是稳定,是为真正的操作系统准备的。真是相见恨晚,虽然之前听说过bochs,而且我也查过qemu怎么dump memory,为什么就没有发现bochs自带这个功能。。现在亡羊补牢,再也不用手动判断内存中的内容了。。苦水吐不完啊,当时GDT折腾的时候,二分法找内存对应位置的值,想想我真是太机智了,根据HLT之后CPU占有率来判断,那个内存是不是测试的值。

       然后今天主要是讲了获取键盘按键编码和缓冲。然后顺便打开了鼠标的开关。主要内容是FIFO缓冲,这个学过编程就是小意思啊。

Bochs准备:

       由于Arch自带的bochs没有gui,所以还得手动编译。根据osdev,configure一下就可以make了。最后会出个问题,就是libgui.a(gtk_enh_dbg_osdep.o): undefined reference to symbol ‘pthread_create@@GLIBC_2.2.5’。 原因是Makefile某个地方没有加-lpthread。容易解决。编译好了之后先要配置。

  1. 准备硬盘文件。使用bximage命令即可。我创建了1个1024mb的。要记下配置。
  2. bochsrc,这就是启动bochs的配置文件。根据Search Order,选择一个合适的位置。我的配置文件如下:
  3. bximage

  4. 然后就可以启动了。bochs -q。bochs

按键处理:

       感觉这个没有什么要特别注意的地方。就是处理中断后,把数据获取。由于不能让CPU被中断处理打断,一般都要将获取的值缓冲起来,然后内核主程序循环查看缓冲区是否有新数据。这就引发了下面的内容。FIFO。

FIFO:

       作者还是使用最简单的方法实现了FIFO,我也就不管了,跟着照做。具体代码见github

使能鼠标:

       鼠标由于各种原因,需要两步才能启用。具体原理我也不是很明白,我觉得这不是重点,所以就快速通过。下图1E是按下A松开的按键编码,00是获取的鼠标数据。

keyboard and mouse

链接:

  1. bochsrc
  2. bochs hacking guide