littlebot
Published on 2025-04-08 / 3 Visits
0

【源码】基于C++的Cranberry操作系统开发项目

项目简介

Cranberry OS是一个基于C++语言开发的轻量级操作系统项目,主要用于探索操作系统开发与裸机编程。该项目基于ARM架构的AArch64指令集,以Raspberry Pi 3B为目标硬件平台,具有一定的教育意义,为操作系统开发学习提供了实践平台。

项目的主要特性和功能

  1. 启动与硬件初始化:实现从低级汇编到高级C++的启动流程,完成硬件初始化、MMU启用和虚拟内存管理。
  2. 内存管理:基于页表实现虚拟内存管理,支持物理内存到虚拟地址空间的映射。
  3. 系统调用与进程管理:提供基本系统调用接口,如UART写入、进程创建与退出等,支持多进程管理和调度。
  4. 设备树解析:支持解析设备树以获取硬件信息,便于硬件设备初始化和系统环境配置。
  5. 异常处理:实现基本异常处理机制,包含异常级别切换和异常向量处理。
  6. 单元测试框架:具备基于C++的单元测试框架,用于验证内核模块和功能的正确性。

安装使用步骤

前提条件

确保已安装以下工具: - Clang(支持C++20) - CMake(3.18及以上版本) - QEMU(用于模拟/调试)

若要在硬件上运行,还需Raspberry Pi 3B。目前暂不支持GCC和其他型号的Raspberry Pi板。

可选条件

安装Clang - tidy。

构建项目

项目支持使用VSCode和MS的CMake Tools扩展进行编辑。使用该扩展选择“Clang RPi3 Baremetal”工具包以正确构建项目。

运行项目

QEMU模拟

在包含内核镜像文件的build\kernel文件夹中,运行以下命令: qemu-system-aarch64 -M raspi3b -kernel kernel8.img -serial null -serial stdio -dtb <path>/bcm2710-rpi-3-b.dtb

真实硬件运行

  1. build/kernel目录下的kernel8.img复制到卡上。
  2. 将卡插入Raspberry Pi。
  3. 用USB - to - TTL电缆连接Raspberry Pi和PC。
  4. 启动终端模拟器,以115200的速度连接到电缆的COM端口:
    • Windows:可使用PuTTY。
    • Linux:使用minicom -b 115200 -D /dev/ttyUSB0(假设USB - to - TTL电缆显示为ttyUSB0)。
  5. 为Raspberry Pi通电。

调试项目

在QEMU中运行内核时,添加-s选项以启用远程gdb服务器,还可添加-S选项让QEMU在第一条指令处暂停,等待连接。在VSCode中使用CodeLLDB扩展可进行调试,以下启动配置可用: json { "type": "lldb", "request": "custom", "name": "Connect to QEMU", "targetCreateCommands": [ "target create ${workspaceFolder}/build/kernel/kernel8.elf" ], "processCreateCommands": [ "gdb - remote <ip or localhost>:1234" ] } 若在Windows机器上使用Win32 QEMU和LLDB调试,可能会因LLDB的路径处理问题找不到源文件。可从WSL启动VSCode以使用Linux版本的LLDB解决此问题。若需在MMU启用前调试启动过程,需告知调试器在不同位置加载符号,例如: target modules load --file <path>/kernel8.elf .text.boot 0x80000 其中<path>为elf文件的路径,可通过image list命令查找。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】