操作系統實驗(6:字符顯示的控制)

實驗目的

  1. 加深對操作系統設備管理基本原理的認識,實踐設備端口、鍵盤中斷、掃描碼、顯存等概念;
  2. 通過實踐掌握Linux對鍵盤終端和顯示器終端的處理過程;
  3. 能修改Linux 0.11的終端設備處理代碼,控制鍵盤處理和字符顯示。

實驗內容

本實驗的基本內容就是修改Linux 0.11的終端設備處理代碼,掌握如何能對鍵盤處理和字符顯示進行適當的控制,主要包括如下三個基本任務:

  1. 創建一個顯示狀態DisplayState,通過鍵盤的某個按鍵來修改這個狀態信息,本實驗假定用F12來控制該狀態,即如果DisplayState=0,則按鍵F12會將其改變爲1;而如果DisplayState=1,則按鍵F12會將其改變爲0。
  2. 根據顯示狀態DisplayState決定了字符如何顯示,此處用0或1的DisplayState來控制字符的回顯,即如果DisplayState=0,字符正常回顯;而如果DisplayState=1,任何字符都用*回顯。
  3. 在此基礎上再用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,得到結果如圖:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章