Linux核心分析 第三週學習筆記

2022-05-05 14:48:08 字數 2449 閱讀 9202

arch目錄

占有相當龐大的空間

arch/x86目錄下的**是需要重點關注的。

arch下其他目錄可以刪掉。

init目錄

核心啟動相關的基本**基本都在init目錄下。

main.c 檔案中有乙個start_kernel函式,初始化linux核心的起點,這個函式相當於普通c程式的main函式。

kernel目錄

linux核心的核心**在kernel目錄中
其他

documentation 文件

drivers 驅動

fs-filesystem 檔案系統

include

ipc 程序間通訊

readme:

installing 怎樣安裝核心源**——怎麼解壓怎麼打補丁

make mrproper 把生成的中間**清理乾淨

menuconfig

核心啟動完成後進入menu程式,支援三個命令help、version和quit。

在原來配置的基礎上,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

(gdb)list # 可以看到start_kernel上下的**

(gdb)break rest_init

(gdb)c # 當前系統執行到rest_init

(gdb)list # 可以看到rest_init是在start_kernel的尾部呼叫的。

①構建menu系統的過程

②使用gdb進行除錯

③將斷點設定到start_kernal

④將斷點設定到rest_init

①在init目錄下main.c裡找到start_kernel函式

②全域性變數init_task,即手工建立的pcb,0號程序即最終的idle程序。

不管分析核心的哪一部分都會涉及到start_kernel.
③一些簡要提及的函式

trap_init() 初始化一些中斷向量

mm_init() 記憶體管理模組

sched_init() 排程模組

rest_init()中有kernel_thread(kernel_init,null,clone_fs),kernel_init中有run_init_process,建立了一號程序,預設路徑下的程式。

注意:init_process是一號程序。④建立kthread(乙個核心執行緒來管理系統的資源)。

啟動後,進入了乙個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...