- 论坛徽章:
- 0
|
本帖最后由 baron_zz 于 2014-10-30 11:10 编辑
1.系统的引导和初始化
Linux 系统的引导有好几种方式:常见的有 Lilo, Loadin引导和Linux的自举引导(bootsect-loader),而后者所对应源程序为arch/i386/boot/bootsect.S, 它为实模式的汇编程序, 限于篇幅在此不做分析; 无论是哪种引导方式, 最后都要跳转到 arch/i386/Kernel/setup.S, setup.S主要是进行时模式下的初始化, 为系统进入保护模式做准备; 此后, 系统执行 arch/i386/kernel/head.S (对经压缩后存放的内核要先执行 arch/i386/boot/compressed/head.S); head.S 中定义的一段汇编程序setup_idt, 它负责建立一张256项的 idt 表(Interrupt Descriptor Table),此表保存着所有自陷和中断的入口地址; 其中包括系统调用总控程序 system_call 的入口地址; 当然, 除此之外,head.S还要做一些其他的初始化工作;
2.系统初始化后运行的第一个内核程序asmlinkage void __init start_kernel(void) 定义在/usr/src/linux/init/main.c中
以上是抄自网上的,
意思就是:bootsect.S---》setup.S---》head.S---》init/main.c中start_kernel()
但是,我在我的内核中,找不到bootsect.S、setup.S、head.S这些文件(我看的arch/X86/目录),我是2.6.32.2版本内核,请问这是啥原因????? |
|