資源簡介
實(shí)例一
由于想學(xué)習(xí)保護(hù)模式編程和linux0.01,遇到不少問題。有的保護(hù)模式編程實(shí)例全是匯編語言。linux0.01在高版本GCC又編譯不能通過,即使編譯通過也不能正常運(yùn)行。能正常運(yùn)行的linux0.01的信息也是很少。況且文件也比較多,代碼也是很多,不怎么好學(xué)習(xí)掌握。于是就刪除了linux0.01很多文件,只留下boot/boot.s,boot/head.s,init/mian.c和makefile等幾個源程序文件和tools目錄下的幾個文件。并且修改了makefile,使之能編譯通過,運(yùn)行。這個例子用sudo make disk寫進(jìn)軟驅(qū)扇區(qū)之后能在Bochs和Vbox能模擬器上運(yùn)行。運(yùn)行過程就是boot.s->head.s->main.c,跳進(jìn)main函數(shù)后執(zhí)行一個寫字符的循環(huán),之后死循環(huán)。
下圖是實(shí)例一運(yùn)行效果:
實(shí)例二
實(shí)例二在實(shí)例一上面添加了PS2鍵盤中斷,時鐘中斷,一個輸出字符的0x80軟中斷。實(shí)例用到了linux0.01中的system.h中定義的兩個函數(shù)set_intr_gate,set_trap_gate可以比較方便設(shè)置IDT。只有兩個參數(shù),第一個是中斷號,第二個是中斷處理函數(shù)的地址。實(shí)例還用到了linux0.01中的io.h中的兩個函數(shù)outb(value,port)和inb(port)用與讀寫IO端口。程序也是比較簡單,跳進(jìn)main函數(shù)后用set_intr_gate,set_trap_gate設(shè)置時鐘,PS2鍵盤,和0x80的IDT。之后用asm("sti");開中斷,就死循環(huán),留下中斷處理程序在執(zhí)行了。中斷處理函數(shù)可以是匯編的子程序或者是C語言函數(shù)。其中時鐘中斷處理程序在interrupt.s中用的是匯編,是通過寫彩色字符模式顯存空間0xb8000-xB8FA0輸出幾個變動的字符。PS2鍵盤中斷key_interruptc,在main.c里面用的是C語言。中斷時讀鍵盤端口0x60獲取按鍵的掃描碼,再判斷掃描碼,執(zhí)行清屏,寫屏,軟中斷的代碼。按鍵1掃描碼為2執(zhí)行清屏,按鍵2掃描碼為3執(zhí)行寫屏,按鍵3掃描碼為4執(zhí)行軟中斷輸出字符A。注意掃描碼根據(jù)鍵盤不同可能會不一樣。
下面兩張圖是實(shí)例二運(yùn)行效果:
實(shí)例三
實(shí)例三在程序中添加了三個任務(wù),任務(wù)是參照Linux0.00添加的,一個任務(wù)有一個TSS和LDT。任務(wù)入口同樣的可以是C語言函數(shù)或者匯編過程。三個任務(wù)都是往屏幕各自位置輸出字符,背景不斷循環(huán)閃爍。程序首先設(shè)置三個任務(wù)在GDT中的TSS和LDT,再把三個任務(wù)的TSS選擇子存放到任務(wù)數(shù)組中。接著設(shè)置中斷,打開中斷,并通過iret跳到第一個任務(wù)中。之后時鐘中斷中,調(diào)用timeret,不斷循環(huán)切換三個任務(wù)。切換任務(wù)用jmpl 任務(wù)選擇子 偏移地址0 直接跳到任務(wù)中切換任務(wù)。其中0xea是jmpl機(jī)器碼,task_sel是任務(wù)選擇子。
下圖是實(shí)例三運(yùn)行效果:
以上三個例子都在VBOX Ubuntu16.04 x64 LTS GCC5.4.0,中編譯通過可以用Bochs,VBOX,DOSBox SVN-Daum等模擬器運(yùn)行。在linuxmint 18.04 gcc 7.3.0中也可以編譯通過,生成的image也可以用Bochs,VBOX,DOSBox SVN-Daum等模擬器運(yùn)行。
在VBOX Veket GCC4.64編譯中會有undefined reference to "asm"的錯誤,把a(bǔ)sm該成__asm即可,還有一個不能再for循環(huán)中聲明變量的錯誤,需要在makefile中的GCC編譯行加一個-std=c99的參數(shù)。
代碼片段和文件信息
-----------?---------??----------?-----??----
?????文件??????50447??2020-09-29?15:38??2.zip
?????文件??????45462??2020-09-29?15:38??1.zip
?????文件??????61181??2020-09-29?15:38??3.zip
-----------?---------??----------?-----??----
???????????????157090????????????????????3
評論
共有 條評論