Linux內核中Makefile、Kconfig和.config的關系


轉載:http://emb.hqyj.com/Column/7565.html
1、Linux內核如此龐大(幾萬個文件),目錄又分為很多層,它是如何將各層目錄下的文件關聯起來的?

linux內核通過層層目錄管理,形成了一個樹形目錄[內核源碼樹],這是一個樹形結構。從數據結構管理方面看,對於一顆非標准樹,還是有辦法將其進行遍歷的,只是算法比較復雜而已。那么在linux內核源碼的這棵樹,就是
就是通過Kconfig文件建立各層子目錄之間的連接,通過Makefile文件來選擇各個目錄下的對應的文件是否被編譯,而.config文件就是總控制台,控制Makefile文件去編譯指定的程序代碼文件。而這一切控制關系是有Kconfig文件建立起來的。

2、Linux支持如此多的架構(X86、ARM、AVR、mips等等),為何我們在使用某一架構的芯片,比如x210時,其他架構的代碼不會被編譯?並且同為ARM架構下的其他系列SOC架構相關的代碼不被編譯?

make xx_defconfig和make menuconfig結合生成正確的.config文件
make xx_defconfig生成一個基礎的。默認的.config文件,此文件的內容就包含了架構相關的東西,所以在進行linux內核源碼編譯時,根據.config文件的基本配置,尋找架構相關的代碼進行編譯和設置相關的代碼進行編譯。總之以.config這個控制台為准。
make menuconfig只是為了修改一些驅動模塊和要編譯的一些程序,沒有架構相關。

3、在編譯內核前,執行命令:make menuconfig的意義為何?
make menuconfig就是以菜單的形式打開內核源碼的樹形結構,然后程序員在默認配置的基礎上自行配置和選擇需要編譯的模塊代碼。

其實能做這個工作的命令有很多,比如:
•make config:基於文本的最為傳統的配置界面,太復雜,不直觀,不推薦使用。
•make xconfig:基於圖形窗口模式的配置界面,直觀明了,Xwindow界面下推薦使用。
•make oldconfig:如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩,可以使用。
•make menuconfig:基於文本選單的配置界面,直觀明了,字符終端下推薦使用。

大概好像這幾種吧,其實還有一種就是,手動修改.config文件,呵呵!相信基本上沒人會去干這種事的。

4.編譯內核時,執行命令:make zImage的意義為何?
*
目的:生成zImage或者uImage的內核鏡像。

當然,有人在疑問了,在編譯Firefly的RK3288開發板時,執行的命令是make firefly-rk3288.img ,而不是上面的任何一個,其實這是Firefly修改過的方法了,其實說白了也就是一個名字而已。這個不要太過糾結,想具體了解的話,答案就在Firefly提供的內核源碼內。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM