核心啟動時怎麼處理啟動引數

2021-05-23 12:16:40 字數 1045 閱讀 3951

關鍵點:parse_args  __setup巨集

linux允許使用者通過bootloader傳遞核心配置選項給核心,例如

console=ttys1,115200n8 androidboot.hardware=eee_701 vga=788

核心在初始化過程中呼叫parse_args函式對這些選項進行解析,並呼叫相應的處理函式。

核心啟動時怎麼處理啟動引數的了:通過__setup巨集定義obs_kernel_param結構變數都被放入.init.setup段中,這樣一來實際是使.init.setup段變成一張表,kernel在處理每乙個啟動引數時,都會來查詢這張表,與每乙個資料項中的成員str進行比較,如果完全相同,就會呼叫該資料項的函式指標成員setup_func所指向的函式(該函式是在使用__setup巨集定義該變數時傳入的函式引數),並將啟動引數如root=後面的內容傳給該處理函式。

精髓是利用__setup巨集建立了字元和對應處理函式集合的表,parse_args函式依次將命令列引數與這個表比較,找到匹配了就執行對應的處理函式。

__setup巨集的**及使用

核心元件用__setup巨集來註冊關鍵字及相關聯 的任何文字都會作為輸入傳給

理。兩次解析

相應於__setup巨集和early_param巨集兩種註冊形式,核心在初始化時,呼叫了兩次parse_args函式進行解析。

parse_early_param();

parse_args("booting kernel", static_command_line, __start___param,

__stop___param - __start___param,

&unknown_bootoption);

parse_args的第一次呼叫就在parse_early_param函式裡面,為什麼會出現兩次呼叫parse_args的情況?這是因為核心選項又分成了兩種,就像現實世界中的我們,一種是普普通通的,一種是有特權的,有特權的需要在普通選項之前進行處理。

使用early_param宣告的那些選項就會首先由parse_early_param去解析。

WinForm啟動時接收引數

1 預設的main函式,修改如下 static class program 2 form1窗體的構造 public partial class form1 form public form1 string args 3 在另乙個程式裡呼叫編寫的exe程式 我使用下面的方式呼叫會報錯 system.d...

啟動時檢查

dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 spring 初始化完成,以便上線時,能及早發現問題,預設check true 可以通過check false 關閉檢查,比如,測試時,有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動。另外,如果你的 spring 容器...

servlet啟動時載入

servlet預設是在第一次訪問的時候建立的物件。servlet啟動時載入,就是讓 tomcat 伺服器啟動的時候建立servlet的物件 servlet物件是第一次被訪問的時候會被建立的,init方法就會執行。假設在init方法中做了一些比較耗時的操作 比如 載入了一些配置檔案並且解析可能需要花費...