-
Kernel
-
C/C++/AT&T ASM/cmake/shell
-
Linux-like
-
Multiboot2
提供了各个阶段完成度不同的内核,你可以从自己喜欢的地方开始。
构建顺序:
- boot: 由 grub2 引导
- printf: 字符输出,方便调试
- pmm: 物理内存初始化
- vmm: 虚拟内存初始化
- heap: 堆管理
- lib: C++ 标准库与标准模版库
- intr: 中断管理
- 文件系统: TODO
- 系统调用: TODO
- 进程: TODO
-
Ubuntu Linux
- brew
- x86_64-elf-binutils
- x86_64-elf-gcc
- xorriso
- grub
- bochs
- bochs-x
Ubuntu 20.04 测试通过
-
Arch Linux
- brew
- x86_64-elf-binutils
- x86_64-elf-gcc
- mtools
- xorriso
- grub
- bochs
Manjaro 5.6.15-1 测试通过
-
Mac
-
brew
-
x86_64-elf-binutils
-
-
x86_64-elf-gcc
- xorriso
-
grub
- bochs
macOS 10.15.7 测试通过
git clone https://github.com/Simple-XX/SimpleKernel.git
cd SimpleKernel/
bash ./run.sh
运行截图
-
原则
整个工程按照功能模块划分子目录,每个子目录再划分头文件和源文件目录,以便架构清晰、易懂。
-
原则
目录的命名能准确描述模块的基本功能,建议用小写字母且不含下划线、点等特殊符号;
目录必须放于相包含的父目录之下,并需要明确与其他目录间的耦合性。
-
示例
kernel:系统内核部分; libs:依赖库;
-
原则
新添加组件往往依赖于系统原有组件,必须以最小耦合的方式明确所直接依赖的组件。
头文件命名能准确描述文件所包含的模块内容,达到通俗、易懂的目的。
每次 push 会使用 Github Action 进行测试,可以通过编译即可。
-
git commit 规范:
-
代码样式
由 tools/clang-format 指定
simplekernel.img 是 1.44 软盘,我们的内核就在这里。
- 并发
- 文件系统
- 设备驱动
请阅读 CONTRIBUTING.md。
此项目参考了很多优秀的项目和资料
《程序员的自我修养--链接、装载与库》(俞甲子 石凡 潘爱民)
JamesM's kernel development tutorials
How-to-Make-a-Computer-Operating-System
- digmouse233
- l*e
- fslongjin
请我喝杯咖啡吧! (ps: 请注明 GitHub id 以便加入捐献者名单
此项目使用 MIT 许可证