|
在嵌入式領(lǐng)域當(dāng)中,在配置內(nèi)核的時(shí)候會(huì)有很多配置方法,比如說make config(基于文本的為傳統(tǒng)的配置界面)、make oldconfig(如何只想在原來內(nèi)核配置的基礎(chǔ)上修改一部分,則會(huì)省去很多麻煩)、make xconfig(基于圖形窗口模式的配置界面,Xwindow下推薦使用)、make menuconfig(基于文本選擇的配置界面,字符終端下推薦使用),以上4種配置方式的目的都是在源碼的頂層目錄下面生成一個(gè).config文件,那么在我們嵌入式開發(fā)當(dāng)中,經(jīng)常使用的和推薦使用的是make menuconfig這種配置方法。
更多嵌入式驅(qū)動(dòng)技術(shù)文章(純干貨資料)地址:http://superedu.hqyj.com/xuexi/bowen/?lcg-ee
現(xiàn)在以linux-3.14.25內(nèi)核為例,在內(nèi)核的源碼目錄下面,執(zhí)行make menuconfig命令。
在執(zhí)行命令的時(shí)候可能出現(xiàn)的錯(cuò)誤有:
1. 一些安裝包沒有提前安裝上;(根據(jù)錯(cuò)誤提示依次安裝)
2. 終端窗口太小導(dǎo)致錯(cuò)誤;
正常執(zhí)行make menuconfig之后會(huì)出現(xiàn)下面的菜單框:
大家可能有疑問,這個(gè)界面是通過什么來生成的呢?其實(shí)也很容易會(huì)知道,當(dāng)我們執(zhí)行make menuconfig后,肯定會(huì)執(zhí)行Makefile,那么我們打開Makefile文件來尋找menuconfig這個(gè)目標(biāo),但是是搜索不到的,這里有個(gè)技巧,我們使用%config來搜索,%是通配符的意思,會(huì)搜索到相關(guān)目標(biāo):
那么我們就會(huì)看到,繪制圖形和解析這個(gè)界面的文件都會(huì)在scripts/kconfig目錄下面,比較重要的文件有mconf.c和lxdialog目錄。如果感興趣的話可以研究,這里就不詳細(xì)說明了。
進(jìn)入菜單之后我們可以看到有標(biāo)題、有說明性的文字、和關(guān)鍵的選項(xiàng)。它們又是如何呈現(xiàn)在菜單中的呢,其實(shí)系統(tǒng)會(huì)讀取源碼目錄下面Kconfig文件,Kconfig文件是一個(gè)幫助內(nèi)核添加內(nèi)核選項(xiàng)的一個(gè)配置文件,打開這個(gè)Kconfig文件可以看到:
大家可以觀察到,我們打開的菜單是有很多的選項(xiàng)的,既然Kconfig是一個(gè)添加選項(xiàng)的配置文件,那么這個(gè)文件中為什么這么少的內(nèi)容呢,其實(shí)關(guān)鍵點(diǎn)在
source “arch/$SRCARCH/Kconfig”,這句話的意思就是調(diào)用其它目錄下面的Kconfig文件,所以我們需要打開arch/$SRCARCH/Kconfig文件,但是SRCARCH這個(gè)變量的值又是如何確定的呢?很簡(jiǎn)單,它是在源碼頂層目錄下的Makefile中賦值的,ARCH=arm,所以我們需要進(jìn)入到arch/arm/Kconfig文件中,進(jìn)來之后大家就會(huì)看到非常多的選項(xiàng)了,同時(shí)也會(huì)調(diào)用很多各個(gè)目錄下面的Kconfig文件。
那么大家一定頁(yè)想知道每一個(gè)選項(xiàng)時(shí)如何寫的呢?這個(gè)Kconfig文件的語(yǔ)法格式時(shí)什么樣子的呢?下面我們來看一下:
1. 每條選項(xiàng)的前面可以看到[ ]、< >、( )三種表示方式
[ ] 有兩種狀態(tài),*代表選中,沒有*代表未選中;
選中的意思是對(duì)應(yīng)的選項(xiàng)功能會(huì)被編譯進(jìn)內(nèi)核鏡像文件中;
< > 有三種狀態(tài),*代表選中,沒有*代表未選中,M代表模塊;
( ) 存放十進(jìn)制或十六進(jìn)制或字符串;
2. mainmenu “字符串描述信息”, 它只用一次,我們一般不用修改;
3. menu “Device Drivers”…endmenu,表示Device Drivers是一個(gè)子選項(xiàng)菜單,每一個(gè)選項(xiàng)是包含在drivers/bus/Kconfig文件中的。
4. [ ]、< >、( )如何表示的及后面跟著的選項(xiàng)字符串是如何得來的呢?
這里我們自己添加一個(gè)選項(xiàng)在Device Drivers中的Character devices中;
FS4412_LED Device Support選項(xiàng);
那么我們就需要在drivers/char/下的Kconfig文件中添加內(nèi)容。如圖所示:
config 是一個(gè)關(guān)鍵字,對(duì)應(yīng)的是一個(gè)選項(xiàng)配置;
如果FS4412_LED Device Support選項(xiàng)被選中為*,則保存配置之后會(huì)在源碼目錄下面的.config文件中出現(xiàn)CONFIG_FS4412_LED的配置項(xiàng)并賦值為y;這個(gè).config文件就是配置內(nèi)核后生成的保存配置信息的文件。
Tristate是表示 < >的,bool是表示[ ]的,string是表示( )的;
Depends on表示此選項(xiàng)會(huì)依賴其它選項(xiàng)配置,也就是說當(dāng)ARCH_EXYNOS4這個(gè)選項(xiàng)被選擇上之后,該選項(xiàng)才能被選擇;
help是幫助信息;
default y表示該選項(xiàng)默認(rèn)被選擇上。
以上就是make menuconfig的一些用法和注意事項(xiàng),后說明一點(diǎn),當(dāng)我們添加了選項(xiàng)并修改配置選項(xiàng)之后,保存退出菜單,會(huì)在源碼目錄下面生成一個(gè).config文件,在該文件中會(huì)找到一個(gè)我們后添加的配置項(xiàng);
這里表示當(dāng)我們?cè)诰幾g內(nèi)核的時(shí)候,該選項(xiàng)(led驅(qū)動(dòng))會(huì)被編譯進(jìn)內(nèi)核uImage中,但是我們還需做一步工作就是在drivers/char/Makefile中添加一句話:
在我們編譯uImage的時(shí)候,這個(gè)led的驅(qū)動(dòng)才會(huì)被編譯進(jìn)內(nèi)核,這里還需要注意一點(diǎn)就是這個(gè)led的驅(qū)動(dòng)代碼一定要是在drivers/char的目錄下面存在的,否則之前做的都是無(wú)用功。
以上就是關(guān)于make menuconfig的一些介紹,包括Kconfig的語(yǔ)法和.config配置文件的說明,還有如何添加一個(gè)選項(xiàng)。至于菜單中其它選項(xiàng)的意思和作用是什么,那就需要大家慢慢積累和查找總結(jié)了。
|
|