一、实验内容
修改Linux-0.11的终端设备处理代码,对键盘输入和字符显示进行非常规的控制。
所谓非常规,即:在初始状态,一切如常。用户按一次
F12
后,把应用程序向终端输出所有字母都替换为*
。用户再按一次F12
,又恢复正常。
二、实验过程
0.HIT oslab之设备管理 (显示器 + 键盘)
1.整体思路
①按下F12
,产生键盘中断,而键盘中断的相应函数为keyboard_interrupt
。
②keyboard_interrupt
被调用后,会将键盘扫描码做为下标,调用数组 key_table 保存的与F12
对应的响应函数。
③在响应函数中,设置是否“把应用程序向终端输出所有字母都替换为*
”的标志flag。
2.先要找到与F12
对应的响应函数
(1)根据1.②
可知,得先研读下keyboard_interrupt
(在文件 kernel/chr_drv/keyboard.S
中实现。)
注意:扩展名是大写的 S
(2)找到了与F12
相关的子程序
①在原始代码中,按下 F12,中断响应后,中断服务程序会调用 func?它实现的是什么功能?
答:call show_stat,即调用显示各个任务状态函数,打印出进程状态信息。
②判断是功能键F12吗?如果是则执行③ok_func
(3)增加响应函数,设置是否“把应用程序向终端输出所有字母都替换为*
”的标志。
既然可以
call show_stat
,那么也可以call change_flag
;
change_flag函数的功能就是通过修改flag,然后在回显字符时,根据flag,判断要不要将所有字母替换为*
在kernel/chr_drv/console.c
中实现change_flag函数
(4)李治军老师讲过,con_write函数才是真正写显示器的函数
在写显示器的时候,根据flag来判断是否“把应用程序向终端输出所有字母都替换为*
”。
con_write函数也在
kernel/chr_drv/console.c
中
3.验证
(1)make all
(2)结果截图