文章目錄
- 一、核心獲得啟動參數的四種形式
- 二、核心啟動參數的格式與含義
- 三、參考資料
核心啟動參數解析
原創聲明:作者保留一切權力,轉載請註明出處。
所有資料均來源於互連網,若侵犯了您的權利,請告知,作者一定修正之。
一、核心獲得啟動參數的四種形式
>>>>>>>>> 引用
[1]Linux系統 kernel參數傳遞方式詳細解析
1、最常用的方式,就是在 make config裡修改“ General Setup”子功能表中的“ Defaultkernel command string”選項,通過修改這個選項來修改 include/linux/autoconf.h檔案中的 CONFIG_CMDLINE宏。
2、有的時候為了省去 make menuconfig的時間,並且核心命令也是固定的,就可以寫死核心 arch/arm/setup.c檔案 default_command_line,這個變數本來是初始化為 CONFIG_CMDLINE的。
3、除了方法 1之外,另外一種正規的方法就是將核心命令寫入核心參數表中,然後通過 start_kernel()->setup_arch()->parse_tags()->parse_tag()->parse_tag_cmdline()函數來將核心參數表中的核心命令覆蓋 default_command_line變數(當然你首先得有核心參數表)。
4、最後,有的板子會採取直接將核心命令通過 bootloader傳遞給核心
<Q001>怎樣傳遞呢?
<A001>[2]核心參數問題
在 UBOOT中使用 bootm命令可以將參數傳遞給核心(其實就是將參數放到 DRAM_BASE+0x00000100處,然後核心從此處讀取)。
DRAM_BASE+0x00000100處是否有 TAG LIST,有的話從此處讀取;
若沒有,則使用 default_command_line,這個就是在配置核心 make menuconfig的時候設定的,即 CONFIG_CMDLINE。
>>>>>>>>> 引用
二、核心啟動參數的格式與含義
命令列的格式類似於下面的樣子
CONFIG_CMDLINE="mem=64M console=ttySAC0 root=/dev/ram initrd=0xc0800000,0x00800000 ramdisk_size=2048 rw"
<Q002>每個關鍵字分別代表什麼含義,系統怎樣解析呢?
<A002>從原理上,簡單地講,核心是做字串解析。首先對整個字串按空格分隔開,每個子串又由等號分隔。等號左邊是系統預定義的關鍵字,等號右邊是對應關鍵字解析函數的參數。
>>>>>>>>> 引用
[3]Linux核心啟動參數詳解
所有型如“ name= value”參數,如果沒有被上面所述的設定函數 [指系統預定義關鍵字的解析函數 ]接收,將被解釋為系統啟動後的環境變數,
比如“ TERM=vt100”就會被作為一個啟動時參數。
所有沒有被核心設定函數接收也沒又被設定成環境變數的參數都將留給 init進程處理,比如“ single”。
>>>>>>>>> 引用
<Q003> 系統已經支援哪些關鍵字,即其含義是什嗎?
<A003>
最詳盡的解釋無疑來自《 Linux Kernel in a Nutshell》 一書,第九章。
下面是國內部落格轉載的一個串連地址。
[4]Linux Kernel in a Nutshell
你還可以添加自訂的啟動參數和對應的解析函數。
[5]增加自訂的核心啟動參數
三、參考資料
[1]Linux系統 kernel參數傳遞方式詳細解析
http://www.bitscn.com/os/linux/200710/116553.html
[2]核心參數問題
http://linux.chinaunix.net/techdoc/system/2007/08/25/966304.shtml
[3]Linux核心啟動參數詳解 http://edu.codepub.com/2009/1213/18715.php
[4]Linux Kernel in a Nutshell
http://blog.chinaunix.net/u2/76263/showart_1212604.html
[5]增加自訂的核心啟動參數
http://linux.chinaunix.net/techdoc/install/2009/08/31/1133192.shtml