關鍵點: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方法中做了一些比較耗時的操作 比如 載入了一些配置檔案並且解析可能需要花費...