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,继续执行接下来的内核初始化过程。

过程如下图:

 

posted @   zhenjingcool  阅读(211)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示