kernel源码(四)源码文件结构和启动过程分析


我们的源码选用的是Linux0.11版本,因为这个版本简单好学,我们将以这个版本为基础学习Linux的基本体系结构。

1 源码下载

http://www.oldlinux.org/Linux.old/

2 源码文件结构树

boot为启动相关的代码,用汇编写的

init是内核启动的代码

fs是虚拟文件系统

mm内存管理

3 启动过程

3.1 BIOS启动

参考

3.2 内核启动

内核映像文件的组成

 我们的内核镜像文件存储在硬盘上,由bootsect.s编译的二进制代码放在最前面,而且在启动盘的第一个扇区(512字节),接着是setup.s,放在接下来的4个扇区(2KB)中,接着是head.s,接着是内核其他代码编译的二进制文件。

BIOS启动完毕后,cpu的PC=0x7c00,内存0x7c00处存放的是bootsect.s。在这个代码里,其将自己移动到0x90000处,接着跳转到0x90000处执行,下一步将setup.s和head.s分别加载到0x90200处和0x10000处,接着跳转到0x90200处开始执行setup.s程序。在setup.s中会用到BIOS的中断向量表获取机器的一些参数,等获取完这些参数,会将head.s移动到0x0000处。程序跳转到head.s执行,head.s又调用了main.c,继续执行接下来的内核初始化过程。

过程如下图: