Skip to content

Awesome-Embedded-Learning-Studio/Cinux

Repository files navigation

🐧 Cinux

x86_64 操作系统 · 现代 C++ 实现

License: MIT C++17 GCC QEMU

一个基于 x86_64 架构的操作系统——从 Bootloader 到 GUI 桌面,全链路实现。

Note: 本项目迁移自教程操作系统 Cinux


✨ 项目简介

Cinux 是一个基于 x86_64 架构的操作系统,采用现代 C++ 编写。

💡 为什么叫 Cinux?

  • C/C++'s Linux, 也就是尝试重新再写一个基于C/C++的Linux
  • CharlieChen's *nux(逃)

🖼️ Screenshots

GUI Desktop Shell

GUI 桌面环境(左) · CLI 终端环境(右)

Boot to Shell Multi Terminal

从启动到 Shell(左) · 多终端窗口(右)

Parallel Work Filesystem

多终端并发执行(左) · Ext2 文件操作(右)


🌟 特性亮点

🧠 完整 x86_64 内核 Bootloader → Mini Kernel → Big Kernel → User Space → GUI 桌面,全链路打通

📁 Ext2 文件系统读写 VFS 抽象层 + AHCI SATA 驱动,支持 touch/mkdir/rm/cat/ls/cd/stat

🖥️ GUI 桌面环境 Canvas 双缓冲 + 窗口管理器 + PS/2 鼠标驱动,支持拖动 / Z-order / 桌面图标

多进程 & 多终端 fork/execve/CoW 页表复制 + Pipe IPC,每个终端绑定独立 shell 进程

👨‍💻 Ring 3 用户态 Shell 22 个系统调用,内置 echo / help / clear / ls / cat / cd / pwd / stat / mkdir / rm / touch

🧪 测试驱动开发 自研轻量测试框架,Host 端 mock 测试 + QEMU 集成内核测试双轨并行

🔧 现代 C++17 实现 constexpr 编译期生成 GDT/IDT / RAII 锁管理 / enum class 驱动接口 / 支持用户态内核态 SSE (故支持-O2 Release构建)


🚀 快速开始

前置要求

本项目支持最新的 g++ 15.2编译,使用CMake构建项目,您需要安装的是

# Ubuntu/Debian
sudo apt install -y gcc g++ binutils qemu-system-x86_64 cmake

构建 & 运行

🚀🚀🚀 在WSL 或者任何您喜欢的发行版中跑起来它们!🚀🚀🚀

Feature Help: 不知道有没有好心人愿意移植到Windows上可编译,如果有所变动欢迎提交您的PR!

Step 1️⃣: 配置

#  配置为GUI(默认)(Release 模式),也是最推介的!🚀
cmake -B build -DCMAKE_BUILD_TYPE=Release -S .

# 或者,默认(速度稍慢)
cmake -B build  -S .

# 或者你fork改炸了准备使用VSCode调试
cmake -B build -DCMAKE_BUILD_TYPE=Debug -S .

# 带测试的配置
cmake -B build -DCINUX_BUILD_TESTS=ON -S .

# CLI运行环境
cmake -B build -DCINUX_GUI=OFF -S .   

Step 2️⃣: 构建

cmake --build build -j$(nproc)

Step 3️⃣: Cinux,启动!

cmake --build build --target run # 跑内核本体, 默认Launch的是VNC显示,您需要VNC!
cmake --build build --target test_host           # Host 端单元测试(CTest)
cmake --build build --target run-kernel-test     # QEMU 内核测试(自动退出)

🧪 验证内核改动用哪个?

  • run-kernel-test(首选):QEMU 内真实内核环境跑完整测试套件(ext2 读写 / syscall / fork-exec / 路径操作 / GUI 等,~660 项),经 isa-debug-exit 自动退出并报告 pass/fail。改动内核代码后用这个确认
  • test_host:host 端 mock 测试,快但不跑真实内核,适合快速迭代逻辑。
  • run:交互式 GUI 预览(VNC),不做自动断言,仅用于人肉观察运行效果。

调试模式 1:GDB大牛请走这里

# 终端 1:启动 QEMU + GDB server
make run-debug

# 终端 2:连接 GDB
gdb build/kernel.elf
(gdb) target remote :1234
(gdb) break kernel_main
(gdb) continue

调试模式 2:VSCode大牛请走这里(是的别坐牢,如果不喜欢GDB!)

Step 1: 一键脚本构建并启动 QEMU 调试模式(Debug 构建 + GDB stub 监听 :1234):

bash scripts/launch_qemu_debug.sh

Step 2: 确认 .vscode/launch.json 中已有如下配置:

PS:大内核需要改一下ELF,这个麻烦自己手调。

{
    "name": "QEMU 调试 (mini kernel)",
    "type": "cppdbg",
    "request": "launch",
    "program": "${workspaceFolder}/build/kernel/mini/mini_kernel",
    "MIMode": "gdb",
    "miDebuggerServerAddress": "localhost:1234",
    ...
}

Step 3: 在 VSCode 中按 F5,选择对应的调试配置即可开始图形化断点调试。


🛠️ 技术栈亮点

🔍 现代 C++ 内核开发
  • C++17 特性constexpr / if constexpr / 结构化绑定
  • 编译期魔法:GDT/IDT 描述符 constexpr 生成,桌面图标 constexpr 像素数据
  • 类型安全enum class 作为 API 一等公民
  • RAII 资源管理:Spinlock::guard、InterruptGuard、锁自动释放
  • 零标准库依赖: freestanding,自实现 memset/memcpy/string
🧪 自研测试框架
// 极简 API
TEST("测试名称") {
    ASSERT_EQ(actual, expected);
    ASSERT_TRUE(condition);
}

// 双轨测试策略
// Host 端:mock 硬件,验证逻辑正确性(快速迭代)
// Kernel 端:QEMU 运行,验证真实硬件行为(端到端)

🤝 参与贡献

欢迎贡献!你可以:

  • 🐛 修复 Bug
  • ✍️ 完善文档
  • 💡 提出改进建议
  • 📢 分享你的学习经验

📄 许可证

本项目采用 MIT License 开源协议。


🙏 致谢


⭐ 如果这个项目对你有帮助,请给一个 Star!

Made with ❤️ by CharlieChen114514

About

Cinux, C/C++'s version of X64 Operating System, using modern feature in C/C++!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors