linux内核和w,Linux内核中Makefile、Kconfig和.config的关系
轉(zhuǎn)載:http://emb.hqyj.com/Column/7565.html 1、Linux內(nèi)核如此龐大(幾萬個(gè)文件),目錄又分為很多層,它是如何將各層目錄下的文件關(guān)聯(lián)起來的?
linux內(nèi)核通過層層目錄管理,形成了一個(gè)樹形目錄[內(nèi)核源碼樹],這是一個(gè)樹形結(jié)構(gòu)。從數(shù)據(jù)結(jié)構(gòu)管理方面看,對于一顆非標(biāo)準(zhǔn)樹,還是有辦法將其進(jìn)行遍歷的,只是算法比較復(fù)雜而已。那么在linux內(nèi)核源碼的這棵樹,就是 就是通過Kconfig文件建立各層子目錄之間的連接,通過Makefile文件來選擇各個(gè)目錄下的對應(yīng)的文件是否被編譯,而.config文件就是總控制臺,控制Makefile文件去編譯指定的程序代碼文件。而這一切控制關(guān)系是有Kconfig文件建立起來的。
2、Linux支持如此多的架構(gòu)(X86、ARM、AVR、mips等等),為何我們在使用某一架構(gòu)的芯片,比如x210時(shí),其他架構(gòu)的代碼不會被編譯?并且同為ARM架構(gòu)下的其他系列SOC架構(gòu)相關(guān)的代碼不被編譯?
make xx_defconfig和make menuconfig結(jié)合生成正確的.config文件 make xx_defconfig生成一個(gè)基礎(chǔ)的。默認(rèn)的.config文件,此文件的內(nèi)容就包含了架構(gòu)相關(guān)的東西,所以在進(jìn)行l(wèi)inux內(nèi)核源碼編譯時(shí),根據(jù).config文件的基本配置,尋找架構(gòu)相關(guān)的代碼進(jìn)行編譯和設(shè)置相關(guān)的代碼進(jìn)行編譯。總之以.config這個(gè)控制臺為準(zhǔn)。 make menuconfig只是為了修改一些驅(qū)動模塊和要編譯的一些程序,沒有架構(gòu)相關(guān)。
3、在編譯內(nèi)核前,執(zhí)行命令:make menuconfig的意義為何? make menuconfig就是以菜單的形式打開內(nèi)核源碼的樹形結(jié)構(gòu),然后程序員在默認(rèn)配置的基礎(chǔ)上自行配置和選擇需要編譯的模塊代碼。
其實(shí)能做這個(gè)工作的命令有很多,比如: ?make config:基于文本的最為傳統(tǒng)的配置界面,太復(fù)雜,不直觀,不推薦使用。 ?make xconfig:基于圖形窗口模式的配置界面,直觀明了,Xwindow界面下推薦使用。 ?make oldconfig:如果只想在原來內(nèi)核配置的基礎(chǔ)上修改一些小地方,會省去不少麻煩,可以使用。 ?make menuconfig:基于文本選單的配置界面,直觀明了,字符終端下推薦使用。
大概好像這幾種吧,其實(shí)還有一種就是,手動修改.config文件,呵呵!相信基本上沒人會去干這種事的。
4.編譯內(nèi)核時(shí),執(zhí)行命令:make zImage的意義為何? * 目的:生成zImage或者uImage的內(nèi)核鏡像。
當(dāng)然,有人在疑問了,在編譯Firefly的RK3288開發(fā)板時(shí),執(zhí)行的命令是make firefly-rk3288.img ,而不是上面的任何一個(gè),其實(shí)這是Firefly修改過的方法了,其實(shí)說白了也就是一個(gè)名字而已。這個(gè)不要太過糾結(jié),想具體了解的話,答案就在Firefly提供的內(nèi)核源碼內(nèi)。
總結(jié)
以上是生活随笔為你收集整理的linux内核和w,Linux内核中Makefile、Kconfig和.config的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10内核linux,windows
- 下一篇: linux编辑模式复制快捷键,Linux