查看: 3635|回復: 0
打印 上一主題 下一主題

內核配置必經(jīng)之路-menuconfig

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2018-8-7 09:38:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
嵌入式領(lǐng)域當中,在配置內核的時(shí)候會(huì )有很多配置方法,比如說(shuō)make config(基于文本的為傳統的配置界面)、make oldconfig(如何只想在原來(lái)內核配置的基礎上修改一部分,則會(huì )省去很多麻煩)、make xconfig(基于圖形窗口模式的配置界面,Xwindow下推薦使用)、make menuconfig(基于文本選擇的配置界面,字符終端下推薦使用),以上4種配置方式的目的都是在源碼的頂層目錄下面生成一個(gè).config文件,那么在我們嵌入式開(kāi)發(fā)當中,經(jīng)常使用的和推薦使用的是make menuconfig這種配置方法。


更多嵌入式驅動(dòng)技術(shù)文章(純干貨資料)地址:http://superedu.hqyj.com/xuexi/bowen/?lcg-ee


現在以linux-3.14.25內核為例,在內核的源碼目錄下面,執行make menuconfig命令。


在執行命令的時(shí)候可能出現的錯誤有:


1. 一些安裝包沒(méi)有提前安裝上;(根據錯誤提示依次安裝)


2. 終端窗口太小導致錯誤;


正常執行make menuconfig之后會(huì )出現下面的菜單框:


大家可能有疑問(wèn),這個(gè)界面是通過(guò)什么來(lái)生成的呢?其實(shí)也很容易會(huì )知道,當我們執行make menuconfig后,肯定會(huì )執行Makefile,那么我們打開(kāi)Makefile文件來(lái)尋找menuconfig這個(gè)目標,但是是搜索不到的,這里有個(gè)技巧,我們使用%config來(lái)搜索,%是通配符的意思,會(huì )搜索到相關(guān)目標:


那么我們就會(huì )看到,繪制圖形和解析這個(gè)界面的文件都會(huì )在scripts/kconfig目錄下面,比較重要的文件有mconf.c和lxdialog目錄。如果感興趣的話(huà)可以研究,這里就不詳細說(shuō)明了。


進(jìn)入菜單之后我們可以看到有標題、有說(shuō)明性的文字、和關(guān)鍵的選項。它們又是如何呈現在菜單中的呢,其實(shí)系統會(huì )讀取源碼目錄下面Kconfig文件,Kconfig文件是一個(gè)幫助內核添加內核選項的一個(gè)配置文件,打開(kāi)這個(gè)Kconfig文件可以看到:
大家可以觀(guān)察到,我們打開(kāi)的菜單是有很多的選項的,既然Kconfig是一個(gè)添加選項的配置文件,那么這個(gè)文件中為什么這么少的內容呢,其實(shí)關(guān)鍵點(diǎn)在
source “arch/$SRCARCH/Kconfig”,這句話(huà)的意思就是調用其它目錄下面的Kconfig文件,所以我們需要打開(kāi)arch/$SRCARCH/Kconfig文件,但是SRCARCH這個(gè)變量的值又是如何確定的呢?很簡(jiǎn)單,它是在源碼頂層目錄下的Makefile中賦值的,ARCH=arm,所以我們需要進(jìn)入到arch/arm/Kconfig文件中,進(jìn)來(lái)之后大家就會(huì )看到非常多的選項了,同時(shí)也會(huì )調用很多各個(gè)目錄下面的Kconfig文件。


那么大家一定頁(yè)想知道每一個(gè)選項時(shí)如何寫(xiě)的呢?這個(gè)Kconfig文件的語(yǔ)法格式時(shí)什么樣子的呢?下面我們來(lái)看一下:


1. 每條選項的前面可以看到[ ]、< >、( )三種表示方式


[ ] 有兩種狀態(tài),*代表選中,沒(méi)有*代表未選中;


選中的意思是對應的選項功能會(huì )被編譯進(jìn)內核鏡像文件中;


< > 有三種狀態(tài),*代表選中,沒(méi)有*代表未選中,M代表模塊;


( ) 存放十進(jìn)制或十六進(jìn)制或字符串;


2. mainmenu “字符串描述信息”, 它只用一次,我們一般不用修改;


3. menu “Device Drivers”…endmenu,表示Device Drivers是一個(gè)子選項菜單,每一個(gè)選項是包含在drivers/bus/Kconfig文件中的。


4. [ ]、< >、( )如何表示的及后面跟著(zhù)的選項字符串是如何得來(lái)的呢?


這里我們自己添加一個(gè)選項在Device Drivers中的Character devices中;


FS4412_LED Device Support選項;


那么我們就需要在drivers/char/下的Kconfig文件中添加內容。如圖所示:


config 是一個(gè)關(guān)鍵字,對應的是一個(gè)選項配置;


如果FS4412_LED Device Support選項被選中為*,則保存配置之后會(huì )在源碼目錄下面的.config文件中出現CONFIG_FS4412_LED的配置項并賦值為y;這個(gè).config文件就是配置內核后生成的保存配置信息的文件。


Tristate是表示 < >的,bool是表示[ ]的,string是表示( )的;


Depends on表示此選項會(huì )依賴(lài)其它選項配置,也就是說(shuō)當ARCH_EXYNOS4這個(gè)選項被選擇上之后,該選項才能被選擇;


help是幫助信息;


default y表示該選項默認被選擇上。


以上就是make menuconfig的一些用法和注意事項,后說(shuō)明一點(diǎn),當我們添加了選項并修改配置選項之后,保存退出菜單,會(huì )在源碼目錄下面生成一個(gè).config文件,在該文件中會(huì )找到一個(gè)我們后添加的配置項;


這里表示當我們在編譯內核的時(shí)候,該選項(led驅動(dòng))會(huì )被編譯進(jìn)內核uImage中,但是我們還需做一步工作就是在drivers/char/Makefile中添加一句話(huà):
在我們編譯uImage的時(shí)候,這個(gè)led的驅動(dòng)才會(huì )被編譯進(jìn)內核,這里還需要注意一點(diǎn)就是這個(gè)led的驅動(dòng)代碼一定要是在drivers/char的目錄下面存在的,否則之前做的都是無(wú)用功。


以上就是關(guān)于make menuconfig的一些介紹,包括Kconfig的語(yǔ)法和.config配置文件的說(shuō)明,還有如何添加一個(gè)選項。至于菜單中其它選項的意思和作用是什么,那就需要大家慢慢積累和查找總結了。

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页