從0開始製作一個簡單的OS(bochs bios bximage)
1. 安裝硬體環境模擬器bochs------------Ubuntu下原始碼安裝bochs(裸機純硬體)
Bochs是一個x86硬體平臺的開源模擬器。它可以模擬各種硬體的配置。Bochs模擬的是整個PC平臺,包括I/O裝置、記憶體和BIOS。更為有趣的是,甚至可以不使用PC硬體來執行Bochs。通過改變配置,可以指定使用的CPU(386、486或者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 image、mouse、keyboard 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.bin(bios檔案下 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導航選單、頁面的側滑選單以及跳轉到新的頁面這幾個功能。希望自己在記錄的同時能溫故知新,同時
【程式設計師必看】如何用Python從0開始建立一個區塊鏈?
在數字貨幣盛行的檔口,比特幣,這幣那幣到底值不值得信賴呢?也許你像很多人一樣感到新奇,想接近它,但只因背後的區塊鏈技術,阻斷了向新領域嘗試的步伐。不過,對於程式設計師來說,想真正搞懂比特幣,搞懂區塊鏈,可不是難題,因為他們能邊玩邊學,通過一行行pyhton
從0開始寫一個基於Flutter的開源中國客戶端(6)——各個靜態頁面的實現
上一篇中我記錄了基於Flutter的開源中國客戶端的整體佈局框架的搭建,本篇記錄的是每個頁面的靜態實現,關於具體的資料載入和儲存,放在下一篇中記錄,希望自己在溫故知新的同時,能給Flutter初學者一些幫助。 在基於Flutter的開源中國客戶端中,使