切换虚拟终端概述linux使用虚拟终端,这些虚拟终端对应/dev/tty1~/dev/tty8,它们由系统初始化时打开
这个过程也在键盘的中断服务程序中完成
用户用ALT+1
8或ALT+箭头来切换终端
每个虚拟终端对应一个tty_struct和一个termios结构
Termios结构存储输入输出及控制模式,一些底层参数
Tty_struct和终端的关系如同task_struct和进程的关系
一个tty被打开,就对应一个tty_stract,对终端的一切处理都围绕tty_strct进行
Termios也被tty_struct的一个指针指向
当然,tty_struct和termios结构相对独立,tty被完全关闭时,tty_struct也就不在存在,而termios依然存在
另:1与虚拟终端相对的是实终端
它对应/dev/tty0或/dev/console二者设备号均为4,0(2.0.35)系统初始时tty的初始化分早期和晚期
早期初始化支持实终端,晚期初始化支持虚拟终端
此时/dev/tty0或/dev/console对应当前终端
2伪终端正如其名,与控制台终端除了最高层的输入输出功能类似外,底层的实现大相径庭
终端切换的流程:want_console=nr;mark_bh(CONSOLE_BH);staticvoidkeyboard_interrupt(intirq,void*dev_id,structpt_regs*regs)handle_scancode(scancode);(*key_handler[type])(keysym&0xff,up_flag);k_handkey_handler[]keyboard
c键盘特殊输入的特殊处理函数数组
statick_handkey_handler[16]={Keyboard_interruptKey_handler(d