一、TYY任务本质就是增加了一个进程,并且运行在ring1,且优先级调高了。并且设置了键盘中断用于接收键盘输入,并将扫描码存放在缓冲区。task_tyy也就是新加入的进程,循环执行读写缓冲区。
现在TYY任务和用户进程依次执行(时钟中断),并且TYY任务的优先级高。当遇到系统调用,切换到ring0,执行到内核态不能被时钟中断打断,执行后返回刚才的进程。
每遇到有键盘输入,和上面的过程一样,往键盘缓冲区输入扫描码。
二、tty.c,keyboard.c,console.c的关系
三、printf系统调用
细节请参考http://blog.csdn.net/jltxgcy/article/details/8766537
四、键盘Make Code和Break Code
Make Code是键盘按下时产生的码,Break Code是键盘放开时产生的码,Break Code是Make Code与0x80相或后的结果。键盘每个按键对应的Make Code和Break Code如下图
我们用的时候参考keymap.h,其中的一行为
/* 0x1D - l. Ctrl*/ CTRL_L,CTRL_L, CTRL_R
第一列为Make Code,第二列为!SHIFT对应的按键值,第三列为SHIFT对应的按键值,第四列为Make Code前面带E0的按键值,观察上图R_Ctrl的Make Code为E0,1D,找到第二列和第三列用代码实现。