2009-06-19 103 views
6

內核是否需要從引導加載程序獲得內核。通常內核能夠從頭開始啓動系統,那麼爲什麼它需要引導加載程序? 我已經看到了像這樣從內核啓動消息。內核的參數

"Fetching vars from bootloader... OK" 

那麼究竟是變量傳遞? 另外如何從boot-loader傳遞變量?它是通過堆棧嗎?

+0

不應該在serverfault? – 2009-06-21 01:36:25

回答

2

內核接受所謂的命令行選項,即基於文本。這非常有用,因爲無需重新編譯內核就可以做很多事情。至於參數傳遞,它依賴於架構。在ARM上,它通過指向內存中某個位置的指針或內存中的固定位置完成。

這是如何完成ARM。通常內核不能從頭開始啓動機器。可能來自BIOS,但它不是從頭開始。它需要一些初始化,這是引導程序的工作。

2

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這也解釋了一些常見的參數應用的。

0

Linux從引導加載程序接受變量以允許使用某些選項。我知道你可以做的一件事是讓你不必登錄(恢復模式),還有其他幾個選擇。它主要只允許在出現問題或密碼更改時進行修復。如果您選擇使用其他選項,則這是Ubuntu Live-CD引導Linux的方式。

2

對於Linux內核,引導加載程序必須告訴內核。它包括像內核命令行(如其他幾個人已經提到過的),內存中已加載initrd以及其大小,如果使用了initrd(內核無法單獨加載它;通常在使用initrd時,訪問存儲設備所需的模塊在initrd中,並且在訪問存儲之前還需要進行一些非常複雜的設置),以及幾種不同的可能性和結果。

請參閱Documentation/x86/boot.txt(鏈接到2.6.30的版本)以獲取傳統x86體系結構(包括32位和64位)的更多詳細信息,包括如何將這些變量傳遞給內核設置代碼。

1

引導加載程序不使用堆棧將參數傳遞給內核。至少在Linux的情況下,引導加載程序會填充內核知道如何解析的相當複雜的內存結構。這就是引導程序如何將內核指向其命令行。有關更多信息,請參見Documentaion/x86/boot.txt

0

正常情況下,這些參數稱爲命令行參數,從引導加載程序傳遞給內核模塊。引導程序使用了許多的BIOS中斷檢測,

memory 
HDD 
Processor 
Keyboard 
Screen 
Mouse 
ETC... 

和所有harwares細節會在啓動時被檢測到,這是在實模式下,然後通過這個參數爲內核。