F7LY OS 是一个使用 C++ 编写的双架构教学内核,面向操作系统课程、系统能力训练和 OS 比赛。项目从 xv6 的教学内核思路出发,逐步扩展了 Linux ABI、完整用户态程序加载、文件系统、网络和多种硬件平台支持。
目前,F7LY 可以在 RISC-V64 和 LoongArch64 的 QEMU 环境中运行,也支持 VisionFive 2 与 2K1000LA 实机。项目以结构清晰、便于调试和持续演进为目标,不面向生产环境。
- 双架构与多平台:支持 RISC-V64、LoongArch64,以及 QEMU、VisionFive 2、2K1000LA 四种平台画像。
- C++ 内核:使用 C++23 freestanding 环境,禁用异常和 RTTI,并提供内核所需的 C++ runtime 与 EASTL 容器支持。
- Linux ABI:采用 Linux asm-generic 风格的系统调用号,可运行 BusyBox、musl/glibc 动态程序和大量 LTP 测例。
- 进程与内存:支持多核调度、进程与线程、信号、futex、ELF 动态装载、VMA、mmap 和共享内存。
- 文件与网络:以 ext4 为主要文件系统,保留 FAT32 支持;提供 VFS、VirtIO Block/Net、socket、epoll、eventfd、memfd 等能力。
- 平台化设备模型:架构机制、平台资源和设备驱动分层组织,同一套通用内核可组合不同开发板和设备后端。
| 类别 | 实现 |
|---|---|
| 语言 | C++23、C、Assembly |
| 架构 | RISC-V64、LoongArch64 |
| 构建 | GNU Make、GNU 交叉编译工具链 |
| 运行环境 | QEMU、VisionFive 2、2K1000LA |
| 文件系统 | VFS、lwext4、FAT32 |
| 网络 | Open-NPStack、BSD Socket API |
| 测试与调试 | LTP、BusyBox、GDB |
F7LY
├── kernel/ # 内核源码
│ ├── boot/ # 架构启动入口
│ ├── devs/ # 通用设备与 VirtIO 协议
│ ├── fs/ # VFS、ext4、FAT32 和块缓存
│ ├── hal/ # CPU、CSR 和上下文切换
│ ├── libs/ # 基础库与 C++ runtime
│ ├── mem/ # 页表、物理内存、VMA、heap 和 slab
│ ├── net/ # 网络协议栈与网卡驱动
│ ├── platform/ # 开发板资源与平台后端
│ ├── proc/ # 进程、线程、调度、信号和 futex
│ ├── sys/ # Linux ABI 系统调用
│ └── trap/ # 异常、中断和用户态返回
├── user/ # initcode、系统调用封装和回归入口
├── mk/ # 构建规则与平台画像
├── scripts/ # 镜像、实机和宿主机辅助脚本
├── scoreboard/ # 四种架构/libc 组合的评测进度
├── tools/ # LTP 分析等开发工具
├── debug/gdb/ # GDB 调试配置
├── thirdparty/ # EASTL 等第三方依赖
└── docs/ # 设计文档、答辩材料和开发记录
更完整的模块边界和设计约束见 项目架构导航。
推荐使用 Ubuntu 24.04 或等价 Linux 环境,需要准备:
- GNU Make 与 Bash
- RISC-V 交叉工具链:
riscv64-linux-gnu-* - LoongArch 交叉工具链:
loongarch64-linux-gnu-* - QEMU:
qemu-system-riscv64、qemu-system-loongarch64 - GDB:
gdb-multiarch、loongarch64-linux-gnu-gdb
LoongArch 工具链可参考 LoongsonLab/oscomp-toolchains-for-oskernel。
项目使用画像选择架构和平台:
| 画像 | 目标环境 |
|---|---|
riscv-qemu |
RISC-V QEMU virt |
loongarch-qemu |
LoongArch QEMU virt |
riscv-visionfive2 |
StarFive VisionFive 2 |
loongarch-2k1000 |
Loongson 2K1000LA |
构建两种 QEMU 评测内核:
make all构建单个画像:
make build PROFILE=riscv-qemu
make build PROFILE=loongarch-qemu运行 QEMU 评测环境:
make run PROFILE=riscv-qemu
make run PROFILE=loongarch-qemumake run 默认使用初赛磁盘。运行决赛完整 rootfs 时显式指定:
make run PROFILE=riscv-qemu QEMU_DISK=final
make run PROFILE=loongarch-qemu QEMU_DISK=final进入交互式 shell:
make shell PROFILE=riscv-qemu
make shell PROFILE=loongarch-qemu查看全部画像或清理构建产物:
make profiles
make clean内核产物为仓库根目录下的 kernel-rv、kernel-rv.bin、kernel-la 和 kernel-la.bin。QEMU 所需磁盘镜像放在 images/;初赛镜像可由运行脚本自动准备,决赛镜像需要人工放置。
启动 QEMU 的 GDB stub:
make debug PROFILE=riscv-qemu
make debug PROFILE=loongarch-qemu在另一个终端连接:
gdb-multiarch -x debug/gdb/riscv.gdb
loongarch64-linux-gnu-gdb -x debug/gdb/loongarch.gdb完整的构建、镜像、QEMU 日志和实机调试方法见 开发与调试指南。
用户态 initcode 会直接启动回归套件,覆盖 basic、BusyBox、libcbench、Lua、网络测试和 LTP 等项目。评测进度按 RISC-V/LoongArch 与 musl/glibc 四种组合维护在 scoreboard。
历史文档可能落后于当前实现。了解当前行为时,请以源码、构建配置和最近提交为准。
F7LY 的设计和实现参考或使用了以下项目:
- xv6-riscv:教学内核结构与基础设计思想
- XN6 / OSKernel2024-2k1000la-xv6:LoongArch 支持参考
- EASTL:C++ 容器库
- lwext4:ext4 文件系统实现
- Open-NPStack:网络协议栈
- oskernel2023-avx:VisionFive 2 与 SD 卡驱动参考
