关于如何给项目贡献代码请看以下说明
- 尽量不要递交无关代码, 应用程序部分至少拥有实用性 or 玩法性两点其中一点
不限制病毒, :P 您完全可以写一个有关于CP_Kernel的病毒
- 永远不要用
push -f origin main
推送您的代码 : ( - 代码量递交无论帮助大小一律可以加入贡献者一栏, 即使您不是通过PR递交也会写上您的名字
- 在推送您的代码前尽量
git pull origin <bracnch>
拉取一次远程更新 - 您的代码要尽量将耦合性降到最低, 毕竟低耦合代码是
CP_Kernel
的宗旨 CP_Kernel
的构建脚本支持深度目录搜索, 您可以在src
目录内 自由安排您的源码结构而无需修改构建脚本(但要在其顶层功能文件夹内, 提高项目可读性)
想要贡献代码尽量了解以下项目结构 Project docs
src/include/krlibc.h
定义了一些内核用的C标准库函数, 也是内核版本号与内存布局等字段的定义src/include/klog.h
涵盖了所有内核输出函数, 包括串口打印调试src/core/main.c
除非您明确了解其功能加载顺序, 并且确保您加入的功能必须修改原有的加载顺序不然非必要不要更改其中的函数调用顺序- 注册中断服务要确保该中断号没有中断处理程序, 或者经过修改该中断号之前注册的程序不适用于该中断号 否则不要覆盖处理程序(如同时需要与另一个程序协同处理该中断历程, 请编写一个统一的被注册函数分别调用)
- 所有内核用C语言类型定义都在
src/include/ctypes.h
中, 请勿重复定义类型 - 所有汇编函数统一用NASM语法编写进
src/boot/asmfunc.asm
, 可以写成内联汇编的除外
这可真是个大工程, 如果您有耐心那么祝你成功
CP_Kernel
现存的内存管理系统为 2.0版本的4K分页式内存管理- 请不要置换成分段内存管理,这太落后了!
CP_Kernel
默认的中断控制器为 8259A PIC
- 如果您想更换至
x2 APIC
等其他中断控制器以接管中断服务例程, 其中断处理函数注册的是该中断的中断号 并不是控制器引脚号, 请加以注意
- 如果您有更好的线程调度方案欢迎贡献
- 您可以自己编写新的调度算法进
scheduler.c
尽量不要替换原有的调度措施。 - 如果您想编写内核内置的程序, 请递交至
src/sysapp
, 并在进程模块初始化后再创建您的线程
- 统一将您的文件系统注册进
CP_Kernel
的Virtual File System
当块设备被挂载时, 您可以在mount
函数中编写文件系统识别, 如果成功返回非-1
值即可
- 有关输入输出设备(如鼠标, 触摸板)请递交至
src/driver/input
下 - 有关PCI设备(如AHCI SCSI)请递交至
src/driver/pci
下, 确保在kernel_main
中的init_pci
函数后初始化您的驱动 - 有关视频驱动程序或GPU驱动程序, 请递交至
src/driver/video
下 - 其他类型驱动可直接递交至
src/driver
目录内