Mat*_*ery 44
我假设你在这里谈论x86 ......
这取决于您认为"引导加载程序"和"内核"之间的边界是什么:内核的正确启动是32位保护模式代码,但内核本身提供了一些启动代码以从实模式到达.
实模式代码包括arch/x86/boot/:start_of_setup对C进行环境的一些基本设置,以及调用main(),它做一些相当枯燥的事情,以实际跳转到保护模式结束(参见参考资料pmjump.S).
你现在最终取决于内核是否被压缩.如果是,则入口点实际上是自解压程序.这也是相当枯燥的东西,并且基本上是透明的:解压缩代码和压缩内核在内存中移动到更高的位置,然后内核被解压缩到原始位置,然后跳转到好像它已经解压缩所有沿.此代码在arch/x86/boot/compressed/(入口点startup_32在head_32.S)中.
内核确实正常startup_32进入arch/x86/kernel/head_32.S.该代码有通过调用结束i386_start_kernel()的arch/x86/kernel/head32.c,最终调用通用内核中的启动代码start_kernel().