Skip to content

Simple-XX/SimpleKernel

 
 

Repository files navigation

codecov workflow commit-activity last-commit-boot MIT License LICENSE 996.icu

English | 中文

SimpleKernel

memory branch

关键词

  • kernel
  • x86_64, riscv64, aarch64
  • osdev
  • bare metal
  • c++, cmake
  • uefi, opensbi

简介

提供了各个阶段完成度不同的内核,你可以从自己喜欢的地方开始。

快速开始

  1. 需要 Ubuntu 环境或使用 docker(见 tools/docker.md)

  2. 安装依赖

    sudo apt install --fix-missing -y gcc g++ gcc-riscv64-linux-gnu g++-riscv64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
    sudo apt install --fix-missing -y cmake qemu-system gdb-multiarch
    sudo apt install --fix-missing -y doxygen graphviz
    sudo apt install --fix-missing -y doxygen graphviz 
    sudo apt install --fix-missing -y clang-format clang-tidy cppcheck libgtest-dev lcov
    git submodule update --init --recursive
  3. 编译并运行

    cd SimpleKernel
    # 支持三种架构
    cmake --preset build_riscv64
    # cmake --preset build_x86_64
    # cmake --preset build_aarch64
    # 进入其中一个架构
    cd build_riscv64
    # 编译内核
    make kernel
    # 在 qemu 中运行
    make run
  4. 调试

    # 进入构建目录后执行
    make debug

    在一个新的 shell 中进入 gdb

    # 进入 gdb
    gdb-multiarch
    # 连接端口
    target remote :1234
    # 加载符号表
    file image/kernel.elf
    # 开始执行
    c

执行流

  • x86_64/aarch64

  • riscv64

新增特性

  • riscv64

  • X86_64

  • TODO

  • 全局对象

    对象名 位置 用途
    static ostream cout src/kernel/libcxx/include/iostream 内核中的 std::cout 实现
    static Singleton<KernelElf> kKernelElf src/kernel/include/kernel_elf.hpp 解析内核自身的 elf 信息
    static Singleton<KernelFdt> kKernelFdt src/kernel/include/kernel_fdt.hpp 解析 dtb 信息
    static Singleton<BasicInfo> kBasicInfo src/kernel/include/basic_info.hpp 内核基本信息
    static cpu::Serial kSerial(cpu::kCom1) src/kernel/arch/x86_64/arch_main.cpp X86_64 下的串口

已支持特性

  • [BUILD] 使用 CMake 的构建系统
  • [BUILD] 使用 gdb remote 调试
  • [BUILD] 第三方资源集成
  • [COMMON] C++ 全局对象的构造
  • [COMMON] C++ 静态局部对象构造
  • [COMMON] C 栈保护支持
  • [COMMON] printf 支持
  • [COMMON] 简单的 C++ 异常支持
  • [COMMON] 带颜色的字符串输出
  • [x86_64] 基于 gnuefi 的 bootloader
  • [x86_64] 基于 serial 的基本输出
  • [x86_64] 物理内存信息探测
  • [x86_64] 显示缓冲区探测
  • [x86_64] 调用栈回溯
  • [riscv64] gp 寄存器的初始化
  • [riscv64] 基于 opensbi 的基本输出
  • [riscv64] device tree 硬件信息解析
  • [riscv64] ns16550a 串口驱动
  • [riscv64] 调用栈回溯(仅打印地址)
  • [aarch64] 基于 gnuefi 的 bootloader(调试中)
  • [riscv64] 对 CSR 寄存器的抽象
  • [riscv64] 寄存器状态打印
  • [riscv64] 基于 Direct 的中断处理
  • [riscv64] 中断注册函数
  • [riscv64] 时钟中断
  • [x86_64] cpu 抽象
  • [x86_64] 8259A pic 控制器抽象
  • [x86_64] 8253/8254 timer 控制器抽象
  • [x86_64] gdt 初始化
  • [x86_64] 中断处理流程
  • [x86_64] 中断注册函数
  • [x86_64] 时钟中断

使用的第三方资源

opensbi

gnu-efi

gdbinit

opensbi_interface

printf_bare_metal

dtc

google/googletest

开发指南

代码风格:Google,已由 .clang-format 指定

命名规范:Gooele 开源项目风格指南

About

Simple kernel for learning operating systems. 用于学习操作系统的简单内核

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5