Linux作業系統核心啟動引數詳細解析

2021-05-26 05:16:24 字數 4512 閱讀 2122

linux作業系統核心啟動引數詳細解析

linux

核心在啟動的時候,能接收某些命令列選項或啟動時引數。當核心不能識別某些硬體進而不能設定硬體引數或者為了避免核心更改某些引數的值,可以通過這種方式手動將這些引數傳遞給核心。

如果不使用啟動管理器,比如直接從bios 或者把核心檔案用「cp zimage /dev/fd0」 等方法直接從裝置啟動,就不能給核心傳遞引數或選項--這也許是我們使用引導管理器比如lilo 的好處之一吧。

linux

的核心引數是以空格分開的乙個字串列表,通常具有如下形式:

name[=value_1][,value_2]...[,value_10]

「name」

是關鍵字,核心用它來識別應該把「 關鍵字」 後面的值傳遞給誰,也就是如何處理這個值,是傳遞給處理例程還是作為環境變數或者拋給「init」 。值的個數限制為10 ,你可以通過再次使用該關鍵字使用超過10 個的引數。

首先,核心檢查關鍵字是不是 「root= 」, 「nfsroot= 」, 「nfsaddrs= 」, 「ro 」, 「rw 」, 「debug 」或 「init 」,然後核心在bootsetups 陣列裡搜尋於該關鍵字相關聯的已註冊的處理函式,如果找到相關的已註冊的處理函式,則呼叫這些函式並把關鍵字後面的值作為引數傳遞給這些函式。比如你在啟動時設定引數name =a,b,c,d ,核心搜尋bootsetups 陣列,如果發現「name」 已註冊, 則呼叫「name」 的設定函式如name_setup() ,並把a,b,c,d 傳遞給name_setup() 執行。

所有型如「name =value」 引數,如果沒有被上面所述的設定函式接收,將被解釋為系統啟動後的環境變數,比如「term=vt100」 就會被作為乙個啟動時引數。

所有沒有被核心設定函式接收也沒又被設定成環境變數的引數都將留給init 程序處理,比如「single」 。

常用的裝置無關啟動時引數。

1、init =...

設定核心執行的初始化程序名,如果該項沒有設定,核心會按順序嘗試/etc/init ,

/bin/init

,/sbin/init ,/bin/sh ,如果所有的都沒找到,核心會丟擲kernel panic :的錯誤。 2

、nfsaddrs=...

設定從網路啟動時nfs 的啟動位址,以字串的形式給出。 3

、nfsroot=...

設定網路啟動時的nfs 根名字,如果該字串不是以"/" 、"," 、"." 開始,預設指向「/tftp-boot」 。

以上2 、3 在無盤站中很有用處。 4

、no387

該選項僅當定義了config_bugi386 時才能用,某些i387 協處理器晶元使用32 位的保護模式時會有bug ,比如一些浮點運算,使用這個引數可以讓核心忽略387 協處理器。 5

、no-hlt

該選項僅當定義了config_bugi386 時才能用,一些早期的i486dx-100 晶元在處理「hlt」 指令時會有問題,執行該指令後不能可靠的返回作業系統,使用該選項,可以讓linux 系統在cpu 空閒的時候不要掛起cpu 。 6

、root=...

該引數告訴核心啟動時使用哪個裝置作為根檔案系統。比如可以指定根檔案為hda8 :root=/dev/hda8 。 7

、ro 和rw ro

引數告訴核心以唯讀方式載入根檔案系統,以便進行檔案系統完整性檢查,比如執行fsck ;rw 引數告訴核心以讀寫方式載入根檔案系統,這是預設值。 8

、reserve=...

保留埠號。格式:reserve=iobase,extent[,iobase, extent]... ,用來保護一定區域的i/o 埠不被裝置驅動程式自動探測。在某些機器上,自動探測會失敗,或者裝置探測錯誤或者不想讓核心初始化設 備時會用到該引數;比如:reserve=0x300,32 device=0x300 ,除device=0x300 外所有裝置驅動不探測0x300-0x31f 範圍的i/o 埠。 9

、mem=...

限制核心使用的記憶體數量。早期bios 設計為只能識別64m 以下的記憶體,如果你的記憶體數量大 於64m ,你可以指明,如果你指明的數量超過了實際安裝的記憶體數量,系統崩潰是遲早的事情。如:mem=0x1000000 意味著有16m 記憶體,如果是mem=0x6000000 ,就是96m 記憶體了。

注意:很多機型把部分記憶體作為bios 的對映,所以你在指定記憶體大小的時候一定要預留空間。你也可以在pentium 或者更新的cpu 上使用mem=nopentium 關閉4m 的頁表,這要在核心配置時申明。 10

、panic=n

預設情況,核心崩潰--kernel panic 後會宕機而不會重啟,你可以設定宕機多少秒之後重啟機器;也可以在/proc/sys/kernel/panic 檔案裡設定。 11

、reboot=[warm|cold][,[bios|hard]]

