自制作業系統(一) 第一個作業系統
在作業系統這一塊,以前我曾嘗試的去讀那些大作,結果發現看不太懂,後來又讀了《30天自制作業系統》,覺得簡單,就有自己的想法,但實現起來又是磕磕跘跘,然後就沒堅持下去,這次,我下定決心,要把《30…》和《orange,s一個作業系統的實現》一起看,然後慢慢探索,所以,開始吧。。。
開發環境:ubuntu20.0.4
因為我們的系統是從軟盤啟動的,所以有必要了解一下軟盤
軟盤:(1.44MB型)
0
啟動區(第一個扇區)
512
.
.
.
(共2880個扇區,所以軟盤容量=512B*2880=1.44MB)
啟動區:
電腦上電自檢後,從幾個儲存裝置中尋找作業系統,當軟盤的啟動區的最後兩個位元組為0x55,0xaa時,則認為這是一個可啟動的軟盤,於是從開頭開始執行.
不過我手頭沒有軟盤,也沒有軟碟機,所以要藉助虛擬軟盤
ctrl+alt+t開啟終端,輸入
dd if=/dev/zero of=cm.img bs=512 count=2880
dd是一個工具,if引數是寫入的源,這裡的/dev/zero可以無限的提供0,
of引數是輸出的源,cm.img就是我們要的虛擬磁碟,(順便說一下,我們的作業系統名字叫cm),bs引數是一次寫入的大小,count是寫入的次數,當然bs和count的設定不是最快的,但是是最清晰的(512*2880).
執行它,我們就得到了一個1.44MB的軟盤映像檔案
接著,我們就要寫軟盤的啟動區,所以要用一個檔案來寫入到啟動區,假如有檔案boot.bin,那麼
dd if=boot.bin of=cm.img bs=512 count=1
就能完成製作一個帶啟動區的軟盤,那boot.bin怎麼來呢?
這就要藉助程式的力量,組合語言是面向機器的低階語言,不受系統限制,所以用它來寫OS底層.
這裡用開源的編譯器nasm來開發
ubuntu上安裝:
sudo apt-get install nasm
接著我們寫一個原始檔,boot.asm
org 0x7c00
call begin
begin:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x7c00
mov al,0x13
mov ah,0x00
int 0x10
times 510-($-$$) db 0
dw 0xaa55
編譯:
nasm boot.asm -o boot.bin
這樣boot.bin就有了
那怎麼讓這個作業系統執行呢?這裡要藉助虛擬機器的力量,這裡用qemu模擬電腦.
執行:
qemu-system-i386 -m 32 -fda cm.img
-m 32是指定記憶體為32MB,-fda就是虛擬的軟盤.
執行:
沒什麼,就一個黑屏而已.
相關文章
- 作業系統(一):作業系統概述作業系統
- 作業系統-第一章-系統簡介作業系統
- 02323作業系統概論 第一章 作業系統簡介作業系統
- 作業系統基礎第一講作業系統
- 作業系統第一章作業系統
- 作業系統-1.1_2作業系統四個特徵作業系統特徵
- 第一章 作業系統概述作業系統
- 作業系統(1)——作業系統概述作業系統
- 作業系統(二):作業系統結構作業系統
- 作業系統複習第一章作業系統
- 30天自制作業系統-merk11的第一天作業系統
- 【一】作業系統原理作業系統
- 30天自制作業系統(一)啟動區作業系統
- 作業系統2—作業系統概論(下)作業系統
- 作業系統1—作業系統概論(上)作業系統
- 作業系統 作業5作業系統
- 《作業系統》作業系統
- [作業系統]作業系統
- 作業系統作業系統
- 第一次作業——圖書管理系統
- 第一章、作業系統(OS)引論作業系統
- 計算機作業系統|作業系統引論計算機作業系統
- 作業系統: Unix作業系統演進簡史作業系統
- 第一章 作業系統引論 總結作業系統
- 作業系統-Operating-System第一章:概述作業系統
- 10.19:xshell、作業系統、系統命令作業系統
- 作業系統原理作業系統
- Linux 作業系統Linux作業系統
- 作業系統概念作業系統
- NodeOS作業系統作業系統
- Linux作業系統Linux作業系統
- 作業系統是什麼?Linux是什麼作業系統?作業系統Linux
- 麒麟作業系統 (kylinos) 從入門到精通 - 系統設定 - 第一篇 系統準備作業系統
- 計算機作業系統第一章複習計算機作業系統
- 30天自制作業系統:第三天作業系統
- 【作業系統2】作業系統啟動過程與異常/中斷,系統呼叫作業系統
- 作業系統體系結構作業系統
- 作業系統複習作業系統