项目简介
Cranberry OS是一个基于C++语言开发的轻量级操作系统项目,主要用于探索操作系统开发与裸机编程。该项目基于ARM架构的AArch64指令集,以Raspberry Pi 3B为目标硬件平台,具有一定的教育意义,为操作系统开发学习提供了实践平台。
项目的主要特性和功能
- 启动与硬件初始化:实现从低级汇编到高级C++的启动流程,完成硬件初始化、MMU启用和虚拟内存管理。
- 内存管理:基于页表实现虚拟内存管理,支持物理内存到虚拟地址空间的映射。
- 系统调用与进程管理:提供基本系统调用接口,如UART写入、进程创建与退出等,支持多进程管理和调度。
- 设备树解析:支持解析设备树以获取硬件信息,便于硬件设备初始化和系统环境配置。
- 异常处理:实现基本异常处理机制,包含异常级别切换和异常向量处理。
- 单元测试框架:具备基于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
真实硬件运行
- 将
build/kernel
目录下的kernel8.img
复制到卡上。 - 将卡插入Raspberry Pi。
- 用USB - to - TTL电缆连接Raspberry Pi和PC。
- 启动终端模拟器,以
115200
的速度连接到电缆的COM端口:- Windows:可使用PuTTY。
- Linux:使用
minicom -b 115200 -D /dev/ttyUSB0
(假设USB - to - TTL电缆显示为ttyUSB0)。
- 为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】