# xHyp **Repository Path**: BookOS/xHyp ## Basic Information - **Project Name**: xHyp - **Description**: https://space.bilibili.com/316666586 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-01-09 - **Last Updated**: 2026-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xHyp xHyp 是一个基于 **ARMv8-A (ARM64)** 架构的极简 Type-1 型 Hypervisor 项目。 该项目的设计初衷是为了**学习与理解现代 CPU 虚拟化原理**。它采用渐进式的代码结构(从 0-2 到 0-5),每一阶段都专注于实现虚拟化的一个核心子集,非常适合作为底层系统软件开发的入门教程或参考实现。 ## 主要特性 * **纯底层开发**: 仅使用 C 语言和 ARM 汇编,无任何外部依赖。 * **渐进式学习路径**: 代码分为多个 Stage (0-2, 0-3, 0-4, 0-5),逐层深入。 * **完整调试支持**: 集成了简单的日志系统 (`logcat`) 和栈回溯 (`backtrace`) 辅助开发。 * **基础虚拟化功能**: * 运行在 EL2 (Hypervisor) 异常级别。 * 异常向量表与同步/异步异常处理。 * 简单的 Hypercall 机制 (用于与 Guest 通信)。 * 内存管理单元 (MMU) 配置与页表映射。 * 伙伴系统 (Buddy System) 页面分配器。 ## 项目结构 项目按照功能阶段进行组织: * **Stage 0-2 (引导与串口)**: 实现了最基础的系统启动流程,初始化 ARM PL011 串口驱动,并通过串口输出 "Hello World"。这是整个 Hypervisor 的基石。 * **Stage 0-3 (异常与调用)**: 引入了 EL2 级别的异常处理框架。实现了从 EL2 切入 Guest (EL1) 的基本逻辑,并定义了标准的 Hypercall 接口 (如 `HYPERCALL_CONSOLE`),用于早期通信。 * **Stage 0-4 (内存管理)**: 重点实现了 4K 页面的内存映射功能。搭建了 Stage 2 地址转换 (IPA -> PA) 的基本框架,使 Hypervisor 能够为 Guest 操作系统分配和管理物理内存。 * **Stage 0-5 (高级功能)**: 完善了用户态/内核态的 C 标准库支持 (`libc.c`),引入了伙伴内存分配器 (`page.c`) 以支持动态内存申请,增加了 `logcat` 日志系统,使得复杂错误的调试变得可行。 ## 构建与运行 ### 环境准备 你需要安装 ARM 交叉编译工具链和 QEMU 模拟器: ```bash # Ubuntu/Debian 示例 sudo apt-get install gcc-aarch64-linux-gnu qemu-system-arm ``` ### 构建项目 在项目根目录直接运行 `make`: ```bash make ``` 这将会在各个 Stage 目录下生成对应的可执行文件(如 `Image` 或 `boot.elf`)。 ### 运行调试 推荐使用 QEMU 进行模拟运行: ```bash # 示例:运行 Stage 0-2 qemu-system-aarch64 -machine virt -cpu cortex-a57 -nographic -kernel 0-2/boot.elf ``` 你可以在 QEMU 的终端中看到串口输出的调试信息。 ## 许可证 本项目遵循开源许可证,具体信息请查看 [LICENSE](LICENSE) 文件。