FreeNOS学习笔记之二:目录结构详解

本文介绍了FreeNOS操作系统内核启动过程的关键步骤,包括从Main.cpp开始的源码阅读路径、整体目录结构概览及kernel_main.cpp的具体执行流程。通过分析,读者能够了解到动态内存堆初始化、串口控制台启动、构造函数列表执行等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 从哪开始看

参考文档:http://www.freenos.org/doxygen/

从/kernel/intel/pc/Main.cpp开始看

2 目录结构

下载源码后,目录结构如下:
在这里插入图片描述

  • bin/: 一些常用的命令,CUI,类似Linux shell,源码大多数实现较为简单,大致浏览即可无须细看

  • config/: 不同处理器平台下的构建脚本配置文件,用于scons自动化构建,可以先略过,想了解scons时再仔细研究

  • kernel/: 操作系统微内核实现,重点,

  • lib/: FreeNOS提供的API接口,包括内存分配、CPU管理、内存映射、定时器、进程加载exec、文件系统、通信接口、网络协议、posix标准接口、std标准库等。先大致了解提供了哪些接口。

  • server/: 微内核操作系统的服务器,为微内核提供服务如进程管理、设备管理。

  • support/: Doxygen 注释生成文档工具、 Scons自动化构建

  • test/: 测试程序

3 kernel_main.cpp流程

源代码

extern C int kernel_main(CoreInfo *info)
{
    // Initialize heap
    Kernel::initializeHeap();

    // Open serial console as default Log
    i8250 *uart = new i8250(4, 0x3f8);
    uart->initialize();
    DeviceLog *console = new DeviceLog(*uart);

    // Only the boot core outputs notifications
    if (info->coreId == 0)
        console->setMinimumLogLevel(Log::Notice);
    else
        console->setMinimumLogLevel(Log::Warning);

    // Run all constructors first
    constructors();

    // Create and run the kernel
    IntelKernel *kernel = new IntelKernel(info);
    return kernel->run();
}

初始化流程:

  1. 设置动态内存堆其实地址
  2. 串口初始化,启动内核调试串口控制台
  3. boot引导时打印信息
  4. constructors()构造列表?
  5. 实例化InterKernel
  6. 运行内核
//support.cpp Line:22
extern C void constructors()
{
    for (void (**ctor)() = &CTOR_LIST; *ctor; ctor++)
    {
        (*ctor)();
    }
}

//runtime.cpp Line:34
/** List of constructors. */
extern void (*CTOR_LIST)();

代码中constructors()构造列表看不明白,构造了个寂寞?可能是预留的ToDO,此处存疑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值