# ArceOS + AxVisor 虚拟化学习计划

详细原理、寄存器、启动协议、源码阅读方法和排障步骤请配合阅读 [TECHNICAL_GUIDE.md](TECHNICAL_GUIDE.md)。

## 目标与周期

- 周期：16 周，每周 10–12 小时，总计约 176 小时。
- 主线：虚拟化基础 → 启动原理 → ArceOS → AxVisor → Linux + RTOS 多客体。
- 最终能力：能够解释虚拟化启动链路，修改关键代码，并用 AxVisor 同时启动 Linux 与 RTOS；Linux 中由 init 自动启动至少两个用户程序。

## 最终验收标准

1. 一条命令构建并启动 AxVisor、Linux 客体和 RTOS 客体。
2. Linux 进入用户态，并自动运行两个以上的程序或服务。
3. RTOS 启动调度器，并持续运行两个可观察任务。
4. 为不同客体划分 CPU、内存与设备，配置中不存在资源重叠。
5. 能通过串口日志定位固件、AxVisor、VM 创建、vCPU 首次进入、客体启动等阶段。
6. 注入一个客体崩溃后，另一个客体仍能运行并输出日志。
7. 能独立讲清 EL2、Trap/VM Exit、vCPU、Stage-2 地址转换和虚拟中断。

## 16 周安排

| 周 | 主题 | 核心结果 |
|---|---|---|
| 1 | 实验环境 | 跑通 Rust、QEMU、GDB、交叉编译与串口日志 |
| 2 | 虚拟化概念 | 解释 EL0–EL2、Trap、VM Exit、vCPU、Stage-2 |
| 3 | 启动原理 | 画出固件到内核入口的启动时序图 |
| 4 | ArceOS 入门 | 运行至少 3 个官方示例 |
| 5 | ArceOS 组件 | 整理任务、内存、驱动、文件系统组件依赖图 |
| 6 | ArceOS 编程 | 编写多任务、同步与定时器应用 |
| 7 | ArceOS 启动 | 用 GDB 和日志追踪完整内核启动路径 |
| 8 | AxVisor 入门 | 跑通官方配置，定位架构与关键入口 |
| 9 | vCPU 生命周期 | 追踪 VM create → run → exit → resume |
| 10 | 内存虚拟化 | 修改并验证 GPA/HPA 和 Stage-2 映射 |
| 11 | 中断与设备 | 追踪虚拟定时器、UART 或 MMIO 路径 |
| 12 | Linux 客体 | Linux 进入 shell，init 自动拉起两个程序 |
| 13 | RTOS 客体 | RTOS 调度器运行两个周期任务 |
| 14 | 多客体运行 | Linux + RTOS 同时稳定运行 30 分钟 |
| 15 | 自动化与隔离 | 一键测试并验证单客体故障隔离 |
| 16 | 毕业演示 | 完成仓库、架构图、演示和技术讲解 |

## 每周固定节奏

- 读（2 小时）：文档和本周关键源码。
- 画（1 小时）：调用链、启动链或数据结构关系图。
- 跑（3 小时）：官方示例，保存命令与原始日志。
- 改（4–5 小时）：修改代码、配置或镜像，完成对照实验。
- 讲（1 小时）：写周报，回答“发生了什么、为什么、如何证明”。

## 建议仓库结构

```text
hypervisor-lab/
├── docs/
│   ├── boot-flow.md
│   ├── arceos-notes.md
│   └── axvisor-notes.md
├── configs/
│   ├── linux.toml
│   └── rtos.toml
├── guests/
│   ├── linux/
│   │   ├── app-a/
│   │   ├── app-b/
│   │   └── initramfs/
│   └── rtos/
├── scripts/
│   ├── build-all.sh
│   ├── run.sh
│   └── smoke-test.sh
├── logs/
└── README.md
```

## 学习原则

- 先跑官方最小示例，再改变一个变量；不要一开始同时移植架构、设备和 RTOS。
- 每次保留完整命令、配置、commit 与串口日志，保证实验可复现。
- 遇到启动失败，按“最后一条成功日志 → 当前异常级/PC → 镜像布局 → 页表 → 中断/设备”顺序排查。
- RTOS 选择必须以 AxVisor 当前实际支持为准。先跑通官方支持的客体，再尝试迁移 RT-Thread 或 Zephyr。
