SimpleKernel 为了保证在各个平台上的可用性,选择了较为通用的工具链,主要分为四个部分:
-
构建系统
使用 CMake 对代码进行管理,同时控制编译选项。支持 CMake Presets 进行预配置管理。
-
内核的编译
使用 GCC 工具链进行交叉编译,支持 RISC-V 64、AArch64 两种架构。
-
模拟器
主要使用 QEMU 作为统一的模拟器,支持所有目标架构。
-
辅助工具
包括 Docker 容器化构建、自动化脚本、代码检查工具等。
SimpleKernel 采用现代化的 CMake 构建系统,具有以下特点:
-
./CMakeLists.txt
项目的根 CMake 文件,设置最小 CMake 版本要求(3.27+),定义项目信息,并通过模块化的方式组织构建配置:
- 导入项目配置 (
project_config) - 导入构建函数 (
functions) - 导入第三方依赖 (
3rd) - 导入编译配置 (
compile_config) - 添加子目录 (
src/,test/,doc/)
- 导入项目配置 (
-
./src/CMakeLists.txt
规定 GCC 的编译选项,指定生成的二进制文件名称,并管理内核各模块的依赖关系。
-
./src/*/CMakeLists.txt
各个模块(如驱动、架构相关代码等)的具体编译规则。
项目使用 CMakePresets.json 提供预定义的构建配置:
- build_riscv64: RISC-V 64 架构构建配置
- build_aarch64: AArch64 架构构建配置
位于 ./cmake/ 目录下的模块文件:
- 工具链文件:
riscv64-gcc.cmake,aarch64-gcc.cmake- 定义各架构的交叉编译工具链 - 3rd.cmake: 管理第三方依赖库
- project_config.cmake: 项目配置和变量定义
- compile_config.cmake: 编译选项和标志配置
- functions.cmake: 通用 CMake 函数和宏定义
- replace_kv.cmake: 模板替换功能
- clang.cmake: Clang 编译器支持
# 使用预设配置构建
cmake --preset build_riscv64
cd build_riscv64
make SimpleKernel
make run
# 或者手动指定配置
cmake -B build_custom -DTARGET_ARCH=riscv64SimpleKernel 支持多架构交叉编译,需要根据目标平台配置相应的 GCC 工具链。
- riscv64: 64位 RISC-V 架构
- aarch64: 64位 ARM 架构
RISC-V 工具链:
- macOS:
brew install riscv64-elf-gcc(通过 homebrew-riscv) - Ubuntu:
sudo apt install gcc-riscv64-linux-gnu
AArch64 工具链:
- 从 ARM Developer 下载
- Ubuntu:
sudo apt install gcc-aarch64-linux-gnu
项目提供了预配置的 VS Code 任务,位于 .vscode/tasks.json:
- build_riscv64: 构建 RISC-V 64 内核
- build_aarch64: 构建 AArch64 内核
- run_riscv64: 在 QEMU 中运行 RISC-V 64 内核
- run_aarch64: 在 QEMU 中运行 ARM 64 内核
- debug_riscv64: 在 QEMU 中调试 RISC-V 64 内核
- debug_aarch64: 在 QEMU 中调试 ARM 64 内核
QEMU 是 SimpleKernel 的主要运行环境,支持所有目标架构的模拟。
# Ubuntu/Debian
sudo apt install qemu-system-riscv64 qemu-system-aarch64
# macOS
brew install qemu- qemu-system-riscv64: 运行 RISC-V 64 内核
- qemu-system-aarch64: 运行 AArch64 内核
# 构建并运行
cd build_riscv64
make run
# 或者直接使用 VS Code 任务
# 按 Ctrl+Shift+P,选择 "Tasks: Run Task",然后选择相应的运行任务QEMU 支持 GDB 远程调试:
# 启动内核并等待 GDB 连接
make debug
# 在另一个终端连接 GDB
gdb bin/kernel.elf
(gdb) target remote localhost:1234
(gdb) continue项目提供 Dev Container 支持,确保开发环境的一致性:
- 基于 Ubuntu,包含 GCC 14 交叉编译工具链(riscv64 / aarch64)
- 预装 QEMU、CMake、GDB 等全部构建和调试依赖
- 支持 VS Code Dev Containers、GitHub Codespaces 和 devcontainer CLI
- 详细使用方法见 Dev Container 文档
# VS Code: 安装 Dev Containers 扩展后,选择 "Reopen in Container"
# CLI 方式
npm install -g @devcontainers/cli
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . bash-
./tools/project_config.h.in
项目配置模板文件,用于生成编译时配置头文件。
-
./tools/.pre-commit-config.yaml.in
Pre-commit 钩子配置模板,用于自动化代码质量检查。
项目为每个支持的架构提供了专门的工具:
- 启动配置:
{arch}_boot_scr.txt- 各架构的 U-Boot 启动脚本 - FIT 镜像模板:
{arch}_qemu_virt.its.in- 用于生成可启动镜像的设备树配置
项目完全集成了 VS Code 开发环境:
- .vscode/tasks.json: 预定义的构建和运行任务
- .vscode/launch.json: 调试配置
- .devcontainer/: 开发容器配置,支持一键环境搭建
- Clang-format:
.clang-format定义代码格式化规则 - Clang-tidy:
.clang-tidy定义静态代码分析规则 - CMake-format:
.cmake-format.json定义 CMake 文件格式化规则
关于交叉编译的详细说明:https://wiki.osdev.org/GCC_Cross-Compiler
RISC-V 工具链:https://github.com/riscv/riscv-gnu-toolchain
构建系统详细文档:doc/build_system.md
Dev Container 使用说明:docs/docker.md