arunz

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从顶层开始入手,从位于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()函数。

目前知道的几个关系:

 

接下来将会照这个步骤一步步分析。

转载请注明出处

posted on 2017-11-24 15:52  arunz  阅读(1076)  评论(0)    收藏  举报