狂热内核篇——内核初始化深入探讨了操作系统启动过程中内核加载与初始化的关键步骤和技术细节,是计算机系统架构和操作系统的进阶学习资料。
目录
1. 引子
1.1 上电
1.2 BIOS时代
1.3 内核引导程序
2. 内核映像的形成
2.1 MakeFile预备知识
2.1.1 Makefile书写规则
2.1.2 Makefile变量
2.1.3 条件判断
2.1.4 函数
2.1.5 隐含规则
2.1.6 定义模式规则
2.1 KBuild体系
2.1.1 内核目标
2.1.2 主机程序
2.1.3 编译标志
2.2 内核编译分析
2.2.1 编译配置
2.2.2 寻找第一个目标
2.2.3 prepare和scripts目标
2.2.4 递归编译各对象
2.2.5 链接vmlinux
2.2.6 制作bzImage
3 实模式下的内核代码
3.1 内核映像内存布局
3.2 实模式汇编代码header.S
3.2.1 无用的bootsect代码
3.2.2 初始化头变量hdr
3.2.3 准备实模式下C语言环境
3.3 实模式代码main函数
3.3.1 复制初始化头变量
3.3.2 初始化堆
3.3.3 确保支持当前运行的CPU
3.3.4 设置BIOS的x86模式
3.3.5 内存的检测
3.3.6 设置键盘属性
3.3.7 填充系统环境配置表
3.3.8 填充IST信息
3.3.9 设置Video模式
3.4 实模式代码go_to_proteced_mode函数
3.4.1 禁止可屏蔽和不可屏蔽中断
3.4.2 打开A20地址线
3.4.3 安装临时全局描述符表
3.4.4 第一次启动保护模式
4 保护模式下的内核代码
4.1 32位x86保护模式代码
4.1.1 内核解压缩的前期工作
4.1.2 解压缩内核
4.1.3 第二次启动保护模式
4.1.4 第一次启动分页管理
4.1.5 初始化0号进程
4.2 向start_kernel进发
4.2.1 初始化中断描述符表
4.2.2 第三次启动保护模式
4.2.3 启动x86虚拟机
5 走向现代:start_kernel函数
5.1 初始化同步与互斥环境
5.1.1 屏蔽中断
5.1.2 启动大内核锁
5.1.3 注册时钟通知链
5.1.4 激活第一个CPU
5.1.5 初始化地址散列表
5.1.6 打印版本信息
5.2 执行setup_arch()函数
5.2.1 拷贝可用内存区信息
5.2.2 获得总页面数
5.2.3 着手建立永久内核页表
5.2.4 第二次启动分页管理
5.2.5 建立内存管理架构
5.2.6 添砖加瓦
5.3 设置每CPU环境
5.4 初始化内存管理区列表
5.5 利用early_res分配内存
5.6 触碰虚拟文件系统
5.7 初始化异常服务
5.8 初始化内存管理
5.8.1 启用伙伴算法
5.8.2 初始化slab分配器
5.8.3 初始化非连续内存区
5.9 初始化调度程序
5.10 初始化中断处理