操作系统实验(6:字符显示的控制)

    xiaoxiao2023-10-06  172

    实验目的

    加深对操作系统设备管理基本原理的认识,实践设备端口、键盘中断、扫描码、显存等概念;通过实践掌握Linux对键盘终端和显示器终端的处理过程;能修改Linux 0.11的终端设备处理代码,控制键盘处理和字符显示。

    实验内容

    本实验的基本内容就是修改Linux 0.11的终端设备处理代码,掌握如何能对键盘处理和字符显示进行适当的控制,主要包括如下三个基本任务:

    创建一个显示状态DisplayState,通过键盘的某个按键来修改这个状态信息,本实验假定用F12来控制该状态,即如果DisplayState=0,则按键F12会将其改变为1;而如果DisplayState=1,则按键F12会将其改变为0。根据显示状态DisplayState决定了字符如何显示,此处用0或1的DisplayState来控制字符的回显,即如果DisplayState=0,字符正常回显;而如果DisplayState=1,任何字符都用*回显。在此基础上再用DisplayState控制非回显到屏幕(通常就是printf,printf再调用write(1)输出到屏幕上的)上字符。

    实验步骤

    实验步骤参考博客https://blog.csdn.net/m0_38099380/article/details/89221596 (侵删)

    1. 编写press_f12_handle函数

    进入linux-0.11/kernel/chr_drv目录,打开tty_io.c,添加如下代码:

    int switch_show_char_flag = 0; void press_f12_handle(void) { if (switch_show_char_flag == 0) { switch_show_char_flag = 1; } else if (switch_show_char_flag == 1) { switch_show_char_flag = 0; } }

    2. 修改tty_table

    打开keyboard.S,修改代码如下:

    .long press_f12_handle,none,none,none

    3. 修改con_write

    打开console.c,在con_write函数中添加如下代码:

    if (switch_show_char_flag == 1) { c = '*'; }

    4. 修改tty.h

    进入include/linux目录,打开tty.h,添加如下代码:

    extern int switch_show_char_flag; void press_f12_handle(void);

    5. 编译linux,运行bochs,试验按下法f12,得到结果如图:

    最新回复(0)