天天看點

圖解linux核心編譯架構

核心是如何編譯成的

-知其然而不知其是以然

(第一篇)

轉載:http://blog.chinaunix.net/uid-28236237-id-3840137.html

Linux核心有分門别類的目錄,每個目錄包含了不同過能的子產品代碼。大家一般把這個結構叫做linux代 碼樹。樹必然是一個非常恰當的比喻,枝分枝,密密麻麻,參差不窮。那編譯核心的時候核心的編譯系統是如何将這麼多的檔案編譯連結起來最後形成一個可運作的 鏡像檔案的呢。這篇文章主要從較高的層面串聯出這個過程,使得我們能在頭腦裡形成一個核心編譯的過程。核心編譯系統本來就是相當複雜的,這裡我們隻描述編 譯過程,至于這個過程是如何通過Makefile來實作的,這裡不做分析。這也是為什麼叫做“知其然而不知其是以然”

第一節 圖解linux核心編譯系統

圖解linux核心編譯架構

核心在編譯生成可運作的核心鏡像之前,必須生成一個vmlinux組建。實際上這個vmlinux已經包含了核心的絕大部分子產品。是組成核心的最重要的部 分。通過下面的圖,我們可以清晰的看到這個vmlinux組建是哪些子產品連接配接組成的。至于圖中built-in.o又是如何生成的,本篇就不再複述了。總 之核心首先會編譯出圖中紅框框中的五大組建,最後連結生成vmlinux。而五大組建又可以拆分成很多小的組建,具體vmlinux由哪些元件連結而成可 分析下面的指令

/usr/local/arm/3.4.1/bin/arm-linux-ld -EL  -p --no-undefined -X -o vmlinux

-T arch/arm/kernel/vmlinux.lds \

arch/arm/kernel/head.o

arch/arm/kernel/init_task.o  

init/built-in.o

--start-group  

usr/built-in.o  

arch/arm/kernel/built-in.o

arch/arm/mm/built-in.o  

arch/arm/common/built-in.o  

arch/arm/mach-s3c2410/built-in.o  

arch/arm/nwfpe/built-in.o  

kernel/built-in.o  

mm/built-in.o  

fs/built-in.o  

ipc/built-in.o  

security/built-in.o  

crypto/built-in.o  

lib/lib.a  

arch/arm/lib/lib.a  

lib/built-in.o  

arch/arm/lib/built-in.o  

drivers/built-in.o  

sound/built-in.o  

net/built-in.o

--end-group

.tmp_kallsyms2.o

繼續閱讀