使用Virtualbox除錯自製作業系統

2021-07-26 13:21:50 字數 2405 閱讀 3920

自製作業系統,如果每次都用物理機除錯,未免太慢了,《30天自製作業系統》裡使用的pc模擬器qemu軟體,但是實際上,使用虛擬機器是乙個很不錯的選擇,功能強大,除錯方便。

以下實現乙個簡單的hello world用例,**來自《30天自製作業系統》。

; hello-os

; tab=4

org 0x7c00

; 指明程式裝載位址

; 標準fat12格式軟盤專用的** stand fat12 format floppy code

jmp entry

db 0x90

db "helloipl"

; 啟動扇區名稱,必須是8位元組的,不滿8位元組就用0填滿

dw 512

; 每個扇區(sector)大小(必須512位元組)

db 1

; 簇(cluster)大小(必須為1個扇區)

dw 1

; fat起始位置(一般為第乙個扇區)

db 2

; fat個數(必須為2)

dw 224

; 根目錄大小(一般為224項)

dw 2880

; 該磁碟大小(必須為2880扇區1440*1024/512)軟盤大小固定為1440k

db 0xf0

; 磁碟型別(必須為0xf0)

dw 9

; fat的長度(必須為9個扇區)

dw 18

; 乙個磁軌(track)有幾個扇區(必須為18)

dw 2

; 磁頭數(必須為2)

dd 0

; 不分割槽,必須為0

dd 2880

; 重寫一次磁碟大小

db 0,0,0x29

; 意義不明(固定)

dd 0xffffffff

; (可能是)卷標號碼

db "hello-os "

; 磁碟的名稱(必須為11位元組,不足填空格)

db "fat12 "

; 磁碟格式名稱(必須是8位元組,不足填空格)

resb 18

; 先空出18位元組

;程式主體

entry:

mov ax,0

; 初始化暫存器

mov ss,ax ;

mov sp,0x7c00

mov ex,ax

mov es,ax

mov si,msg

putloop:

mov al,[si]

add si,1

cmp al,0

je fin

;這段**用來顯示乙個字元

mov ah,0x0e

; 顯示乙個文字

mov bx,15

; 指定字元顏色

int 0x10

; 呼叫顯示卡bios

;迴圈jmp putloop

fin:

hal ; 讓cpu停止,等待指令

jmp fin ; 無限迴圈

msg:

db 0x0a,0x0a

; 換行兩次

db "hello world!"

db 0x0a

db 0

resb 0x7dfe-$ ; 用$可以提高程式健壯性 程式是從0x7c00開始的

db 0x55, 0xaa

; 軟盤的第乙個512扇區的最後兩個位元組必須是0x55aa,0x55aa代表這是乙個啟動程式

編譯完成之後,生成.img檔案。這個過程可以參考《30天自製作業系統》。如果是物理機,則需要把該映象檔案燒到軟碟機上,但是現在很少有軟碟機了。

在virtualbox裡新建乙個虛擬機器,安裝的作業系統選擇other,並且不建立虛擬盤(後續手動載入軟碟機)。

然後載入剛剛生成的img檔案,ide控制器可以刪除,因為暫時用的是軟碟機啟動。

啟動該虛擬機器,就可以看到helloworld字樣了。

VirtualBox 使用技巧

一。virtualbox 的快捷鍵 virtualbox 預設的 host 鍵是right ctrl host 鍵可以點選 oracle vm virtualbox 管理器的左上角 管理 全域性設定 熱鍵 重新設定。控制 host i 禁止自動捕獲滑鼠 m host del 傳送 ctrl alt ...

利用virtualbox的虛擬串列埠除錯核心

2012 04 04 23 44 00 標籤 分類 linux sunvirtualbox的串列埠功能提供的很是強大,即便你的主機沒有串列埠,你依然可以利用兩個virtualbox的虛擬機器來除錯你的核心.步驟1,除錯機將串列埠設定成host pipe,然後選中建立,名字取為類似這樣的東西 wind...

Virtualbox使用問題彙總

4.如何在虛擬系統中使用u盤 確保u盤已經在真實系統上啟用,再在 設定 usb裝置 中,勾選 啟用usb控制器 和 啟用 usb 2.0 ehci 控制器 後,最後在同乙個頁面新增 usb篩選器 時就可以在列表中發現u盤驅動的英文標識 選擇並加入 usb裝置篩選器 列表中即可,該列表就相當於乙個白名...