iT邦幫忙

鐵人檔案

2025 iThome 鐵人賽
回列表
自我挑戰組

30 天 hypervisor 入門 系列

挑戰將以《嵌入式虛擬化技術與應用:ACRN 開源專案實踐》為主要參考書目,嘗試在 30 天內於 x86 平台探索並實作簡易 Hypervisor。重點將放在 VMX 啟動流程、Stage-2 page table、IRQ 處理與 vCPU 切換等核心機制,並透過 QEMU/KVM 進行驗證。

參賽天數 23 天 | 共 23 篇文章 | 0 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11 實作 I/O thread

I/O Thread 到目前為止,我們的 Guest 雖然能跑起來,但它沒有辦法真實地「感受到」外部事件。 沒有 IRQ、沒有鍵盤輸入,等於只是一個單純的 wh...

2025-09-25 ‧ 由 borane15532 分享
DAY 12

Day 12 添加 I/O 事件 : 用 epoll 把鍵盤事件輸入系統

在先前的實作中,我們已經建立了 host_io 模組,並且透過 epoll 以統一監聽各檔案描述符的事件,同時透過分發對應的 callback,讓 Host 模...

2025-09-26 ‧ 由 borane15532 分享
DAY 13

Day 13 Guest Memory Slots

在前幾天,我們時做簡易的 host I/O 模組,並且透過 KVM_CREATE_IRQCHIP + KVM_IRQ_LINE 將 IRQ 傳遞給 Guest。...

2025-09-27 ‧ 由 borane15532 分享
DAY 14

Day 14 Intel EPT 與 2D page walk

Extended Page Table(EPT)是 Intel VT-x 的二級分頁技術,用來處理 Guest Physical Address (GPA) 到...

2025-09-28 ‧ 由 borane15532 分享
DAY 15

Day 15 實現簡易記憶體管理結構

這一階段我們將會在 KVM 的 API 之上,劃分 Guest 的 GPA 空間並賦予不同語意,用於控制哪些地址被直接映射、哪些地址必須回到 Host 處理。我...

2025-09-29 ‧ 由 borane15532 分享
DAY 16

Day 16 Bootloader 建立最小可啟動開機扇區

雖然目前 hypervisor 大部分功能尚未實作,但我想可先以簡易 boot loader 作為目標。目前的 boot loader 先不涉及模式切換,以實作...

2025-09-30 ‧ 由 borane15532 分享
DAY 17

Day 17 簡易 Bios 載入器

想要讓 boot 動起來,必須在我們的系統裡實作一個最小的 BIOS 模組。而這些 bios 的入口地址被記錄在 0x0 ~ 0x3FF 的中斷向量表(IVT)...

2025-10-01 ‧ 由 borane15532 分享
DAY 18

Day18 掛載簡易 BIOS

在 x86 架構中,CPU 上電後會從固定地址 reset vector (0xFFFF0) 開始執行。BIOS 在這裡會放置一條 far jump 指令,將控...

2025-10-02 ‧ 由 borane15532 分享
DAY 19

Day 19 實現 INT 13h 磁碟功能

在之前的實作中,我們在 Host 端直接用 memcpy 將 boot.bin 放入 Guest 的 0x7C00 並跳過了 BIOS 與硬碟存取的整個流程。因...

2025-10-03 ‧ 由 borane15532 分享
DAY 20

Day 20 實現螢幕設備(1)

在 x86 BIOS 環境保留了固定的地址作為畫面顯示使用(0Xb8000) 則對應彩色的文本寫入 (80 * 25),而 0xA0000 則用於圖形模式顯式。...

2025-10-04 ‧ 由 borane15532 分享