本實驗的基本內容是修改 linux 0.11 的終端裝置處理**,對鍵盤輸入和字元顯示進行非常規的控制。
在初始狀態,一切如常。使用者按一次 f12 後,把應用程式向終端輸出所有字母都替換為「*」。使用者再按一次 f12,又恢復正常。第三次按 f12,再進行輸出替換。依此類推。
以 ls 命令為例:
正常情況:
# ls
hello.c hello.o hello
第一次按 f12,然後輸入 ls:
# **
*****.* *****.* *****
第二次按 f12,然後輸入 ls:
# ls
hello.c hello.o hello
第三次按 f12,然後輸入 ls:
# **
*****.* *****.* *****
keyboard.s
my_func:
// 自定義my_func
subb $0x3b
,%al
call change_f12
cmpl $4
,%ecx /* check that there is enough room */
jl end_func
xorl %ebx,
%ebx
jmp put_queue
key_table:..
..long my_func,none,none,none /* 58-5b f12 ? ? ? */
// 將f12的處理函式改為my_func
console.c
int f12_flag=0;
// 定義標誌位
void
change_f12()
void
con_write
(struct tty_struct * tty)
if(f12_flag &&
((c >
64&& c <91)
||(c >
96&& c <
123)))
c ='*';
// 修改輸出
__asm__
("movb attr,%%ah\n\t"
"movw %%ax,%1\n\t"::
"a"(c)
,"m"(*
(short
*)pos)
);
答: 會呼叫func函式, 呼叫show_stat列印當前程序資訊.
答: 沒有, 修改檔案輸出中類似con_write函式.
作業系統實驗07 終端裝置的控制
進入linux 0.11 kernel chr drv目錄,開啟tty io.c,新增如下 增加press f12 handle函式。int switch show char flag 0 void press f12 handle void else if switch show char fla...
linux 終端裝置
終端解釋 終端是一種字元型裝置,它有多種型別,通常使用tty來簡稱各種型別的終端裝置。tty是teletype的縮寫。teletype是最早出現的一種終端裝置,很象電傳打字機 或者說就是 是由teletype公司生產的。在linux系統的裝置特殊檔案目錄 dev 下,終端特殊裝置檔案一般有以下幾種 ...
linux 終端裝置
早期計算機通常用電傳印表機充當終端裝置,終端裝置的作用就是接受使用者的輸入並傳遞給計算機,接受計算機的反饋返回給使用者。如下圖所示 後來電傳印表機被鍵盤和顯示器取代,linux為了支援這種外部終端裝置的連線,提供了終端裝置介面 tty 下面以海思hi3559開發板為例說明串列埠終端。在除錯開發板的時...