BlankFoxGirl/Zero-OS

GitHub: BlankFoxGirl/Zero-OS

一个支持多架构的裸机 Type-1 虚拟机监控程序操作系统,可在内存中运行虚拟机而不留磁盘痕迹。

Stars: 1 | Forks: 0

[![Makefile CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/54d6b33e60213155.svg)](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, 临时操作系统, 内存运行, 内核开发, 内联执行, 子域名枚举, 嵌入式系统, 引导程序, 操作系统开发, 无痕系统, 沙箱, 系统安全, 系统架构, 网络安全, 自动回退, 虚拟化, 裸机虚拟化, 跨平台编译, 身份验证强制, 防病毒, 隐私保护