如何看核心原始碼

2022-05-09 21:47:41 字數 2812 閱讀 3076

在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程序管理、記憶體管理、檔案系統、驅動程式和網路等組成。linux核心原始碼的各個目錄大致與此相對應,其組成如下(假設相對於linux-2.4.23目錄):

arch目錄包括了所有和體系結構相關的核心**。它下面的每乙個子目錄都代表一種linux支援的體系結構,例如i386就是intel cpu及與之相相容體系結構的子目錄。pc機一般都基於此目錄。

include目錄包括編譯核心所需要的大部分標頭檔案,例如與平台無關的標頭檔案在include/linux子目錄下。

init目錄包含核心的初始化**(不是系統的引導**),有main.c和version.c兩個檔案。這是研究核心如何工作的好起點。

mm目錄包含了所有的記憶體管理**。與具體硬體體系結構相關的記憶體管理**位於arch/*/mm目錄下。

drivers目錄中是系統中所有的裝置驅動程式。它又進一步劃分成幾類裝置驅動,每一種有對應的子目錄,如音效卡的驅動對應於drivers/sound。

ipc目錄包含了核心程序間的通訊**。

modules目錄存放了已建好的、可動態載入的模組。

fs目錄存放linux支援的檔案系統**。不同的檔案系統有不同的子目錄對應,如ext3檔案系統對應的就是ext3子目錄。

kernel核心管理的核心**放在這裡。同時與處理器結構相關**都放在arch/*/kernel目錄下。

net目錄裡是核心的網路部分**,其每個子目錄對應於網路的乙個方面。

lib目錄包含了核心的庫**,不過與處理器結構相關的庫**被放在arch/*/lib/目錄下。

scripts目錄包含用於配置核心的指令碼檔案。

documentation目錄下是一些文件,是對每個目錄作用的具體說明。

一般在每個目錄下都有乙個.depend檔案和乙個makefile檔案。這兩個檔案都是編譯時使用的輔助檔案。仔細閱讀這兩個檔案對弄清各個檔案之間的聯絡和依託關係很有幫助。另外有的目錄下還有readme檔案,它是對該目錄下檔案的一些說明,同樣有利於對核心原始碼的理解。

在閱讀方法或順序上,有縱向與橫向之分。所謂縱向就是順著程式的執行順序逐步進行;所謂橫向,就是按模組進行。它們經常結合在一起進行。對於linux啟動的**可順著linux的啟動順序一步步來閱讀;對於像記憶體管理部分,可以單獨拿出來進行閱讀分析。實際上這是乙個反覆的過程,不可能讀一遍就理解。

[[email protected] /home/ahao.mah/gotby/tool]

#ll /usr/src/kernels/3.10.0-327.ali2000.alios7.x86_64/

total 3908

drwxr-xr-x 32 root root 4096 dec 28 19:27 arch

drwxr-xr-x 3 root root 4096 dec 28 19:27 block

drwxr-xr-x 4 root root 4096 dec 28 19:27 crypto

drwxr-xr-x 113 root root 4096 dec 28 19:27 drivers

drwxr-xr-x 2 root root 4096 dec 28 19:27 firmware

drwxr-xr-x 74 root root 4096 dec 28 19:27 fs

drwxr-xr-x 28 root root 4096 dec 28 19:27 include

drwxr-xr-x 2 root root 4096 dec 28 19:27 init

drwxr-xr-x 2 root root 4096 dec 28 19:27 ipc

-rw-r--r-- 1 root root 505 dec 29 2015 kconfig

drwxr-xr-x 11 root root 4096 dec 28 19:27 kernel

drwxr-xr-x 10 root root 4096 dec 28 19:27 lib

-rw-r--r-- 1 root root 49909 dec 29 2015 makefile

drwxr-xr-x 2 root root 4096 dec 28 19:27 mm

-rw-r--r-- 1 root root 900970 dec 29 2015 module.symvers

drwxr-xr-x 57 root root 4096 dec 28 19:27 net

drwxr-xr-x 12 root root 4096 dec 28 19:27 samples

drwxr-xr-x 13 root root 4096 dec 28 19:27 scripts

drwxr-xr-x 9 root root 4096 dec 28 19:27 security

drwxr-xr-x 23 root root 4096 dec 28 19:27 sound

-rw-r--r-- 1 root root 2955568 dec 29 2015 system.map

drwxr-xr-x 16 root root 4096 dec 28 19:27 tools

drwxr-xr-x 2 root root 4096 dec 28 19:27 usr

drwxr-xr-x 3 root root 4096 dec 28 19:27 virt

-rw-r--r-- 1 root root 41 dec 29 2015 vmlinux.id

使用objdump看核心原始碼

1.修改源 的頂層 makefile cc crosscom pile gcc 為 cc crosscom pile gcc g 使成生的vmlinux中含有debug資訊 2.所有生成 o 的 rule 中再加一條 其他引數除了 c外抄生成.o檔案用的引數 cc e dd c preprocess...

看QtDesigner原始碼

畢業有一年半了,很早就想著寫部落格,可是水平有限,表達能力也差好多,但是現在總結來說,好多東西都忘了,浪費了好多時間,所以開始寫東西吧。1.pro檔案檢視專案構成 template subdirs config qt subdirs src 樣板 模板 型板 就是乙個模板,然後我在data資料夾裡看...

看Linux核心原始碼 練內力必備技能

由於作業系統的核心貼近硬體,需要對計算機的體系結構有所了解,例如cpu的工作原理 介面特性和bios呼叫等。讀者千萬別因為這些望而卻步,這裡將介紹一些閱讀linux核心原始碼必備的技能。獲取核心 目錄結構 在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程序管理 記...