Linux內(nèi)核在啟動(dòng)的時(shí)候,能接收某些命令行選項(xiàng)或啟動(dòng)時(shí)參數(shù)。當(dāng)內(nèi)核不能識(shí)別某些硬件進(jìn)而不能設(shè)置硬件參數(shù)或者為了避免內(nèi)核更改某些參數(shù)的值,可以通過(guò)這種方式手動(dòng)將這些參數(shù)傳遞給內(nèi)核。
如果不使用啟動(dòng)管理器,比如直接從BIOS或者把內(nèi)核文件用“cp zImage /dev/fd0”等方法直接從設(shè)備啟動(dòng),就不能給內(nèi)核傳遞參數(shù)或選項(xiàng)--這也許是我們使用引導(dǎo)管理器比如LILO的好處之一吧。
Linux的內(nèi)核參數(shù)是以空格分開(kāi)的一個(gè)字符串列表,通常具有如下形式:
name[=value_1][,value_2]...[,value_10]
“name”是關(guān)鍵字,內(nèi)核用它來(lái)識(shí)別應(yīng)該把“關(guān)鍵字”后面的值傳遞給誰(shuí),也就是如何處理這個(gè)值,是傳遞給處理例程還是作為環(huán)境變量或者拋給“init”。值的個(gè)數(shù)限制為10,你可以通過(guò)再次使用該關(guān)鍵字使用超過(guò)10個(gè)的參數(shù)。
首先,內(nèi)核檢查關(guān)鍵字是不是 `root=',`nfsroot=', `nfsaddrs=', `ro', `rw', `debug'或 `init',然后內(nèi)核在bootsetups數(shù)組里搜索于該關(guān)鍵字相關(guān)聯(lián)的已注冊(cè)的處理函數(shù),如果找到相關(guān)的已注冊(cè)的處理函數(shù),則調(diào)用這些函數(shù)并把關(guān)鍵字后面的值作為參數(shù)傳遞給這些函數(shù)。比如你在啟動(dòng)時(shí)設(shè)置參數(shù)name=a,b,c,d,內(nèi)核搜索bootsetups數(shù)組,如果發(fā)現(xiàn)“name”已注冊(cè),則調(diào)用“name”的設(shè)置函數(shù)如name_setup(),并把a(bǔ),b,c,d傳遞給name_setup()執(zhí)行。
所有型如“name=value”參數(shù),如果沒(méi)有被上面所述的設(shè)置函數(shù)接收,將被解釋為系統(tǒng)啟動(dòng)后的環(huán)境變量,比如“TERM=vt100”就會(huì)被作為一個(gè)啟動(dòng)時(shí)參數(shù)。
所有沒(méi)有被內(nèi)核設(shè)置函數(shù)接收也沒(méi)又被設(shè)置成環(huán)境變量的參數(shù)都將留給init進(jìn)程處理,比如“single”。
新聞熱點(diǎn)
疑難解答
圖片精選