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