1. 程式人生 > >從0開始製作一個簡單的OS(bochs bios bximage)

從0開始製作一個簡單的OS(bochs bios bximage)

1.      安裝硬體環境模擬器bochs------------Ubuntu下原始碼安裝bochs(裸機純硬體)

Bochs是一個x86硬體平臺的開源模擬器。它可以模擬各種硬體的配置。Bochs模擬的是整個PC平臺,包括I/O裝置、記憶體和BIOS。更為有趣的是,甚至可以不使用PC硬體來執行Bochs。通過改變配置,可以指定使用的CPU(386486或者586),以及記憶體大小等。Bochs是電腦裡的“PC”。

安裝編譯工具和依賴庫

bochs是由C++編寫的,我們要安裝相應的編譯環境build-essential .如果要圖形介面,安裝xorg-dev.

sudo apt-get install build-essential

sudo apt-get install xorg-dev

sudo apt-get install libgtk2.0-dev

編譯安裝

$ apt-get sourcebochs //下載原始碼

$ cd bochs-2.5.1

$ ./configure  --enable-debugger  --enable-disasm

$ make

$ make install

NOTE:若出現not reference error,一般是因為沒有在makefile中加入相關的庫,直接加入庫名即可;

若出現not command error安裝相關的工具apt-get install即可。

2.      準備bios(BIOS-bochs-latest

)

Bochs 安裝後相當於準備好硬體了.機器啟動的時候,首先進入rom中的bios。因此需要rom bios image.

$ cd bochs/bios

$ make 

ERROR:出現/bin/bash: iasl command not found.

解決方法: apt-getinstall iasl.

將生成的BIOS-bochs-latest複製到/usr/local/share/bochs/目錄下。

3.      準備虛擬磁碟/軟盤(a.img)

Bochs已經安裝配置完畢,硬體方面已經有了一個計算機,作業系統需要寫在磁盤裡,所以還需要一個磁碟,在Bochs的元件中,有一個工具叫做bximage

,它不但可以生成虛擬軟盤還可以生成虛擬硬碟,我們稱他們為磁碟映像。

$ bximage

按照提示輸入相關引數即可。

4.      配置bochs的相關引數(修改bochsrc配置檔案)

配置CPU Memory、磁碟、bios rom imagemousekeyboard map等資訊。

$ cp  .bochsrc  ./bochsrc

$ vi bochsrc

 Config_interface:textconfig

Display_library: x

Romimage: file=/usr/local/share/bochs/BIOS-bochs-latest (bios資料夾下 make生成的)

Vgaromimage: file=/usr/share/vgabios/vgabios.binbios檔案下 make生成的)

