作業系統開發 Hello OS 開始作業系統開發

2021-08-17 22:18:31 字數 2399 閱讀 2126

在開發作業系統之前

,我們需要知道從按下電源開機鍵開始

,cpu

都做了什麼

?第一步

:按下電源鍵

,cpu重置,

開始工作

。第二步

:從記憶體位址為

0xfffffff0

的位置開始

,讀取指令並執行

,而這個位址對應的就是

bios(basic input/output system)。

第三步:bios

的post過程,

即power on self test,

這就是我們通常說的加電自檢

,這一步如果硬體有問題

,則會根據不同的問題發出不同的蜂鳴聲

,平時記憶體條鬆動的時候大家都會聽到過

。如果自檢通過

,則進入下一步

。第四步

:設定過

bios

的肯定都設定過裝置的啟動順序

,現在一般的筆記本上開機時按

f12鍵也可以進入這個介面,這時

bios

會按照這個啟動順序

,逐一的去查詢裝置的第乙個扇區中

512個位元組的最後兩個位元組

,如果是

0x55

和0xaa(

這是標準約定

),則說明這個裝置可以啟動

,如果沒找到則逐一查詢

。第五步

:找到可啟動的裝置後

,會把該裝置第乙個扇區的

512個位元組載入到記憶體位址

0x7c00處,

並開始執行這個位置的**

。因為核心不可能只有

512個位元組

,所以一般都是會寫一段載入核心的**

,這就是通常的

bootloader程式。

但是我們也可以不實現這個程式

,而使用

grub

來替代,

相信經常裝系統的都知道

grub,

只要我們遵照

grub

的規範來寫核心就可以實現

。第六步

:載入核心

,接下來就是你要寫的核心的天下了

。為了能演示進入系統的介面

,下面貼上我寫的**

; 10h中斷用來顯示字元

mov ax, cs

mov es, ax

mov ax, txt

mov bp, ax ; es:bp表示顯示字串的位址

mov cx, txtlen ; cx存字元長度

mov ax, 1301h ; ah=13h表示向tty顯示字元,al=01h表示顯示方式(字串是否包含顯示屬性,01h表示不包含)

mov bx, 000fh ; bh=00h表示頁號,bl=0fh表示顏色

mov dl, 0 ; 列

int 10h

txt: db "hello everyone, welcome to use elephantos!"

txtlen: equ $ - txt ; 字串長度

然後用

nasm編譯,

執行下面的命令

nasm test.asm -o test.bin
編譯出來的

bin檔案為了能夠引導

,網上查的方法都是用的軟碟機之類的,在

windows

上也會特別麻煩

,後來用

ultraiso

實現了,

開啟ultraiso,

把剛才的

bin檔案拖到目錄裡

,然後在

bin檔案上右擊選擇設定為引導檔案即可

。然後儲存成

iso檔案

。截圖如下

我是用的

virtualbox

測試的,

在virtualbox

上新建虛擬機器

,都選擇

other,

用光碟機載入剛才儲存的

iso檔案

,測試效果如下

如果此篇文章對您有所幫助,請多多支援哦!您的支援是我一直寫下去的動力!

(0)從零開始的作業系統開發日記

os開発 從零開始的作業系統開發日記其實是個課程設計的坑,打算用於記錄學習和開發過程中遇到的一些散點,在著手開幹的時候會在github那邊開個專案 其實打算部落格也直接在那邊寫,但是我懶得搭部落格了,目前主要參考書籍是川合秀實先生的 30天自製作業系統 關於這本書,一些整理如下 按內容分大概就是這樣...

(終)從零開始的作業系統開發日記

直到某一天,博主被叫去交課程設計,才想起了這個系列的日記還沒填坑。由於時間和精力還有精力以及精力等各方面的原因,這次依舊是單刷課程設計,卻異常的覺得心累。歸結一下,原因大概是有三點 1.一開始的框架設計上存在資訊的冗餘和表達,儲存的不便,導致資訊填充相關的 寫起來很心累,一不小心就寫錯。2.這次有隊...

BEAR作業系統開發 1

從今天開始,我將開發作業系統了。我將她取名為 bear 小熊的意思,因為我的乙個朋友喜歡小熊,所以就用它了。其實 bear 還有另外乙個意思,就是 忍受 忍受學習的壓力和痛苦,這樣才會有所收穫。我模仿的linux0.11的核心源 現在主要將它的string標頭檔案移植到x86系統上面。今天完成了7個...