從零開始寫 OS 內核 - 準備工做

系列目錄

  • 準備工做
  • 從 BIOS 開始啓動到實模式
  • 進入保護模式
  • 加載並進入內核
  • 顯示與打印
  • GDT 和 IDT,中斷處理
  • 打開虛擬內存
  • 實現堆和 malloc
  • 建立第一個內核線程
  • 多線程運行與切換
  • 鎖與多線程同步
  • 進程的實現
  • 進入用戶態
  • 一個簡單的文件系統
  • 加載可執行程序
  • 系統調用的實現
  • 鍵盤驅動
  • 運行 shell

安裝 Bochs

Bochs 是一個硬件模擬器,咱們寫的內核將運行在上面,後續全部的開發調試工做也將在這上面進行,因此第一步就是安裝它。個人開發環境是 Linux Mint 系統,你用 Ubuntu 也同樣,能夠直接安裝:git

sudo apt install bochs

要是這種方法不行的話,能夠直接去官網下載源碼包編譯安裝,這種方法我也試過是 ok 的。不過在安裝過程當中會遇到一些第三方依賴的庫不全的問題,那就逢山開路遇水搭橋,把依賴都安裝上就行,在這裏我就不細說了,須要你本身動手想一想辦法,不會很難的,網上也有一些教程能夠參考。shell

至於其它系統我沒試過,可是編譯源碼包安裝的方式確定是行得通的。bash

運行 Bochs

首先你需一個 Bochs 運行的配置文件 bochsrc.txt,這是我用的:多線程

# RAM size
megs: 32
# Change to your Bochs installation path
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest

# Disk
boot: disk
ata0: enabled=1, ioaddr1=0x01f0, ioaddr2=0x03f0, irq=14
ata0-master: type=disk, path="scroll.img", mode=flat, cylinders=6, heads=16, spt=63

log: bochsout.txt

mouse: enabled=0
keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map
clock: sync=realtime
cpu: ips=1000000

這裏最重要的部分就是 Disk 相關配置,咱們這裏用到了一個磁盤,這也是後面的 boot loader 和內核鏡像盤,系統就是用該盤啓動。固然這不是真的磁盤。就是一個鏡像文件。app

其中 path="scroll.img" 就是鏡像文件,這裏和配置文件 bochsrc.txt 在同一路徑下,因此就很簡單。名字你隨便起,個人叫 scroll,至於爲何後面再說。固然如今咱們尚未內核鏡像文件,你能夠隨便找個空文件。工具

後面的 cylindersheadsspt 幾個都是硬盤硬件相關的一些參數了,什麼柱面柱頭之類的沒必要深究。Bochs 有一個命令行工具 bximage,能夠幫你肯定這個參數,你只須要告訴它你的鏡像文件會有多大。gitlab

一切就緒,能夠運行 Bochs 了:spa

bochs -f bochsrc.txt

創建項目

話說目前爲止咱們的項目還沒建起來,因此先去 Git 建一個吧。我先給出個人 Git 項目地址,你能夠先參考下,也能夠下載下來運行裏面的 ./start.sh 腳本,看下運行效果。命令行

我給這個項目起的名字叫 scroll,中文意思就是卷軸,就是這東西:線程

卷軸,就是一張紙,一幅畫卷。在咱們這裏就是內存,磁盤,從一片空白開始,而那支畫筆就是 CPU。整個內核的啓動,運行,本質上就是 CPU 和內存之間的一場對話,CPU 在內存上來回跳躍,翻轉騰挪,勾畫出一個龐大複雜的工程系統,這就是 OS。

下一篇開始,咱們將正式進入 OS 的啓動:BIOS 到實模式運行。

相關文章
相關標籤/搜索