“操作系统实验”实验报告

终端设备的控制

实验名称:终端设备的控制

  • 实验日期: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设备管理有了一些认识,进一步了解了键到了盘中断、扫描码等概念。

最新评论
暂无评论~