实验日期:2021.7.5
班级:物联网193
姓名:杨佳佳
学号:1930110723
1、加深对操作系统设备管理基本原理的认识,实践键盘中断、扫描码等概念;
2、通过实践掌握 Linux 0.11 对键盘终端和显示器终端的处理过程。
蓝桥实验楼
修改 Linux 0.11 的终端设备处理代码,对键盘输入和字符显示进行非常规的控制。
1.环境准备
2.修改/kernel/chr_drv/keyboard.S 删除call show_stat。
3.修改kernel/chr_drv/tty_io.c文件,该文件中的copy_to_cooked函数是处理ASCII字符的函数。先在该函数的定义外面增加全局变量如 下,flag即开关标志,f1~f3是等会判断要用到的一些中间变量。修改处代码:
4.修改/include/linux/tty.h文件
5.修改kernel/chr_drv/keyboard.S文件
为了实现按下F12键,文字变为“”的功能,我们修改/kernel/chr_drv/console.c中的con_write()函数,添加if语句,注意添加声明
if(flag == 1){
c = '*';
}
6.所有修改完成后,编译内核
7.在进入系统后,输入ls -l发现字符正常显示,此时再输入F12然后输入ls -l命令,发现所有的字符回显均变成了*号,实验结果符合预期。
修改 Linux 0.11 的终端设备处理代码,对键盘输入和字符显示进行非常规的控制。在初始状态,一切如常。用户按一次 F12 后,把应用程序向终端输出所有字母都替换为“*”。实验成功
在原始代码中,按下 F12,中断响应后,中断服务程序会调用 func?它实现的是什么功能?
答:正常情况下打开模拟器中,按下功能键F12即可显示内核栈中各个进程的状态信息,而当把func中的call show_stat屏蔽掉后,再按下F12就什么也没有了,可见func实现的功能就是调用show_stat函数来显示内核栈中各个进程的状态信息。
在你的实现中,是否把向文件输出的字符也过滤了?如果是,那么怎么能只过滤向终端输出的字符?如果不是,那么怎么能把向文件输出的字符也一并进行过滤?
答:只过滤了向终端输出的字符,向文件输出的字符没有被过滤。因为我们最后修改的是控制向显存输出的con_write()函数,使其当flag=1的时候向显存输出星号。如果要过滤掉向文件输出的字符的话,需要找到对应的那个控制向文件输出的函数并修改。
本次实验修改 Linux 0.11 的终端设备处理代码,对键盘输入和字符显示进行非常规的控制。对linux设备管理有了一些认识,进一步了解了键到了盘中断、扫描码等概念。
学习时间 65分钟
操作时间 30分钟
按键次数 310次
实验次数 4次
报告字数 2047字
是否完成 完成