kernel源码(四)源码文件结构和启动过程分析
我们的源码选用的是Linux0.11版本,因为这个版本简单好学,我们将以这个版本为基础学习Linux的基本体系结构。
1 源码下载
http://www.oldlinux.org/Linux.old/
2 源码文件结构树
boot为启动相关的代码,用汇编写的
init是内核启动的代码
fs是虚拟文件系统
mm内存管理
3 启动过程
3.1 BIOS启动
参考https://www.cnblogs.com/zhenjingcool/p/15938330.html
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,继续执行接下来的内核初始化过程。
过程如下图: