Linux i386 启动代码 HOWTO

王飞云

2004-01-23

修订历史
修订 1.02004-02-19修订者: FW
初始发布,由 LDP 审阅
修订 0.3.32004-01-23修订者: fyw
添加 decompress_kernel() 细节;修复 TLDP 最终审阅中报告的错误。
修订 0.32003-12-07修订者: fyw
添加关于 SMP、GRUB 和 LILO 的内容;修复和增强。
修订 0.22003-08-17修订者: fyw
适配 Linux 2.4.20。
修订 0.12003-04-20修订者: fyw
更改为 DocBook XML 格式。

本文档描述了 Linux i386 启动代码,作为学习指南和源代码注释。除了类似 C 语言的伪代码源代码注释外,它还介绍了与内核开发相关的工具链和规范的要点。它旨在帮助

  • 内核新手理解 Linux i386 启动代码,以及

  • 内核资深人士回顾 Linux 启动过程。


目录
1. 介绍
1.1. 版权和许可
1.2. 免责声明
1.3. 致谢 / 贡献者
1.4. 反馈
1.5. 翻译
2. Linux Makefile
2.1. linux/Makefile
2.2. linux/arch/i386/vmlinux.lds
2.3. linux/arch/i386/Makefile
2.4. linux/arch/i386/boot/Makefile
2.5. linux/arch/i386/boot/compressed/Makefile
2.6. linux/arch/i386/tools/build.c
2.7. 参考
3. linux/arch/i386/boot/bootsect.S
3.1. 移动 Bootsect
3.2. 获取磁盘参数
3.3. 加载 Setup 代码
3.4. 加载压缩镜像
3.5. 进入 Setup
3.6. 读取磁盘
3.7. Bootsect 助手函数
3.8. 杂项
3.9. 参考
4. linux/arch/i386/boot/setup.S
4.1. 头部
4.2. 检查代码完整性
4.3. 检查加载器类型
4.4. 获取内存大小
4.5. 硬件支持
4.6. APM 支持
4.7. 准备进入保护模式
4.8. 启用 A20
4.9. 切换到保护模式
4.10. 杂项
4.11. 参考
5. linux/arch/i386/boot/compressed/head.S
5.1. 解压缩内核
5.2. gunzip()
5.3. inflate()
5.4. 参考
6. linux/arch/i386/kernel/head.S
6.1. 启用分页
6.2. 获取内核参数
6.3. 检查 CPU 类型
6.4. 进入 Start Kernel
6.5. 杂项
6.6. 参考
7. linux/init/main.c
7.1. start_kernel()
7.2. init()
7.3. cpu_idle()
7.4. 参考
8. SMP 启动
8.1. 在 smp_init() 之前
8.2. smp_init()
8.3. linux/arch/i386/kernel/trampoline.S
8.4. initialize_secondary()
8.5. start_secondary()
8.6. 参考
A. 内核构建示例
B. 内部链接器脚本
C. GRUB 和 LILO
C.1. GNU GRUB
C.2. LILO
C.3. 参考
D. 常见问题解答