内核是否需要从引导加载程序获得内核。通常内核能够从头开始启动系统,那么为什么它需要引导加载程序? 我已经看到了像这样从内核启动消息。内核的参数
"Fetching vars from bootloader... OK"
那么究竟是变量传递? 另外如何从boot-loader传递变量?它是通过堆栈吗?
内核是否需要从引导加载程序获得内核。通常内核能够从头开始启动系统,那么为什么它需要引导加载程序? 我已经看到了像这样从内核启动消息。内核的参数
"Fetching vars from bootloader... OK"
那么究竟是变量传递? 另外如何从boot-loader传递变量?它是通过堆栈吗?
内核接受所谓的命令行选项,即基于文本。这非常有用,因为无需重新编译内核就可以做很多事情。至于参数传递,它依赖于架构。在ARM上,它通过指向内存中某个位置的指针或内存中的固定位置完成。
这是如何完成ARM。通常内核不能从头开始启动机器。可能来自BIOS,但它不是从头开始。它需要一些初始化,这是引导程序的工作。
Linux内核从引导加载程序接受一些参数,我现在可以记住的是参数vga
。例如:
kernel /vmlinuz-2.6.30 root=/dev/disk/by-uuid/3999cb7d-8e1e-4daf-9cce-3f49a02b00f2 ro vga=0x318
看一看10 boot time parameters you should know about the Linux kernel这也解释了一些常见的参数应用的。
Linux从引导加载程序接受变量以允许使用某些选项。我知道你可以做的一件事是让你不必登录(恢复模式),还有其他几个选择。它主要只允许在出现问题或密码更改时进行修复。如果您选择使用其他选项,则这是Ubuntu Live-CD引导Linux的方式。
对于Linux内核,引导加载程序必须告诉内核。它包括像内核命令行(如其他几个人已经提到过的),内存中已加载initrd以及其大小,如果使用了initrd(内核无法单独加载它;通常在使用initrd时,访问存储设备所需的模块在initrd中,并且在访问存储之前还需要进行一些非常复杂的设置),以及几种不同的可能性和结果。
请参阅Documentation/x86/boot.txt(链接到2.6.30的版本)以获取传统x86体系结构(包括32位和64位)的更多详细信息,包括如何将这些变量传递给内核设置代码。
引导加载程序不使用堆栈将参数传递给内核。至少在Linux的情况下,引导加载程序会填充内核知道如何解析的相当复杂的内存结构。这就是引导程序如何将内核指向其命令行。有关更多信息,请参见Documentaion/x86/boot.txt。
正常情况下,这些参数称为命令行参数,从引导加载程序传递给内核模块。引导程序使用了许多的BIOS中断检测,
memory
HDD
Processor
Keyboard
Screen
Mouse
ETC...
和所有harwares细节会在启动时被检测到,这是在实模式下,然后通过这个参数为内核。
不应该在serverfault? – 2009-06-21 01:36:25