100% 自研代码 | 无 Linux 内核代码 | 无第三方内核组件
一个完全从零构建的 x86_64 hobby 操作系统,涵盖引导、分页、进程管理、系统调用、VFS、信号、管道等核心子系统。
# 1. 安装依赖
sudo apt install -y build-essential xorriso grub-pc-bin mtools qemu-system-x86
# 2. 构建并运行
git clone https://github.com/zhan1206/aurora-os.git
cd AuroraOS
make iso
make run| 环境 | 状态 | 说明 |
|---|---|---|
| Ubuntu 22.04+ | 推荐 | 原生运行,全功能支持 |
| Debian 12+ | 支持 | 与 Ubuntu 类似 |
| WSL2 (Windows) | 支持 | 通过 WSL Ubuntu 运行 |
| macOS | 支持 | 需要安装交叉编译器和 QEMU |
| Arch Linux | 支持 | 通过 pacman 安装依赖 |
| 工具 | 最低版本 | 用途 |
|---|---|---|
x86_64-elf-gcc |
12.0+ | 交叉编译器(推荐) |
或 gcc |
12.0+ | 系统编译器(需 x86_64 架构) |
x86_64-elf-ld 或 ld |
2.38+ | 链接器 |
| GNU Make | 4.0+ | 构建系统 |
| 工具 | 最低版本 | 用途 |
|---|---|---|
qemu-system-x86_64 |
6.0+ | 虚拟机运行 |
grub-mkrescue |
2.06+ | 创建 ISO 镜像 |
| 工具 | 用途 |
|---|---|
| Python 3.8+ | 嵌入式文件生成脚本 |
| nasm | 汇编语言测试(可选) |
# 安装依赖
sudo apt update
sudo apt install -y build-essential xorriso grub-pc-bin mtools qemu-system-x86 python3
# 安装交叉编译器(推荐)
# 方法 1: 从 apt 安装
sudo apt install -y gcc-x86-64-linux-gnu binutils-x86-64-linux-gnu
# 创建符号链接
sudo ln -sf /usr/bin/x86_64-linux-gnu-gcc /usr/local/bin/x86_64-elf-gcc
sudo ln -sf /usr/bin/x86_64-linux-gnu-ld /usr/local/bin/x86_64-elf-ld
# 方法 2: 手动构建交叉编译器(参考 osdev wiki)
# https://wiki.osdev.org/GCC_Cross-Compiler
# 构建项目
git clone https://github.com/zhan1206/aurora-os.git
cd AuroraOS
make # Release 构建
make iso # 生成 ISO 镜像# 1. 在 Windows 上安装 WSL2
# wsl --install -d Ubuntu-22.04
# 2. 进入 WSL 终端
wsl
# 3. 运行快速安装脚本
cd /mnt/d/自制操作系统
chmod +x scripts/wsl-setup.sh
./scripts/wsl-setup.sh
# 4. 构建项目
make iso# 安装 Homebrew(如未安装)
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装依赖
brew install x86_64-elf-gcc x86_64-elf-binutils qemu xorriso mtools make
# 构建项目
git clone https://github.com/zhan1206/aurora-os.git
cd AuroraOS
make isomake # Release 构建(-O2 优化)
make debug # Debug 构建(-g -O0,含调试符号)
make iso # 构建 + 生成 bootable ISO
make run # 构建 ISO + 在 QEMU 中运行
make clean # 清理所有构建产物
make help # 显示帮助信息使用 Docker 在隔离环境中构建,无需手动安装依赖:
# 构建 Docker 镜像
docker build -t aurora-os .
# 运行构建并提取 ISO 产物
docker run --rm -v $(pwd)/output:/output aurora-os项目同时支持 Makefile 和 CMake 两种构建系统:
# 配置并构建(Release 模式)
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Debug 模式
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build
# 生成 ISO 镜像
cmake --build build --target iso
# 在 QEMU 中运行
cmake --build build --target run
# 导出 compile_commands.json(供 clang-tidy 等工具使用)
cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON注意: Makefile 和 CMake 两种构建方式互不冲突,可根据个人偏好选用。
# 一键构建并运行
make run
# 或手动运行
qemu-system-x86_64 -m 256M -cdrom os.iso| 参数 | 说明 |
|---|---|
-m 256M |
分配 256MB 内存 |
-cdrom os.iso |
从 ISO 镜像启动 |
-nographic |
无图形模式(串口输出) |
-no-reboot |
关机后不重启 |
-d int,cpu_reset |
调试中断和 CPU 复位 |
-s -S |
启动 GDB 调试服务器(端口 1234) |
# 启动带调试符号的 QEMU
make debug
make iso
qemu-system-x86_64 -m 256M -cdrom os.iso -s -S
# 在另一个终端连接 GDB
x86_64-elf-gdb build/kernel.elf \
-ex "target remote localhost:1234" \
-ex "break kmain" \
-ex "continue"AuroraOS
├── kernel/ # 内核源码(30 个 C 文件,22 个头文件,2 个汇编)
│ ├── entry.S # Multiboot1 入口 + 32→64 位模式自切换
│ ├── mem.c/h # 伙伴系统物理页分配器 + Slab 内核堆
│ ├── pagetable.c/h # x86_64 四级页表 + COW 写时复制
│ ├── sched.c/h # 轮转调度器 + 进程树 + 五状态机
│ ├── syscall.c/h # 22 个系统调用 + 6 参数 ABI
│ ├── signal.c/h # POSIX 信号框架(5 种信号)
│ ├── vfs.c/h # VFS 层 + dentry 缓存
│ ├── console.c/h # VGA 文本模式 + ANSI + 行编辑
│ ├── keyboard.c # PS/2 键盘驱动 + E0 键处理
│ ├── selftest.c # 内核自测试(15 项)
│ └── include/ # 公共头文件
├── arch/x86_64/ # 架构相关汇编(10 个文件)
├── userspace/ # 用户态程序
├── docs/ # 设计文档 + API 文档 + 调试报告
├── scripts/ # 构建辅助脚本
└── Makefile # 构建系统
详细架构说明见 docs/architecture.md。
- 伙伴系统: MAX_ORDER=10,管理 256 MiB 物理内存
- Slab 分配器: 8 个大小类(32B–4096B),小对象高效复用
- E820 解析: 支持 Multiboot1 和 Multiboot2 内存信息
- COW: 写时复制页面克隆,按需分配
- ASLR: 地址空间布局随机化(xorshift64 PRNG)
- 五状态模型: RUNNING → READY → BLOCKED → ZOMBIE → DEAD
- VRFair 调度器: CFS/EEVDF 启发式调度,基于 vruntime 公平调度
- 进程树: 父子进程链表 + init 收养孤儿
- 阻塞 waitpid: 真正阻塞等待,子进程退出时唤醒父进程
- Fork: COW 页面克隆 + 完整寄存器状态复制
- SMP 支持: 多核 CPU 支持,per-CPU 运行队列,负载均衡
| 类别 | 系统调用 |
|---|---|
| I/O | read, write, open, close, fstat, lseek, getdents |
| 进程 | fork, execve, exit, getpid, waitpid |
| 内存 | mmap, mprotect |
| 信号 | kill, sigaction, sigreturn |
| 管道 | pipe |
| 文件描述符 | dup, dup2 |
| 文件系统 | mkdir, rmdir, unlink, rename, chmod, stat |
| 网络 | socket, bind, connect, listen, accept, send, recv, sendto, recvfrom, shutdown, getsockname |
| 时间 | gettimeofday, nanosleep, times |
| 设备控制 | ioctl |
| I/O 多路复用 | poll |
详见 docs/api.md。
- VFS 层: 统一文件系统接口,dentry 缓存 + LRU 回收
- RamFS: 内存文件系统(读/写/创建/目录操作)
- EXT2: 持久化文件系统(基本读/写/目录操作 + 日志 + fsck)
- devtmpfs: 设备文件系统(受 CoolPotOS 启发)
/dev/null- 数据黑洞/dev/zero- 零字节源/dev/console- 系统控制台/dev/tty- 当前终端/dev/random- 硬件随机数(RDRAND,阻塞)/dev/urandom- 硬件随机数(RDRAND,非阻塞)
- procfs: 虚拟文件系统(受 CoolPotOS 启发)
/proc/cpuinfo- CPU 信息/proc/meminfo- 内存统计/proc/uptime- 系统运行时间/proc/version- 内核版本/proc/mounts- 挂载点信息/proc/interrupts- IRQ 向量计数/proc/filesystems- 支持的文件系统类型/proc/cmdline- 内核命令行参数/proc/kmsg- 内核日志环形缓冲区/proc/self/stat- 当前进程状态/proc/self/maps- 当前进程内存映射/proc/self/cmdline- 当前进程命令行
- 管道: 匿名管道,环形缓冲区(4096 字节)
- TCP/IP 协议栈: 完整的网络协议支持
- ARP(地址解析协议)
- IPv4(互联网协议)
- ICMP(互联网控制消息协议,含 ping 支持)
- UDP(用户数据报协议)
- TCP(传输控制协议,含 listen/accept 服务器端支持)
- Socket API: 11 个 Berkeley 风格 socket 系统调用
- VirtIO 网络驱动: 支持 QEMU VirtIO 网络设备
- 信号类型: SIGINT(2), SIGKILL(9), SIGSEGV(11), SIGTERM(15), SIGCHLD(17)
- 用户态 handler: sigframe 压栈 + 跳板代码 + sigreturn 恢复
- 默认动作: 终止/忽略/核心转储
- ASLR: 地址空间布局随机化
- Stack Protector: 栈溢出保护(canary 检查)
- SMAP/SMEP: 内核访问/执行用户空间内存保护
- seccomp: 系统调用过滤
- Capability: 权能安全机制
- 内核模块签名: 模块签名验证(受 CoolPotOS 启发)
- 整数溢出保护: 关键内存分配路径溢出检查
- NULL 指针保护: 系统调用关键路径 NULL 检查
- 性能计数器: 上下文切换、系统调用、缺页、COW、IRQ 等指标
- IRQ 追踪: 256 向量中断计数器(受 CoolPotOS /proc/interrupts 启发)
- TSC 校准: 基于 PIT 的高精度时间戳计数器校准
- 内核日志环形缓冲: 持久化日志存储,支持 /proc/kmsg 导出
- ELF 可重定位模块加载: 支持 .ko 文件动态加载
- 符号解析: 内核符号表 + 模块间符号引用
- x86_64 重定位: R_X86_64_64/PC32/32/32S/RELATIVE
- 模块签名: HMAC 风格签名验证(可选)
- VGA 文本模式: 80×25 彩色字符
- ANSI 转义序列: SGR 颜色 + 光标控制 + 清屏
- 行编辑: 光标移动、插入/删除、Home/End
- 历史记录: 32 条环形缓冲区,上下箭头导航
- Tab 补全: 命令名和文件名自动补全
- 主题系统: 3 种模式(Dark/Light/High Contrast)
- 无障碍: 高对比度模式、减少动画
| 类别 | 命令 | 功能 |
|---|---|---|
| 系统信息 | help |
显示帮助 |
about |
关于 AuroraOS | |
sysinfo |
系统仪表盘 | |
uname |
系统信息 | |
uptime |
系统运行时间 | |
date |
显示日期时间 | |
free |
内存使用情况 | |
df |
磁盘空间使用 | |
clear |
清屏 | |
welcome |
显示欢迎界面 | |
| 进程管理 | ps |
进程列表 |
exec <prog> |
执行程序 | |
wait |
等待子进程 | |
kill <pid> |
发送信号 | |
exit |
退出 Shell | |
| 文件系统 | ls / ll / la |
文件列表 |
cat <file> |
查看文件内容 | |
echo <text> |
打印文本 | |
touch <file> |
创建空文件 | |
rm <file> |
删除文件 | |
cp <src> <dst> |
复制文件 | |
pwd |
当前工作目录 | |
cd <dir> |
切换目录 | |
mkdir <dir> |
创建目录 | |
wc <file> |
行/词/字符计数 | |
head <file> |
查看文件头部 | |
tail <file> |
查看文件尾部 | |
| 内存 | mem |
内存使用情况 |
| 调试 | perf |
性能统计 |
mod list/load |
模块管理 | |
env |
环境变量 | |
which |
命令定位 | |
| 个性化 | theme [dark|light|hc] |
切换主题 |
a11y [hc|motion] |
无障碍设置 | |
history |
命令历史 | |
lock |
锁屏 |
A: 需要安装交叉编译器。运行 which x86_64-elf-gcc 检查。如果未安装,参考环境要求中的安装方法。
A: macOS 上的 GRUB 工具可能不完整。建议使用 brew install xorriso mtools 并确保 grub-mkrescue 在 PATH 中。
A: 检查 QEMU 版本(qemu-system-x86_64 --version),确保 >= 6.0。尝试添加 -vga std 参数。
A: 将 os.iso 写入 U 盘:
sudo dd if=os.iso of=/dev/sdX bs=4M status=progress注意: 当前版本仅支持传统 BIOS 启动,不支持 UEFI。
A: 1) 在 kernel/syscall.h 中添加编号;2) 在 kernel/syscall.c 中实现处理函数;3) 在 handle_syscall 的 switch 中添加 case。
A: 实现 struct super_block_operations 和 struct inode_operations 接口,在 kernel/fs.c 中注册。
A: 构建 Debug 版本:make debug && make iso。日志级别可通过 LOG_LEVEL 宏控制。
AuroraOS/
├── kernel/ # 内核源码
│ ├── include/ # 公共头文件(theme, errno, portio, log 等)
│ ├── *.c, *.h # 核心模块(30+ C 文件)
│ └── *.S # 汇编文件(entry.S, irq_handler.S)
├── arch/x86_64/ # 架构相关汇编
│ ├── context.S # 上下文切换
│ ├── syscall.S # 系统调用入口/返回
│ ├── gdt.S, tss.S # GDT + TSS(IST 独立栈)
│ └── ... # 异常处理、缺页、键盘中断桩
├── userspace/ # 用户态程序
│ ├── libc.c # 自研 libc
│ ├── shell.c # 用户态 Shell
│ ├── hello.c # 测试程序
│ └── Makefile # 用户态构建
├── docs/ # 文档
│ ├── architecture.md # 系统架构设计文档
│ ├── api.md # 系统调用 API 文档
│ ├── modules.md # 模块功能说明
│ ├── user_manual.md # 用户手册
│ └── debug_report.md # 调试报告
├── scripts/ # 构建辅助脚本
│ ├── wsl-setup.sh # WSL 环境安装
│ ├── embed_binary.py # 二进制文件嵌入
│ └── run_qemu_test.py # QEMU 自动化测试
├── .github/workflows/ # CI/CD
│ └── build.yml # GitHub Actions 构建
├── Makefile # 构建系统
├── linker.ld # 链接脚本
├── README.md # 本文件
├── CHANGELOG.md # 版本更新日志
├── CONTRIBUTING.md # 贡献指南
└── LICENSE # MIT 许可证
项目内置 16 项自测试,在启动时自动运行:
======== Kernel Self-Test ========
--- Buddy Allocator Tests ---
[PASS] alloc_page/free_page single page
[PASS] stress alloc: N pages, all freed
[PASS] re-alloc after stress
--- Slab Allocator Tests ---
[PASS] kmalloc/kfree all size classes
[PASS] kmalloc(0) handled
--- Page Table Tests ---
[PASS] get_kernel_cr3
[PASS] clone_current_pml4 (COW deep copy)
[PASS] free_pagetable (COW-aware)
--- Scheduler Tests ---
[PASS] current task exists
[PASS] create_task
[PASS] waitpid + exit code collection
--- VFS / RamFS Tests ---
[PASS] root filesystem mounted
[PASS] vfs_lookup(/)
[PASS] vfs_lookup nonexistent returns NULL
--- Pipe Tests ---
[PASS] sys_pipe create
[PASS] pipe write + read roundtrip
======== All Tests Passed ========
GitHub Actions 在每次 push 和 PR 时自动执行:
- 安装依赖(交叉编译器 + GRUB + QEMU)
- Release + Debug 双构建验证
- QEMU 启动测试 + 自检验证
- 上传 ISO 构建产物
欢迎贡献!请阅读 CONTRIBUTING.md 了解:
- 代码风格规范
- 提交 PR 流程
- 如何添加新功能
- 测试要求
详见 CHANGELOG.md。
- 100% 自研: 所有代码从零编写,不包含 Linux/BSD/任何第三方内核代码
- 无外部依赖: 仅依赖 GCC/LD 交叉编译器 + GRUB2 引导器(行业标准)
- 模块化: 清晰的模块边界,头文件接口明确
- 可测试: 内置自测试框架,CI 自动化验证
- 可移植: 支持 Linux/WSL/macOS 多平台开发
AuroraOS 是一个实验性的业余操作系统项目 (Hobby OS),旨在用于学习和研究目的。
- 本软件按"原样"提供,不提供任何形式的明示或暗示担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。
- 在任何情况下,作者或版权持有人均不对因使用本软件而产生的任何索赔、损害或其他责任负责。
- 本操作系统不适用于生产环境、关键任务系统或任何可能造成人身伤害或财产损失的场景。
- 用户应自行承担在虚拟机或物理硬件上运行本操作系统的所有风险。
详细的许可条款请参阅 LICENSE 文件。
MIT License — 详见 LICENSE
- OSDev Wiki — 操作系统开发知识库
- Intel® 64 and IA-32 Architectures Software Developer Manuals
- AMD64 Architecture Programmer's Manual
"Simplicity is the ultimate sophistication." — Leonardo da Vinci