Skip to content

Latest commit

 

History

History
213 lines (136 loc) · 5.94 KB

File metadata and controls

213 lines (136 loc) · 5.94 KB

工具链

SimpleKernel 为了保证在各个平台上的可用性,选择了较为通用的工具链,主要分为四个部分:

  1. 构建系统

    使用 CMake 对代码进行管理,同时控制编译选项。支持 CMake Presets 进行预配置管理。

  2. 内核的编译

    使用 GCC 工具链进行交叉编译,支持 RISC-V 64、AArch64 两种架构。

  3. 模拟器

    主要使用 QEMU 作为统一的模拟器,支持所有目标架构。

  4. 辅助工具

    包括 Docker 容器化构建、自动化脚本、代码检查工具等。

CMake

SimpleKernel 采用现代化的 CMake 构建系统,具有以下特点:

1. 主要 CMake 文件

  • ./CMakeLists.txt

    项目的根 CMake 文件,设置最小 CMake 版本要求(3.27+),定义项目信息,并通过模块化的方式组织构建配置:

    • 导入项目配置 (project_config)
    • 导入构建函数 (functions)
    • 导入第三方依赖 (3rd)
    • 导入编译配置 (compile_config)
    • 添加子目录 (src/, test/, doc/)
  • ./src/CMakeLists.txt

    规定 GCC 的编译选项,指定生成的二进制文件名称,并管理内核各模块的依赖关系。

  • ./src/*/CMakeLists.txt

    各个模块(如驱动、架构相关代码等)的具体编译规则。

2. CMake Presets 配置

项目使用 CMakePresets.json 提供预定义的构建配置:

  • build_riscv64: RISC-V 64 架构构建配置
  • build_aarch64: AArch64 架构构建配置

3. 辅助 CMake 模块

位于 ./cmake/ 目录下的模块文件:

  • 工具链文件: riscv64-gcc.cmake, aarch64-gcc.cmake - 定义各架构的交叉编译工具链
  • 3rd.cmake: 管理第三方依赖库
  • project_config.cmake: 项目配置和变量定义
  • compile_config.cmake: 编译选项和标志配置
  • functions.cmake: 通用 CMake 函数和宏定义
  • replace_kv.cmake: 模板替换功能
  • clang.cmake: Clang 编译器支持

4. 使用方法

# 使用预设配置构建
cmake --preset build_riscv64
cd build_riscv64
make SimpleKernel
make run

# 或者手动指定配置
cmake -B build_custom -DTARGET_ARCH=riscv64

GCC 交叉编译工具链

SimpleKernel 支持多架构交叉编译,需要根据目标平台配置相应的 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 任务集成

项目提供了预配置的 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 模拟器

QEMU 是 SimpleKernel 的主要运行环境,支持所有目标架构的模拟。

安装 QEMU

# 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 开发环境

项目提供 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 集成

项目完全集成了 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

ARM 工具链:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

RISC-V 工具链:https://github.com/riscv/riscv-gnu-toolchain

构建系统详细文档:doc/build_system.md

Dev Container 使用说明:docs/docker.md