Skip to content

Repository files navigation

F7LY OS

F7LY OS 是一个使用 C++ 编写的双架构教学内核,面向操作系统课程、系统能力训练和 OS 比赛。项目从 xv6 的教学内核思路出发,逐步扩展了 Linux ABI、完整用户态程序加载、文件系统、网络和多种硬件平台支持。

目前,F7LY 可以在 RISC-V64 和 LoongArch64 的 QEMU 环境中运行,也支持 VisionFive 2 与 2K1000LA 实机。项目以结构清晰、便于调试和持续演进为目标,不面向生产环境。

F7LY OS 架构

项目特点

  • 双架构与多平台:支持 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-riscv64qemu-system-loongarch64
  • GDB:gdb-multiarchloongarch64-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-qemu

make 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-rvkernel-rv.binkernel-lakernel-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 的设计和实现参考或使用了以下项目:

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages