arch目錄
占有相當龐大的空間init目錄arch/x86目錄下的**是需要重點關注的。
arch下其他目錄可以刪掉。
核心啟動相關的基本**基本都在init目錄下。kernel目錄main.c 檔案中有乙個start_kernel函式,初始化linux核心的起點,這個函式相當於普通c程式的main函式。
linux核心的核心**在kernel目錄中其他
documentation 文件readme:drivers 驅動
fs-filesystem 檔案系統
include
ipc 程序間通訊
installing 怎樣安裝核心源**——怎麼解壓怎麼打補丁核心啟動完成後進入menu程式,支援三個命令help、version和quit。make mrproper 把生成的中間**清理乾淨
menuconfig
在原來配置的基礎上,make menuconfig選中如下選項重新配置linux,使之攜帶除錯資訊(由於在實驗樓中操作,因此省略個別步驟)
make重新編譯
開啟另外乙個shell
gdb除了前半部分提及的,以下部分為補充:(gdb)file linux-3.18.6/vmlinux # 在gdb介面中targe remote之前載入符號表
(gdb)target remote:1234 # 建立gdb和gdbserver之間的連線,按c 讓qemu上的linux繼續執行
(gdb)break start_kernel # 斷點的設定可以在target remote之前,也可以在之後
(gdb)c # 系統開始啟動,啟動到start_kernel①構建menu系統的過程(gdb)list # 可以看到start_kernel上下的**
(gdb)break rest_init
(gdb)c # 當前系統執行到rest_init
(gdb)list # 可以看到rest_init是在start_kernel的尾部呼叫的。
②使用gdb進行除錯
③將斷點設定到start_kernal
④將斷點設定到rest_init
①在init目錄下main.c裡找到start_kernel函式
②全域性變數init_task,即手工建立的pcb,0號程序即最終的idle程序。
不管分析核心的哪一部分都會涉及到start_kernel.③一些簡要提及的函式
trap_init() 初始化一些中斷向量注意:init_process是一號程序。④建立kthread(乙個核心執行緒來管理系統的資源)。mm_init() 記憶體管理模組
sched_init() 排程模組
rest_init()中有kernel_thread(kernel_init,null,clone_fs),kernel_init中有run_init_process,建立了一號程序,預設路徑下的程式。
啟動後,進入了乙個cpu_idle,cpu_idle_loop,即乙個while(0)的無限迴圈,或者說是idle程序,它作為0號程序適中存在於系統中。
當系統沒有程序需要執行時就需要排程idle程序。
sched_init()初始化函式內對0號程序,即idle程序進行初始化。然後rest_init()其他初始化函式,函式內將建立1號程序,即init程序。隨後rest_init實際上就是start_kernel核心一啟動的時候會一直存在,這個就叫0號程序;0號程序建立了1號程序kernel_init和其他服務執行緒。這就是核心的啟動過程。
學號:20135313
《linux核心分析》mooc課程
學號:20135313
《linux核心分析》mooc課程
學習Linux第三週
1.顯示 etc目錄下以非字母開頭,後接乙個字母加任意長度字元的檔案與目錄 cd etc ls alpha alpha 2.複製 etc目錄下所有以p開頭,以非數字結尾的檔案或目錄到 tmp mytest1目錄中 cd tmp mkdir mytest1 cd etc cp r p digit tm...
第三週筆記
1什麼是注釋 注釋是用來介紹 的功能 也可以注釋一些 讓它不執行 2編譯好的class檔案注釋是不存在的 注釋只存在源 裡 1單行注釋 後面就是注釋內容 例如 2多行注釋 多行注釋 多行注釋 例如 3文件注釋 可以生成今後使用的功能說明書 1.0有固定書寫位置 類上可以寫 屬性上可以寫 方法可以寫 ...
第三週筆記
bytes bytes型別,不可變位元組序列.編碼和解碼 encode encoding utf 8 errors strict bytes decode encoding utf 8 errors strict bytes bytes型別的資料索引出的字元是int型別,如 a b abcde by...