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();
}
初始化流程:
- 设置动态内存堆其实地址
- 串口初始化,启动内核调试串口控制台
- boot引导时打印信息
- constructors()构造列表?
- 实例化InterKernel
- 运行内核
//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,此处存疑。