深入解析Linux内核初始化过程
5星 · 超过95%的资源 需积分: 0 165 浏览量
更新于2024-07-31
8
收藏 1.4MB PDF 举报
"疯狂内核之——内核初始化"
在深入探讨Linux内核初始化的过程中,我们需要了解从硬件上电到操作系统完全启动的整个流程。本文主要分为五个部分,详细阐述了内核从创建到运行的各个关键阶段。
1. **引子**:
- **上电**:计算机电源开启后,硬件开始进行自检(POST),然后进入基本输入输出系统(BIOS)。
- **BIOS时代**:BIOS执行硬件初始化,并根据用户设置加载启动设备的引导程序。
- **内核引导程序**:引导程序负责加载内核映像到内存并准备执行,如GRUB或LILO。
2. **内核映像的形成**:
- **Makefile预备知识**:介绍了Makefile的书写规则、变量、条件判断、函数以及隐含规则和模式规则,这些都是构建内核的构建工具KBuild的基础。
- **KBuild体系**:讲解内核目标、主机程序和编译标志,以及如何通过Makefile进行递归编译、链接内核镜像(vmlinux)和制作可引导的bzImage。
3. **实模式下的内核代码**:
- **内核映像内存布局**:内核映像在内存中的分布,包括不同部分如引导扇区、初始化数据等。
- **header.S**:实模式下的汇编代码,包括无用的bootsect代码,初始化头变量,为C语言环境做准备。
- **main函数**:实模式下的主要入口点,涉及复制初始化头变量,初始化堆,CPU支持检查,BIOS模式设置,内存检测,键盘配置,系统环境表填充,IST信息设置和视频模式设置。
- **go_to_protected_mode**:转换到保护模式的关键函数,包括禁止中断,打开A20线,安装临时GDT,以及第一次启动保护模式。
4. **保护模式下的内核代码**:
- **32位x86保护模式**:内核解压缩前期工作,解压缩内核,第二次启动保护模式,首次启用分页管理和初始化0号进程。
- **向start_kernel进发**:涉及中断描述符表初始化,第三次启动保护模式,启动x86虚拟机。
5. **走向现代:start_kernel函数**:
- **初始化同步与互斥环境**:包括中断屏蔽,大内核锁,时钟通知链,激活第一个CPU,地址散列,打印版本信息。
- **setup_arch**:拷贝可用内存区信息,计算总页面数,建立永久内核页表,二次启动分页,构建内存管理架构,以及其他初始化工作。
- **设置每CPU环境**,初始化内存管理区列表,使用early_res分配内存,初始化虚拟文件系统,异常服务,内存管理,调度程序,中断处理系统,包括APIC中断,本地软时钟,软中断,定时器中断等。
- **后start_kernel时代**:创建1号进程,子系统初始化,启动shell环境等,完成内核初始化的最后步骤。
本文详细阐述了从硬件启动到Linux内核完全初始化的复杂过程,涵盖从低级的实模式转换到保护模式,再到内核的高级功能初始化,为理解Linux内核的工作原理提供了深入洞察。对于想要深入研究操作系统内核设计和实现的读者来说,这是一份非常有价值的参考资料。
768 浏览量
843 浏览量
700 浏览量
2009-08-03 上传
275 浏览量
103 浏览量
183 浏览量
yunsongice
- 粉丝: 1117
- 资源: 12
最新资源
- CLOYD_CANOY.github.io
- 深圳金中环商务大厦工程投标方案.zip
- AlmonteSnow
- PT100热电阻温度阻值计算器
- Umbraco-Forms-Bootstrap-4-Theme:Boostrap 4框架的Umbraco Forms插件的主题
- rosetta-inspector:Rosetta服务器实施检查器
- ReactTutorialRepo:使用devCodeCamp的react教程创建的基本react应用程序
- Erbele:Erbele是一款轻巧但功能强大的macOS文本编辑器
- 易语言学习-WEBUI支持库1.1静态库.zip
- 土壤湿度检测电路的设计,打造智能浇花系统-电路方案
- AllHookedUp
- copylot:您的副驾驶学习和工作(Pomodoro-timer,Translate and Notes应用)
- v4l2-ar0330-qt-ok.rar
- AeroFontOne
- roguelike_prog2:roguelike_prog2
- DataReporter:基于移动平台的实时数据报告系统