BlankFoxGirl/Zero-OS
GitHub: BlankFoxGirl/Zero-OS
一个支持多架构的裸机 Type-1 虚拟机监控程序操作系统,可在内存中运行虚拟机而不留磁盘痕迹。
Stars: 1 | Forks: 0
[](https://github.com/BlankFoxGirl/Zero-OS/actions/workflows/ci.yml)
## ZeroOS
一个基本的操作系统,可以从 ISO 镜像运行虚拟机。其目的是:
- 学习如何构建带有 Bootloader 的基本 C++ 内核。
- 启动一个任意虚拟机。
- 创建一个抽象虚拟化层
- 从底层操作系统视角支持 ARM 和 x86 32/64 位架构。
### 它是什么?
ZeroOS 被设计为一个轻量级操作系统,它运行一个虚拟机,并且可以从 USB 闪存盘启动而不在机器上留下任何痕迹。
### 前置条件
针对每个目标架构的交叉编译工具链:
| 架构 | 工具链前缀 |
|--------------|----------------------|
| x86 (32-bit) | `i686-elf-` |
| x86_64 | `x86_64-elf-` |
| ARM (AArch32)| `arm-none-eabi-` |
| AArch64 | `aarch64-elf-` |
你还需要 [QEMU](https://www.qemu.org/) 来在模拟器中运行内核。
### 构建
为特定架构构建内核:
```
make ARCH=x86_64 kernel # x86_64 (default)
make ARCH=x86 kernel # x86 32-bit
make ARCH=arm kernel # ARM (AArch32)
make ARCH=aarch64 kernel # AArch64
```
一次为所有架构构建:
```
make all
```
创建可启动 ISO (仅限 x86/x86_64):
```
make ARCH=x86_64 iso
```
创建原始二进制镜像 (仅限 ARM/AArch64):
```
make ARCH=aarch64 image
```
带调试符号构建 (`-g -O0` 而不是 `-O2`):
```
make ARCH=aarch64 DEBUG=1 kernel
```
### 在 QEMU 中运行
每个架构都有一个专用的运行目标,它会构建并启动 QEMU:
```
make run-x86 # QEMU i386
make run-x86_64 # QEMU x86_64
make run-arm # QEMU ARM virt
make run-aarch64 # QEMU AArch64 virt (EL2 hypervisor mode)
```
串行输出位于 stdio (`-serial stdio`)。
#### 在 ZeroOS (AArch64) 内启动 Linux 客户机
ZeroOS 可以充当 Type-1 hypervisor 并启动 Linux 内核作为客户虚拟机:
```
make run-aarch64-vm GUEST_KERNEL=path/to/Image
```
可选地传递 initrd:
```
make run-aarch64-vm GUEST_KERNEL=path/to/Image GUEST_INITRD=path/to/initrd
```
### 清理
```
make clean
```
### 软件架构
```
graph TD
subgraph media["Boot Media"]
USB["USB Stick\n(zero trace on host storage)"]
end
subgraph boot["Bootloader — boot/"]
GRUB["GRUB Multiboot2 /\nCustom Stage-1 + Stage-2"]
UBOOT["U-Boot /\nBare-metal Entry + Device Tree"]
end
subgraph hal["Architecture HAL — src/arch/"]
direction LR
X86["x86\n(32-bit)"]
X86_64["x86_64\n(64-bit)"]
ARM["ARM\n(AArch32)"]
AARCH64["AArch64\n(64-bit)"]
end
IFACE[/"arch_interface.h\narch_init() · arch_halt() · arch_enable_interrupts()"/]
subgraph kernel["Kernel — src/kernel/ (Architecture-Independent)"]
MM["Memory Management\n(Custom Allocator — no new/delete)"]
INT["Interrupt Subsystem\n(ISR → Bottom-Half Deferral)"]
CONSOLE["Console I/O\n(Serial + Framebuffer)"]
PANIC["Panic Handler\n(Diagnostics → Halt)"]
end
subgraph headers["Shared Headers — include/"]
STDH["stdint.h · stddef.h · stdarg.h\n(freestanding only)"]
end
subgraph vm["Virtualization Layer — src/vm/"]
VMABS["VM Abstraction Layer"]
VMLIFE["VM Lifecycle\nCreate · Run · Destroy"]
end
subgraph guest["VM Guest"]
ISO["Guest OS\n(Arbitrary ISO Image)"]
end
USB --> GRUB
USB --> UBOOT
GRUB -->|"memory map +\nframebuffer info"| X86
GRUB -->|"memory map +\nframebuffer info"| X86_64
UBOOT -->|"memory map +\ndevice tree"| ARM
UBOOT -->|"memory map +\ndevice tree"| AARCH64
X86 & X86_64 & ARM & AARCH64 --- IFACE
IFACE --> MM
IFACE --> INT
IFACE --> CONSOLE
headers -.-|"used by"| hal
headers -.-|"used by"| kernel
MM & INT & CONSOLE --> VMABS
VMABS --> VMLIFE
VMLIFE --> ISO
PANIC -.->|"on fatal error"| CONSOLE
classDef bootMedia fill:#1a1a2e,stroke:#e94560,color:#fff
classDef bootloader fill:#16213e,stroke:#0f3460,color:#fff
classDef halLayer fill:#0f3460,stroke:#53a8b6,color:#fff
classDef iface fill:#533483,stroke:#e94560,color:#fff
classDef kernelLayer fill:#1b1b2f,stroke:#53a8b6,color:#fff
classDef headerLayer fill:#2c2c54,stroke:#aaa,color:#ccc
classDef vmLayer fill:#1e3799,stroke:#0a3d62,color:#fff
classDef guestLayer fill:#0a3d62,stroke:#38ada9,color:#fff
class USB bootMedia
class GRUB,UBOOT bootloader
class X86,X86_64,ARM,AARCH64 halLayer
class IFACE iface
class MM,INT,CONSOLE,PANIC kernelLayer
class STDH headerLayer
class VMABS,VMLIFE vmLayer
class ISO guestLayer
```
标签:AArch64, ARM架构, Bootloader, Cross-Compiler, C++ 内核, Ephemeral OS, Hakrawler, Hypervisor, ISO镜像, Live USB, Makefile构建, QEMU, Type-1 Hypervisor, x86_64, 临时操作系统, 内存运行, 内核开发, 内联执行, 子域名枚举, 嵌入式系统, 引导程序, 操作系统开发, 无痕系统, 沙箱, 系统安全, 系统架构, 网络安全, 自动回退, 虚拟化, 裸机虚拟化, 跨平台编译, 身份验证强制, 防病毒, 隐私保护