从顶层开始入手,从位于FreeNOS\kernel\intel\pc\Main.cpp开始看,kernel_main函数很短,全部贴上来。
extern C int kernel_main(CoreInfo *info)
{
// Initialize heap at 3MB offset
// TODO: fix this
Kernel::heap( MegaByte(3),MegaByte(1) );
// Start kernel debug serial console
// TODO: can I re-use the user-land driver here somehow????
if (info->coreId == 0)
{
IntelSerial *serial = new IntelSerial(0x3f8);
serial->setMinimumLogLevel(Log::Notice);
}
// TODO: put this in the boot.S, or maybe hide it in the support library? maybe a _run_main() or something.
constructors();
// Create and run the kernel
IntelKernel *kernel = new IntelKernel(info);
return kernel->run();
}
一开始为内核设定堆大小Kernel::heap( MegaByte(3),MegaByte(1) );
接着定义一个IntelSerial类,注释上看是启动启动内核调试串行控制台,该类继承自Log
然后是constructors();函数,注释上看是把this放进boot.S中,或者将它隐藏在support库中? 也许是在_run_main函数或者是其他函数。注释很迷。在FreeNOS\kernel\support.h,support.cpp中声明,定义了该函数,初步看不明白该函数功能。
最后就是定义了一个IntelKernel类的对象,并调用run()函数。
目前知道的几个关系:

接下来将会照这个步骤一步步分析。
转载请注明出处
浙公网安备 33010602011771号