該選項僅當定義了config_bugi386 時才能用。2.0.22 的核心重啟預設為cool reboot ,warm reboot 更快,使用"reboot=bios" 可以繼承bios 的設定。 12

、nosmp 和maxcpus=n

僅當定義了__smp__ ,該選項才可用。可以用來禁用多cpu 或者指明最多支援的cpu 個數。

核心開發和除錯的啟動時引數

這些引數主要用在核心的開發和除錯上,如果你不進行類似的工作,你可以簡單的跳過本小節。 1

、debug

linux

的日誌級別比較多( 詳細資訊可以參看linux/kernel.h) ,一般地,日誌的守護程序klogd 只把比debug 級別高的日誌寫進磁碟;如果使用該選項,klogd 也把核心的debug 資訊寫進日誌。 2

、profile=n

在做核心開發的時候,如果想清楚的知道核心在什麼地方耗用了多少cpu 的時鐘週期,可以使用 核心的分析函式設定變數prof_shift 為非0 值,有兩種方式可以實現:一種是在編譯時指定,另一種就是通過「profile=」 來指定;他給出了乙個相當於最小單位--即時鐘週期;系統在執行核心**的時候,profile[address >;>; prof_shift] 的值就會累加,你也可以從/proc/profile 得到關於它的一些資訊。 3

、swap=n1,n2,n3,n4,n5,n6,n7,n8

設定核心交換演算法的八個引數:max_page_age, page_advance, page_decline,page_initial_age, age_cluster_fract, age_cluster_min, pageout_weight,bufferout_weight 。 4

、buff=n1,n2,n3,n4,n5,n6

設定核心緩衝記憶體管理的六個引數:max_buff_age, buff_advance, buff_decline,buff_initial_age, bufferout_weight, buffermem_grace 。

使用ramdisk 的引數

(僅當核心配置並編譯了config_blk_dev_ram) 。一般的來說,使用ramdisk 並不是一件好事,系統自己會更加有效的使用可用的記憶體;但是,在啟動或者製作啟 動盤時,使用ramdisk 可以很方便的裝載軟盤等裝置上的映象( 尤其是安裝程式、啟動過程中) ,因為在正真使用物理磁碟之前,必須要載入一些必要的模 塊,比如檔案系統模組,scsi 驅動等( 可以參見我的initrd-x.x.x.img

檔案分析-製作安裝程式不支援的根檔案系統

) 。

早期的ramdisk( 比如1.3.48 的核心) 是靜態分配的,必須以ramdisk=n 來指定ramdisk 的大小;現在ramdisk 可以動態增加。一共有四個引數,兩個布林型,兩個整形。 1

、load_ramdisk=n

如果n =1 ,就載入ramdisk ;如果n =0 ,就不載入ramdisk ;預設值為0 。 2

、prompt_ramdisk=n n

=1 ,提示插入軟盤;n =0 ,不提示插入軟盤;預設為1 。 3

、ramdisk_size=n 或者ramdisk=n

設定ramdisk 的最大值為n kb, 預設為4096kb 。 4

、ramdisk_start=n

設定ramdisk 的開始塊號為n ,當ramdisk 有核心的映象檔案是需要這個引數。 5

、noinitrd (

僅當核心配置了選項config_blk_dev_ram 和config_blk_dev_initrd) 現在的核心都可以支援initrd 了,引導程序首先裝載核心和乙個 初始化的ramdisk ,然後核心將initrd 轉換成普通的ramdisk ,也就是讀寫模式的根檔案系統裝置。然後linuxrc 執行,然後裝載真正的 根檔案系統,之後ramdisk 被解除安裝,最後執行啟動序列,比如/sbin/init 。

選項noinitrd 告訴核心不執行上面的步驟,即使核心編譯了initrd ,而是把initrd 的資料寫到/dev/initrd ,只是這是乙個一次性的裝置。

Linux作業系統核心啟動引數詳細解析

linux核心在啟動的時候,能接收某些命令列選項或啟動時引數。當核心不能識別某些硬體進而不能設定硬體引數或者為了避免核心更改某些引數的值,可以通過這種方式手動將這些引數傳遞給核心。如果不使用啟動管理器,比如直接從bios或者把核心檔案用 cp zimage dev fd0 等方法直接從裝置啟動,就不...

Linux作業系統核心啟動引數詳細解析

linux核心在啟動的時候,能接收某些命令列選項或啟動時引數。當核心不能識別某些硬體進而不能設定硬體引數或者為了避免核心更改某些引數的值,可以通過這種方式手動將這些引數傳遞給核心。如果不使用啟動管理器,比如直接從bios或者把核心檔案用 cp zimage dev fd0 等方法直接從裝置啟動,就不...

Linux作業系統核心啟動引數詳細解析

摘要 linux核心在啟動的時候,能接收某些命令列選項或啟動時引數。當核心不能識別某些硬體進而不能設定硬體引數或者為了避免核心更改某些引數的值,可以通過這種方式手動將這些引數傳遞給核心。關鍵字 linux 作業系統 linux核心在啟動的時候,能接收某些命令列選項或啟動時引數。當核心不能識別某些硬體...