實驗目的
- 加深對操作系統設備管理基本原理的認識,實踐設備端口、鍵盤中斷、掃描碼、顯存等概念;
- 通過實踐掌握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);