- kernel
- x86, x86_64, riscv64
- C, C++, AT&T ASM
- cmake
- multiboot2, opensbi
提供了各个阶段完成度不同的内核,你可以从自己喜欢的地方开始。
各分支内容:
- boot: 系统的启动,从引导程序到内核入口
- printf: 基本的字符输出,便于调试
- parse_boot_info: 对引导程序传递信息的初步解析
- pmm: 物理内存初始化
- vmm: 虚拟内存初始化
- heap: 堆管理
- lib: C++ std/stl 的部分支持
- intr: 中断管理
- 进程: TODO
- 文件系统: TODO
- 设备管理: TODO
- 系统调用: TODO
- 用户模式: TODO
-
基本工具
交叉编译器
x86_64-elf-gcc
,riscv64-unknown-elf-gcc
,arm-none-eabi-gcc
调试工具
x86_64-elf-gdb
,riscv64-unknown-elf-gdb
,arm-none-eabi-gdb
构建工具
cmake
模拟器
bochs
,qemu
-
For x86
引导程序
grub
制作内核镜像
xorriso
-
For riscv64
引导程序
opensbi
-
For arm
TODO
git clone https://github.com/Simple-XX/SimpleKernel.git
cd SimpleKernel/
bash ./run.sh
运行截图
-
原则
整个工程按照功能模块划分子目录,每个子目录再划分头文件和源文件目录,以便架构清晰、易懂。
-
原则
目录的命名能准确描述模块的基本功能,建议用小写字母且不含下划线、点等特殊符号;
目录必须放于相包含的父目录之下,并需要明确与其他目录间的耦合性。
-
示例
kernel:系统内核部分; libs:依赖库;
-
原则
新添加组件往往依赖于系统原有组件,必须以最小耦合的方式明确所直接依赖的组件。
头文件命名能准确描述文件所包含的模块内容,达到通俗、易懂的目的。
每次 push 会使用 Github Action 进行测试,可以通过编译即可。
-
git commit 规范:
[tools/Git Commit 规范.pdf](./tools/Git Commit 规范.pdf)
-
代码样式
由 .clang-format 指定
- 并发
- 文件系统
- 设备驱动
Free to PR!
此项目参考了很多优秀的项目和资料。
《程序员的自我修养--链接、装载与库》(俞甲子 石凡 潘爱民)
JamesM's kernel development tutorials
How-to-Make-a-Computer-Operating-System
- digmouse233
- l*e
- fslongjin
此项目使用 MIT 许可证