linux核心原始碼閱讀(一)從何處閱讀原始碼

2021-08-20 19:42:15 字數 2208 閱讀 7741

像linux核心這樣龐大而複雜的程式看起來確實讓人望而生畏,它象乙個很大的球,沒有起點和終點。在讀源**的過程中,你會遇到這樣的情況,當讀到核心的某一部分時又會涉及到其它更多的檔案,當返回到原來的地方想繼續往下讀時,又忘了原來讀的內容。在internet上,很多人為此付出了很大的努力,製作出了源**導航器,這為源**閱讀提供了良好的條件,站點為:下面給出閱讀源**的一些線索。

在基於intel的系統上,當 loadlin.exe 或 lilo把核心裝入到記憶體並把控制權傳遞給核心時,核心開始啟動。關於這一部分,看arch/i386/kernel/head.s ,head.s進行特定結構的設定,然後跳轉到init/main.c的main()例程。

記憶體管理的**主要在/mm,但特定結構的**在arch/*/mm。缺頁中斷處理的**在mm/memory.c ,而記憶體對映和頁快取記憶體器的**在mm/filemap.c。緩衝器快取記憶體是在mm/buffer.c 中實現,而交換快取記憶體是在mm/swap_state.c 和mm/swapfile.c中實現。

核心中,特定結構的**在arch/*/kernel,排程程式在kernel/sched.c,fork的**在kernel/fork.c,task_struct 資料結構在 include/linux/sched.h中。

pci 偽驅動程式在 drivers/pci/pci.c ,其定義在include/linux/pci.h。每一種結構都有一些特定的 pci bios **, intel的在arch/alpha/kernel/bios32.c。

所有system v ipc 物件許可權都包含在 ipc_perm 資料結構中,這可以在  include/linux/ipc.h中找到。 system v 訊息是在 ipc/msg.c中實現, 共享記憶體在 ipc/shm.c中,訊號量在  ipc/sem.c中,管道在 ipc/pipe.c中實現。

核心的中斷處理**是幾乎所有的微處理器所特有的。中斷處理**在  arch/i386/kernel/irq.c中,其定義子在 include/asm-i386/irq.h中。

linux核心源**的很多行是裝置驅動程式。linux裝置驅動程式的所有源**都儲存在/driver,根據型別可進一步劃分為:

/block

塊裝置驅動程式如ide(在ide.c)。如果你想看包含檔案系統的所有裝置是如何被初始化的,你應當看drivers/block/genhd.c中的device_setup(),device_setup()不僅初始化了硬碟,當乙個網路安裝nfs檔案系統時,它也初始化網路。塊裝置包含了基於ide和scsi的裝置。

/char

這是看字元裝置(如tty,串列埠及滑鼠等)驅動程式的地方。

/cdrom

linux的所有cdrom**都在這兒,如在這兒可以找到soundblaster cdrom的驅動程式。注意ide cd的驅動程式是 ide-cd.c,放在drivers/block,scsi cd的驅動程式是scsi.c,放在drivers/scsi。

/pci

這是pci偽驅動程式的源**,在這裡可以看到pci子系統是如何被對映和初始化的。

/scsi

在這裡可以找到所有的scsi**及linux所支援的scsi裝置的所有裝置驅動程式。

/net

在這裡可以找到網路裝置驅動程式,如decchip 21040 pci 乙太網驅動程式在tulip.c中。

/sound

這是所有音效卡驅動程式的所在地。

ext2 檔案系統的源**全部在  fs/ext2/ 目錄下,而其資料結構的定義在  include/linux/ext2_fs.h, ext2_fs_i.h 及 ext2_fs_sb.h中。 虛擬檔案系統的資料結構在 include/linux/fs.h中描述,而**是在fs/*中。 緩衝區快取記憶體與更新核心的守護程序的實現是在 fs/buffer.c中 。

網路**儲存在/net中,大部分的include檔案在include/net下,bsd套節口**在net/socket.c中,ip 第4版本的套節口**在net/ipv4/af_inet.c。一般的協議支援**(包括sk_buff 處理例程)在net/core下,tcp/ip聯網**在net/ipv4下,網路裝置驅動程式在/drivers/net下。

核心模組的**部分在核心中,部分在模組包中,前者全部在kernel/modules.c中,而資料結構和核心守護程序kerneld的資訊分別在include/linux/module.h和include/linux/kerneld.h 中。如果你想看elf目標檔案的結構,它位於include/linux/elf.h中。

Linux核心原始碼 閱讀方法

url 通常linux會有以下目錄 arch 子目錄包括所有和體系結構相關的核心 它還有更深的子目錄,每乙個代表一種支援的體系結構 include 子目錄包括編譯核心所需要的大部分 include 檔案。它也有更深的子目錄,每乙個支援的體系結構乙個。include asm 是這個體系結構所需要的真實...

Linux核心原始碼閱讀 1

1 作業系統的基本知識 2 對c語言比較熟悉,最好要有組合語言的知識和gnu c對標準c的擴充套件的知識的了解。另外在閱讀之前,還應該知道linux核心源 的整體分布情況。我們知道現代的作業系統一般由程序管理 記憶體管理 檔案系統 驅動程式 網路等組成。看一下linux內 核源 就可看出,各個目錄大...

怎樣閱讀核心原始碼

1.獲取核心 2.目錄結構 在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程序管理 記憶體管理 文件系統 驅動程式和網路等組成。linux核心原始碼的各個目錄大致和此相對應,其組成如下 假設相對於linux 2.4.23目錄 arch目錄包括了任何和體系結構相關的...