源代码包中的geekos-0.3.0/doc/hacking.pdf中有GeekOS的简略介绍,项目概览等等,同时在代码包中中给出了project0到project6等几个项目,这几个项目是部分代码缺失的,需要根据项目的要求填充缺失的代码实现所需要的功能,同时在这个过程中了解这个小型操作系统的工作原理。
首先从project0开始。project0的目标很简单,首先创建一个内核模式线程,该线程要能够打印"Hello from xxx",xxx是你的名字,而且还能重复调用Wait_For_Key接收键盘输入并且在屏幕上回显该字符,直到接收到终止符(control-d)子程序。
首先不要太紧张,这个任务所需要的代码量很少,只是为了熟悉环境而准备。该修改的代码都放在src/geekos/main.c目录下的Main()函数中。
创建内核线程的函数是Start_Kernel_Thread(),该函数的定义在src/geekos/kthread.c中。
首先打开main.c,可以看到Main函数的代码为:
首先从project0开始。project0的目标很简单,首先创建一个内核模式线程,该线程要能够打印"Hello from xxx",xxx是你的名字,而且还能重复调用Wait_For_Key接收键盘输入并且在屏幕上回显该字符,直到接收到终止符(control-d)子程序。
首先不要太紧张,这个任务所需要的代码量很少,只是为了熟悉环境而准备。该修改的代码都放在src/geekos/main.c目录下的Main()函数中。
创建内核线程的函数是Start_Kernel_Thread(),该函数的定义在src/geekos/kthread.c中。
首先打开main.c,可以看到Main函数的代码为:
/*
* Kernel C code entry point.
* Initializes kernel subsystems, mounts filesystems,
* and spawns init process.
*/
void Main(struct Boot_Info* bootInfo)
{
Init_BSS();
Init_Screen();
Init_Mem(bootInfo);
Init_CRC32();
Init_TSS();
Init_Interrupts();
Init_Scheduler();
Init_Traps();
Init_Timer();
Init_K