floppya:1_44=a.img, status=inserted(軟盤a.img是由步驟3生成的

boot:floppy

log:bochsout.txt

mouse:enabled=0

keyboard_mapping:enabled=1,map=/usr/share/bochs/keymaps/sdl-pc-us.map

display_library: sdl

5.      製作一個最簡單的作業系統(boot.bin)

完成上述操作後,就可以啟動bochs了。

$ bochsrc

選擇2 ,輸入載入的配置檔案bochsrc;選擇6,啟動bochs.

因為我們還沒有作業系統在我們的虛擬磁碟floppya,因此還要製作一個簡單的作業系統程式。

org   07c00h                ; tell thecompiler that the program is loaded at 7c00

  mov   ax, cs

  mov   ds, ax

  mov   es, ax

  call   DispStr              ; callthe example about string display

  jmp   $                  ; unlimited loop

 DispStr:

   mov   ax, BootMessage

   mov   bp, ax                ; ES:BP =address of string

   mov   cx, 16                ; CX =length of string

   mov   ax, 01301h            ; AH =13, AL = 01h

   mov   bx, 000ch           ; page num = 0 (BH= 0), red word with black backgroud (BL = 0ch, highlight)

   mov    dl, 0

   int   10h                  ; breakat 10h

   ret

 BootMessage:           db     "Hello, OS World!"

 times   510-($-$$)     db     0   ; fill the remaining space to the number of the binary code reach 512bytes

 dw    0xaa55                     ; end

要用NASM編譯上述程式碼,首先要安NASM,然後編譯。

sudo aptitude install nasm

nasm boot.asm-o boot.bin

我們就得到了一個512位元組的boot.bin

實際上,這只是一個引導扇區。當BIOS檢查第一個扇區,發現以0xAA55結束,BIOS就認為這是一個引導扇區。“一旦BIOS”發現了引導扇區,就會將512位元組的內容裝載到記憶體地址0000:7c00處,然後跳轉到0000:7c00處將控制權徹底交給這段引導程式碼。到此為止,計算機不再由BIOS中固有的程式來控制,而變成由作業系統的一部分來控制。

6.      將程式boot.bin寫入磁碟a.img的第一個扇區,啟動bochs

使用軟盤絕對扇區讀寫工具這個檔案寫到一張空白軟盤的第一扇區:

dd if=boot.bin of=a.img bs=512count=1 conv=notrunc

輸入命令:

bochs –f bochsrc,就會顯示執行結果“helloworld”。

相關推薦

0開始製作一個簡單OS(bochs bios bximage)

1.      安裝硬體環境模擬器bochs------------Ubuntu下原始碼安裝bochs(裸機純硬體) Bochs是一個x86硬體平臺的開源模擬器。它可以模擬各種硬體的配置。Bochs模擬的是整個PC平臺,包括I/O裝置、記憶體和BIOS。更為有趣的是,甚

0開始搭建一個微服務的持續交付系統

本文介紹瞭如何利用開源軟體快速搭建一套微服務的持續交付系統。本文假設的環境是Linux作業系統,用到的軟體包括Git、Jenkins、Salt、ZooKeeper、Apache等。開始之前,我先簡單介紹下持續交付和微服務的概念,以便大家更好的理解本文的精華。 什麼是持續交付?我們先舉個物流的例子

0開始編寫一個應用(android端+小程式端+伺服器端)第二步 專案經理完成邏輯圖。(上:產品經理的思考)

專案經理跟客戶收到基本需求後,要完善客戶的需求。因為絕大數客戶對於網際網路或者軟體不是很懂,只能提出他們想要的東西,即專案必須要實現的功能。但是沒有一個完整的專案流程,這需要專案經理去完善,細化,改善功能。 下面開始記錄專案經理工作。 上一篇客戶說到他的專案構思

0開始編寫一個應用(android端+小程式端+伺服器端)第二步 專案經理完成邏輯圖。(下:產品細節思考後的實現邏輯圖)

上一篇說到產品經理思考完成大概邏輯圖: 使用者釋出拼團資訊可以選擇金額釋出,非金錢釋出。並且可以分享。然後,其他使用者點選獲得獎勵,或者分享獲得獎勵。 獎勵的有錢,有釋出機會。這個就是專案的主要流程,但是專案只有這個太少了,拼團還有一個玩法就是 拼團抽獎。 所以要加上這

微信小程式-開始製作一個跑步微信小程式

一、準備工作 1、註冊一個小程式賬號,得用一個沒註冊過公眾號的郵箱註冊。 2、註冊過程中需要很多認證,有很多認證,比較繁瑣,如果暫時只是開發測試,不進行提審、釋出的話,只要完成營業執照號填寫就可以了,不需要完成微信認證。 3、註冊完賬號,登入,在主頁面左邊列表中點選設定,然後再

0開始打造一個最小系統的資料庫

本篇趟個雷,把資料庫納入到輪子中,在我看來,資料庫比輪子複雜多了,是一個和作業系統差不多複雜度的東西,所以才能通過一個Oracle養活一家全球50強的公司。本文為後端輪子系列的第一篇,我們先來談談如何造個資料庫吧。 先來聊聊關係型資料庫 關係型資料庫(Relational Datab

自動化測試框架 | selenium+Python,怎樣0開始搭建一個屬於自己專案的自動化測試框架

這篇博文下面的文章是連結到我知乎專欄的,現啟用新知乎賬號「馬蟻蛋」,對應的專欄「軟體測試精選」,所有文章全部遷移至此賬號了,需要的請關注。此篇文章是,如何從零搭建一個屬於自己專案的自動化測試框架(第一篇

開始搭建一個簡單的基於webpack的vue開發環境

都8102年了,現在還來談webpack的配置,額,是有點晚了。而且,基於vue-cli或者create-react-app生成的專案,也已經一鍵為我們配置好了webpack,看起來似乎並不需要我們深入瞭解。 不過,為了學習和理解webpack解決了前端的哪些痛點,還是有必要從零開始自己

0開始一個通用的Makefile檔案

     什麼是Makefile檔案       一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,

怎樣0開始搭建一個測試框架_4——報告

怎樣從0開始搭建一個測試框架_4 這一步我們需要用到並修改HTMLTestRunner.py,它本身是基於PY2的,簡單而實用,之前博主對其進行了美化,並且改成了中文(下載連結)。 現在博主基於此進行了對PY3的修改,增加了對subTest的支援。

0開始一個基於Flutter的開源中國客戶端(4)——Flutter佈局基礎

我的上一篇部落格中記錄了Flutter基礎和一些常用的Widgets,這一篇中主要記錄Flutter常用的一些佈局,希望自己在記錄的同時能溫故知新,同時給初學者一些幫助。 Flutter佈局容器 在Android開發中,我們使用xml檔案寫佈局,有諸

selenium學習之--0開始搭建一個測試框架(總章)

目錄 思考:我們需要一個什麼樣的框架 既然要搭一個框架,我們首先得弄明白我們需要一個什麼樣的框架,這個框架要支援什麼功能? 框架主要的作用就是幫助我們編寫更簡單並且好維護的用例。我們需要把所有除測試用例以外的東西抽象出來作為框架的部分。 那麼,額外的東西是

怎樣0開始搭建一個測試框架_2——日誌

怎樣從0開始搭建一個測試框架_2 這部分需要預先了解Python的內建庫logging,不會用的可以先看下博主的 【Python logging 模組】學習下logging使用 接下來我們為我們的框架加上log,在utils中建立一個log.py檔案

怎樣0開始搭建一個測試框架_8——斷言

怎樣從0開始搭建一個測試框架_8 上次我們的用例中增加了斷言。斷言(檢查點)這個東西對測試來說很重要。不然你怎麼知道一個測試結果是對是錯呢。unittest為我們提供了很多很好的斷言,但是對於我們的專案可能是不夠的。我們需要封裝自己的斷言方法。 這裡

0開始一個的Vue圖片/ 檔案選擇(上傳)元件[基礎向]

之前用Vue做了一個基礎的元件 vue-img-inputer ,下面就叫 vii ,記錄下在開發過程中遇到的 知識點 (都算比較基礎,具體程式碼不會貼太多,都可以在 專案 倉庫裡看到)。 上傳檔案很多專案都要用到,一些元件庫裡(ele/iview...) 檔案上

怎樣0開始搭建一個測試框架_6——PageObject

怎樣從0開始搭建一個測試框架_6 針對UI自動化,接下來我們用PO思想進行下封裝。 對於不同的專案,不同的頁面,我們都需要選擇瀏覽器、開啟網址等,我們可以把這些操作抽象出來,讓不同的用例去呼叫,只需要傳入不同引數即可,不用一遍遍複製貼上。 為此,我

0開始一個基於Flutter的開源中國客戶端(8)——外掛的使用

上一篇中我記錄了基於Flutter的開源中國客戶端裡網路請求和資料儲存的部分,本篇記錄的是app中外掛的使用,由於很多功能並沒有內建到Flutter中,所以我們需要引入一些外掛來幫助我們完成某些功能,比如app內網頁的載入,相簿選擇照片等。 搜尋外掛包

0開始一個基於Flutter的開源中國客戶端(5)——App整體佈局框架搭建

上一篇中我記錄了Flutter中常用的一些佈局,本篇開始開發基於Flutter的開源中國客戶端了。在本篇部落格中,要實現的是一個App的整體框架,包括頁面底部的Tab導航選單、頁面的側滑選單以及跳轉到新的頁面這幾個功能。希望自己在記錄的同時能溫故知新,同時

【程式設計師必看】如何用Python0開始建立一個區塊鏈?

在數字貨幣盛行的檔口,比特幣,這幣那幣到底值不值得信賴呢?也許你像很多人一樣感到新奇,想接近它,但只因背後的區塊鏈技術,阻斷了向新領域嘗試的步伐。不過,對於程式設計師來說,想真正搞懂比特幣,搞懂區塊鏈,可不是難題,因為他們能邊玩邊學,通過一行行pyhton

0開始一個基於Flutter的開源中國客戶端(6)——各個靜態頁面的實現

上一篇中我記錄了基於Flutter的開源中國客戶端的整體佈局框架的搭建,本篇記錄的是每個頁面的靜態實現,關於具體的資料載入和儲存,放在下一篇中記錄,希望自己在溫故知新的同時,能給Flutter初學者一些幫助。 在基於Flutter的開源中國客戶端中,使