1. 在bootloader中會以taglist的形式儲存板子mem、cmdline(cmdline中也可以定義mem資訊)等相關資訊,cmdline通過getenv從環境變數取得(該環境變數是之前使用setenv以字串形式配置):addr和size。跳轉到kernel前,r0=0, r1=proc type, r2=tags pointer
2. kernel啟動首先會將r2暫存器的值(tags pointer)儲存到對應machine的mach info(mdesc->boot_params)中,然後在setup_arch中呼叫setup_machine取得tags的位址,並呼叫對應machine的fixup來初始化meminfo(mem bank的資訊);每種machine的mach_info靜態編譯在__proc_info_begin段中;關於cmdline的處理比較繞,每種tag都有對應的一種parse方式,以__tagtable(atag_cmdline, parse_tag_cmdline)形式宣告,在parse_tags中會按照tag型別parse,如果是atag_cmdline,在parse_tag_cmdline中,會將taglist傳遞過來的內容覆蓋default_command_line。可是在我的版本核心setup_arch中呼叫parse_tags函式只處理了atag_core,就是說cmdline始終是用的default值,為什麼?有待確認。
核心各引數分為兩種情況定義了處理方式,early_param和__setup,前者定義需要在其他引數處理前的引數處理函式,兩者分別最終分別在
parse_early_param
和parse_args進行解析,並呼叫各種引數的處理方式。
在do_early_param中,通過__setup_start和__setup_end,它遍歷了.init.setup段中的struct obs_kernel_param變數。如果p->early為真且為對應的選項字串,則呼叫註冊的處理函式p->setup_func。
而__setup定義的引數處理在parse_args->unknown_bootoption->obsolete_checksetup中分析,這裡會呼叫__setup註冊的處理函式。
linux kernel 啟動流程簡單分析
ping linux 核心啟動的時候,總是從start kernel 這個函式作為入口。start kernel完成了對各種資源的初始化。隨後,呼叫了rest init 完成對init程序的啟動。我們用gdb跟蹤linux kernel 核心啟動可以看到。1.我們把斷點置於start kernel ...
Linux Kernel啟動過程中的記憶體管理
linux kernel啟動過程中的記憶體管理 好的作業系統必然要有好的記憶體管理系統來支援。好的記憶體管理系統就像乙個藝術品,因為在其中我們可以看到空間優化和時間優化的完美平衡 既要省記憶體又要分配和釋放足夠快 linux為我們提供了這樣乙個範例,關於它的記憶體管理在很多講kernel的書都可以找...
Linux kernel中module相關命令集
linux的kernel能夠以動態的方式載入,解除安裝模組,以達到減小核心的大小,複雜度,以及增加核心的靈活性。目前,我知道的有lsmod,insmod,rmmod,modprobe四條命令,現在分別總結記錄這四條命令,命令後的模組名稱均不加字尾 如.ko或.o 1 lsmod 即list modu...