在進行 linux 內(nèi)核的配置編譯的時候,最常見的就是 make menuconfig 命令。總所周知,linux是一個模塊化定制的系統(tǒng),那么它又是如何來實現(xiàn)模塊化的配置的呢?
成都創(chuàng)新互聯(lián) - 成都二樞機房,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽服務(wù)器托管,德陽服務(wù)器托管,遂寧服務(wù)器托管,綿陽服務(wù)器托管,四川云主機,成都云主機,西南云主機,成都二樞機房,西南服務(wù)器托管,四川/成都大帶寬,服務(wù)器機柜,四川老牌IDC服務(wù)商在配置的過程中,我們最重要的就是理清楚 kconfig、.config 、 menuconfig之間的關(guān)系。
在Linux內(nèi)核中,添加驅(qū)動代碼一般有3部:
將代碼拷貝到Linux內(nèi)核代碼恰當?shù)牡胤?/p>
新建或者修改對應(yīng)的kconfig文件
新建或修改對應(yīng)的makefile文件
Kconfig --->(每個源碼目錄下)提供編譯選項
.config --->(源碼頂層目錄下)保存選擇結(jié)果
Makefile--->(每個源碼目錄下)根據(jù).config中的內(nèi)容來告知編譯系統(tǒng)如何編譯
1.1 deconfig 文件一般由平臺廠商提供,內(nèi)核編譯用做.config
的參考,注意:如果,缺少該文件,無法進行編譯。
文件位于:\kernel..\arch\arm\configs\xxx_defconfig
默認情況下是沒有.config
文件的,配置過程就是為了產(chǎn)生.config
文件。內(nèi)核在編譯過程中會讀取.config
中的配置項,并且用這些配置項去指導(dǎo)整個編譯鏈接過程。.config
文件的格式類似于腳本文件,其中內(nèi)容為類似于于:CONFIG_ARM=y
的一個一個的配置項。這些配置項就類似于腳本文件中定義的一個一個變量,所以這一行可以被理解為定義了一個變量CONFIG_ARM
,這個變量的值為 y。.config
文件中每一行都是一個配置項,從.config
文件的規(guī)模可以看出linux內(nèi)核的可配置項有兩三千個。所以linux內(nèi)核是高度可配置的,而且linux內(nèi)核的所有配置項很難全部搞明白。因為linux內(nèi)核的配置項太多太繁雜,因此linux內(nèi)核不像uboot那樣直接手工配置,而是發(fā)明了一個圖形化的配置工具 menuconfig。
.config文件是一個隱藏文件,要用"ls -a"才能看見,默認是沒有這個文件的,需要執(zhí)行配置命令(make xxxx_defconfig)后才會生成。.config文件最初就是由xxxx_defconfig文件復(fù)制得來,里面全是配置項,以行為單位。每個配置項的格式都是CONFIG_xxx=x,每個配置項都可以在menuconfig中找到。CONFIG_xxx是配置項的名字,該配置項在menuconfig中的名字就是xxx,等號后面是配置的結(jié)果,可以是Y、N、M,Y代表編譯連接此模塊,N代表不編譯此模塊,M代表將該模塊單獨編譯成.ko文件。
總結(jié):.config文件最初由xxxx_defconfig文件復(fù)制得來,然后可以在menuconfig中做修改,最終Makefile會讀取.config文件,里面的每個配置項都會指導(dǎo)內(nèi)核的編譯。
1.2 kconfigkconfig
是一種特定格式的腳本文件,分布在各目錄下的Kconfig
構(gòu)成了一個分布式的內(nèi)核配置數(shù)據(jù)庫,每個Kconfig
分別描述了所屬目錄源文件相關(guān)的內(nèi)核配置菜單。在內(nèi)核配置make menuconfig(或xconfig等)
時,從Kconfig
中讀出配置菜單,用戶配置完后保存到.config
(在頂層目錄下生成)中,供 Makefile 文件在編譯內(nèi)核時使用。
kconfig腳本的格式如下圖所示:
1.3 makefile分布在各個目錄下,用于集成編譯。
defconfig、 .config 、kconfig 與makefile的用途與關(guān)系
defconfig、 .config 、kconfig 與makefile和make menuconfig流程
2. 內(nèi)核中修改和保存defconfig的方法從.config到defcong不是簡單的復(fù)制操作,而是make arch=arm64 defcong
通過menuconfig生成的.confg也不是直接拷貝成defcong,而是使用make savedefconfig,具體步驟如下:
arch/arm/configs
下的文件xxx_defconfig
make xxx_defconfig
會生成.config
文件。make menuconfig
修改配置后保存。make savedefconfig
生成defconfig
文件。cp defconfig arch/arm/configs/xxx_defconfig
保存這樣保存的defconfig
文件,配置最小化。make xxx_defconfig生成的.config可以直接make zImage
相當于cp arch/arm/configs/xxx_defconfig .config 再執(zhí)行make menuconfig的效果。
make menuconfig 后會加入通用未使能的配置項,去除配置項執(zhí)行 make savedefconfig命令
正確地保存編譯內(nèi)核產(chǎn)生的.config文件-使用make savedefconfig
3. 常用配置命令解釋config 使用基于行的程序更新當前配置
nconfig 使用ncurses基于菜單的程序更新當前配置
menuconfig 使用基于菜單的程序更新當前配置
xconfig 使用基于Qt的前端更新當前配置
gconfig 使用基于GTK +的前端更新當前配置
oldconfig 使用提供的.config作為基礎(chǔ)更新當前配置
localmodconfig 更新當前配置禁用未加載的模塊
localyesconfig 更新當前配置,將本地mod轉(zhuǎn)換到內(nèi)核
defconfig 默認來自Arch提供的defconfig的新配置
savedefconfig 將當前配置保存為./defconfig(最小配置)
allnoconfig 新配置,其中所有選項均以“否”回答
allyesconfig 新配置,其中所有選項都被'yes'接受
allmodconfig 盡可能新配置選擇模塊
alldefconfig 新配置,所有符號都設(shè)置為默認值
randconfig 新配置,隨機回答所有選項
listnewconfig 列出新選項
olddefconfig 與oldconfig相同,但在沒有提示的情況下將新符號設(shè)置為其默認值
kvmconfig 為KVM虛擬機內(nèi)核支持啟用其他選項
xenconfig 為xen dom0和虛擬機內(nèi)核支持啟用其他選項
tinyconfig 配置最小的內(nèi)核
make config
基于命令行的,文本式的,交互式的,對話式的,配置。—不太方便使用。
make menuconfig
基于菜單式的,屬于帶圖形界面的,或者叫輔助圖形界面,基于ncurses庫。—方便使用
make xconfig
真正的,圖形界面的配置,用到的是QT的庫。但是個人覺得界面效果也不是很好。
加上由于用到額外的圖形庫,所以用起來也不是那么的廣泛。
make gconfig
也是圖形界面。用到的是GTK的庫。
make defconfig
調(diào)用默認的配置。
其和上面三個:make config,make menuconfig,make xconfig,不是一伙的。
其不是另外一種配置的方式。而是(直接去)使用某個默認的配置,即和配置內(nèi)容相關(guān)。和使用何種配置方式(命令行,還是圖形界面等等)無關(guān)。
make oldconfig
其使用old,舊的配置。
目的在于:盡量使用之前的配置(去用都當前的,新的,后者是別的內(nèi)核或某軟件的配置),以達到節(jié)省時間的目的。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