引用出處:
像linux
核心這樣龐大而複雜的程式看起來確實讓人望而生畏,它象乙個很大的球,沒有起點和終點。在讀源**的過程中,你會遇到這樣的情況,當讀到核心的某一部分時又會涉及到其它更多的檔案,當返回到原來的地方想繼續往下讀時,又忘了原來讀的內容。在
internet
上,很多人為此付出了很大的努力,製作出了源**導航器,這為源**閱讀提供了良好的條件,
下面給出閱讀源**的一些線索。
1. 系統的啟動和初始化
在基於intel
的系統上,當
loadlin.exe
或lilo
把核心裝入到記憶體並把控制權傳遞給核心時,核心開始啟動。關於這一部分,看
arch/i386/kernel/head.s
,head.s
進行特定結構的設定,然後跳轉到
init/main.c
的main()
例程。
2. 記憶體管理
記憶體管理的**主要在
/mm,但特定結構的**在
arch/*/mm
。缺頁中斷處理的**在
mm/memory.c
,而記憶體對映和頁快取記憶體器的**在
mm/filemap.c
。緩衝器快取記憶體是在
mm/buffer.c
中實現,而交換快取記憶體是在
mm/swap_state.c
和mm/swapfile.c
中實現。
3. 核心
核心中,特定結構的**在
arch/*/kernel
,排程程式在
kernel/sched.c
,fork
的**在
kernel/fork.c
,task_struct
資料結構在
include/linux/sched.h中。
4.pci
pci
偽驅動程式在
drivers/pci/pci.c
,其定義在
include/linux/pci.h
。每一種結構都有一些特定的
pci bios
**,intel
的在arch/alpha/kernel/bios32.c。
5.程序間通訊 所有
system v ipc
物件許可權都包含在
ipc_perm
資料結構中,這可以在
include/linux/ipc.h
中找到。
system v
訊息是在
ipc/msg.c
中實現,
共享記憶體在
ipc/shm.c
中,訊號量在
ipc/sem.c
中,管道在
ipc/pipe.c
中實現。
6. 中斷處理
核心的中斷處理**是幾乎所有的微處理器所特有的。中斷處理**在
arch/i386/kernel/irq.c
中,其定義子在
include/asm-i386/irq.h中。
7. 裝置驅動程式
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
這是所有音效卡驅動程式的所在地。
8. 檔案系統
ext2
檔案系統的源**全部在
fs/ext2/
目錄下,而其資料結構的定義在
include/linux/ext2_fs.h, ext2_fs_i.h
及ext2_fs_sb.h
中。虛擬檔案系統的資料結構在
include/linux/fs.h
中描述,而**是在
fs/*
中。緩衝區快取記憶體與更新核心的守護程序的實現是在
fs/buffer.c中。
8. 網路
網路**儲存在
/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下。
9. 模組
核心模組的**部分在核心中,部分在模組包中,前者全部在
kernel/modules.c
中,而資料結構和核心守護程序
kerneld
的資訊分別在
include/linux/module.h
和include/linux/kerneld.h
中。如果你想看
elf目標檔案的結構,它位於
include/linux/elf.h中。
Linux核心學習
交叉工具鏈 核心相關知識 linux系統的構成 使用者空間 核心空間 思考 為什麼劃分為兩個層次?目的其實是為保護作業系統,防止應用程式的異常導致作業系統崩潰。核心空間與使用者空間是程式執行的兩種不同狀態,通過系統呼叫和硬體中斷能夠完成從使用者空間到核心空間的轉移。那麼linux的核心由哪些構成呢?...
linux 核心學習
linux核心獲取 官網 linux作業系統的核心是模組化,可以使用lsmod命令檢視核心模組,下面展示已載入系統的模組 root 172.16.0.55 vendor composer test lsmod module size used by nfnetlink queue 8111 0 nf...
linux 核心學習(2)
linux核心原始碼樹大體結構 由於linux的原 持續在變化,所以不可能給出太詳細的內容,只能指出乙個特殊的驅動大概會出現在什麼地方。makefile 這是整個的原始碼樹的最頂層的makefile。它定義了很多的有用的變數和規則,如預設的gcc編譯標誌。arch 所有的特殊的體系結構的 都在這個目...