自制操作系統(tǒng)——CherryOS (Hello world)

這將是一個(gè)非常非常長的博客,應(yīng)該這一個(gè)暑假都在寫著一個(gè)博客。
一直以來對(duì)計(jì)算機(jī)原理、操作系統(tǒng)非常感興趣。以前的操作系統(tǒng)課程就令人非常著迷。近日終于不需要天天熬夜了,終于有了幾天的閑暇時(shí)間,準(zhǔn)備實(shí)現(xiàn)一下之前的想法,自制一個(gè)操作系統(tǒng)。暫且命名為CherryOS吧(只是因?yàn)槲蚁矚g喝櫻桃味可樂)。
不知道最后能否寫出來,但是相信這個(gè)過程將是一個(gè)很有意義的過程。
Day1開始!

首先,開始之前,感謝《30天自制操作系統(tǒng)》這本書,本博客的大部分內(nèi)容也將是對(duì)這本書的理解與實(shí)現(xiàn)。同時(shí)此書出版時(shí)間過早,很多工具現(xiàn)在已經(jīng)有了更好的版本,很多工具也都棄用了。本博客會(huì)將書本中的部分工具換為其他工具。

系統(tǒng)環(huán)境

macOS 10.13.1 (17B1003)
CPU: 2.7 GHz Intel Core i7
RAM: 16 GB 2133 MHz LPDDR3

準(zhǔn)備工具

工欲善其事 必先利其器
第一步需要用到兩個(gè)工具
十六進(jìn)制編輯器——HexFiend
虛擬機(jī)——QEMU

這個(gè)操作系統(tǒng)是一個(gè)從0開始的操作系統(tǒng),現(xiàn)在我們手上沒有任何可以利用的工具,沒有C語言,甚至連匯編都沒有。我們唯一有的就是二進(jìn)制,或者說16進(jìn)制。一款好用的十六進(jìn)制編輯器將帶給我們很大的便利。

在這里我選用的是Hex Fiend,工具的選擇可以隨意能編寫十六進(jìn)制即可。

因?yàn)槲覀兪蔷帉懖僮飨到y(tǒng),所以調(diào)試運(yùn)行是個(gè)麻煩的事情。如果我們每一次運(yùn)行與調(diào)試都需要關(guān)閉當(dāng)前的操作系統(tǒng),那么這樣未免太麻煩了。虛擬機(jī)成為了我們必須要使用的工具。

在這里推薦使用QEMU,功能強(qiáng)大又小巧。

具體安裝方式:
macOS
兩種安裝方式:(推薦Homebrew)
Homebrew:

brew install qemu

MacPorts:

sudo port install qemu

Windows
官網(wǎng)下載安裝包:https://www.qemu.org/download/

Linux

Arch:

pacman -S qemu

Debian/Ubuntu:

apt-get install qemu

Fedora:

dnf install @virtualization

Gentoo:

emerge --ask app-emulation/qemu

RHEL/CentOS:

yum install qemu-kvm

SUSE:

zypper install qemu

至此,工具準(zhǔn)備完畢。

編寫Hello World

現(xiàn)在我們來寫第一個(gè)操作系統(tǒng),也就是操作系統(tǒng)屆的hello world。
打開Hex Fiend
輸入如圖字段:


主要代碼
這里要注意
這里要注意
000000->000080:
EB4E9048 454C4C4F 49504C00 02010100 02E00040 0BF00900 12000200 00000000 400B0000 000029FF FFFFFF48 454C4C4F 2D4F5320 20204641 54313220 20200000 00000000 00000000 00000000 00000000 B800008E D0BC007C 8ED88EC0 BE747C8A 0483C601 3C007409 B40EBB0F 00CD10EB EEF4EBFD 0A0A6865 6C6C6F2C 20776F72 6C640A00

0001F0:
00000000 00000000 00000000 000055AA F0FFFF00 00000000 

001400:F0FFFF

剩下的內(nèi)容全為0,文件大小為80* 18 * 512 * 2 = 1474560字節(jié),這個(gè)很重要,一定要保證大小正確。

File->Save As 保存為cherryOS.img

至此,我們的第一個(gè)操作系統(tǒng)編寫完成。

到這里,我相信沒人知道在干什么。但是這的確可以運(yùn)行了。

原理解釋

我們現(xiàn)在在使用16進(jìn)制手動(dòng)編寫一個(gè)軟盤格式的文件。一個(gè)軟盤的大小就是1474560字節(jié),這也是為什么我們操作系統(tǒng)的大小要是1474560字節(jié)。BIOS讀軟盤第一個(gè)扇區(qū)時(shí),磁盤內(nèi)不同地方的內(nèi)容有不同的含義,這里不仔細(xì)說明每一位的含義了。其大概意思為,軟盤的格式為FAT12,軟盤的名稱為HELLOOS(這里并沒有改成CherryOS,因?yàn)檫@不是最終的系統(tǒng),這只是一次實(shí)驗(yàn))

如果將計(jì)算機(jī)的開機(jī)設(shè)置為從軟盤啟動(dòng),計(jì)算機(jī)開機(jī)會(huì)驅(qū)動(dòng)軟盤的磁頭0讀其0柱面1扇區(qū)的內(nèi)容到內(nèi)存0x7c00~ 0x7dff處,并檢查扇區(qū)最后兩2字節(jié)內(nèi)容,如果為55AAH,則從0x7c00開始執(zhí)行這段程序。

如果將一個(gè)好的軟盤的磁頭0對(duì)應(yīng)的0柱面1扇區(qū)內(nèi)含有一段(讓顯存)顯示“Hello world”的機(jī)器指令,且將扇區(qū)最后2個(gè)字節(jié)的內(nèi)容為55AAH。設(shè)置計(jì)算機(jī)開機(jī)時(shí)從軟盤啟動(dòng)后就能夠顯示“Hello World”。

這就是這一段代碼的基本原理

當(dāng)然我們編寫操作系統(tǒng)不可能用16進(jìn)制去編寫,這一段代碼只是一個(gè)小的實(shí)驗(yàn),為了像大家展示,這已經(jīng)是一個(gè)可以使用的系統(tǒng)了。后面,我們將用更高級(jí)的語言編寫操作系統(tǒng)。

其實(shí)就是匯編。。。。。
高級(jí)吧!。。。。。。

效果展示

用qemu加載cherryOS.img
命令行輸入:

qemu-system-i386 -hdd cherryOS.img

如果你看到這個(gè)畫面,就證明?。?!
你的第一個(gè)操作系統(tǒng)實(shí)現(xiàn)了?。。?!


展示結(jié)果

hello world!
hello OS!

我們明天繼續(xù)!

對(duì)了,鑒于這個(gè)源碼手打起來很費(fèi)勁,點(diǎn)擊這里直接下載!哈哈哈哈!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容