帶你了解make menuconfig

2021-08-29 18:34:33 字數 2851 閱讀 7234

帶你了解make menuconfig

在嵌入式領域當中,在配置核心的時候會有很多配置方法,比如說make config(基於文字的為傳統的配置介面)、make oldconfig(如何只想在原來核心配置的基礎上修改一部分,則會省去很多麻煩)、make xconfig(基於圖形視窗模式的配置介面,xwindow下推薦使用)、make menuconfig(基於文字選擇的配置介面,字元終端下推薦使用),以上4種配置方式的目的都是在原始碼的頂層目錄下面生成乙個.config檔案,那麼在我們嵌入式開發當中,經常使用的和推薦使用的是make menuconfig這種配置方法。

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

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

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

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

正常執行make menuconfig之後會出現下面的選單框:

大家可能有疑問,這個介面是通過什麼來生成的呢?其實也很容易會知道,當我們執行make menuconfig後,肯定會執行makefile,那麼我們開啟makefile檔案來尋找menuconfig這個目標,但是是搜尋不到的,這裡有個技巧,我們使用%config來搜尋,%是萬用字元的意思,會搜尋到相關目標:

那麼我們就會看到,繪製圖形和解析這個介面的檔案都會在scripts/kconfig目錄下面,比較重要的檔案有mconf.c和lxdialog目錄。如果感興趣的話可以研究,這裡就不詳細說明了。

進入選單之後我們可以看到有標題、有說明性的文字、和關鍵的選項。它們又是如何呈現在選單中的呢,其實系統會讀取原始碼目錄下面kconfig檔案,kconfig檔案是乙個幫助核心新增核心選項的乙個配置檔案,開啟這個kconfig檔案可以看到:

大家可以觀察到,我們開啟的選單是有很多的選項的,既然kconfig是乙個新增選項的配置檔案,那麼這個檔案中為什麼這麼少的內容呢,其實關鍵點在 source 「arch/$srcarch/kconfig」,這句話的意思就是呼叫其它目錄下面的kconfig檔案,所以我們需要開啟arch/$srcarch/kconfig檔案,但是srcarch這個變數的值又是如何確定的呢?很簡單,它是在原始碼頂層目錄下的makefile中賦值的,arch=arm,所以我們需要進入到arch/arm/kconfig檔案中,進來之後大家就會看到非常多的選項了,同時也會呼叫很多各個目錄下面的kconfig檔案。

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

[ ] 有兩種狀態,*代表選中,沒有*代表未選中;

選中的意思是對應的選項功能會被編譯進核心映象檔案中;

< > 有三種狀態,*代表選中,沒有*代表未選中,m代表模組;

( ) 存放十進位制或十六進製制或字串;

2. mainmenu 「字串描述資訊」, 它只用一次,我們一般不用修改;

3. menu 「device drivers」…endmenu,表示device drivers是乙個子選項選單,每乙個選項是包含在drivers/bus/kconfig檔案中的。

4. [ ]、< >、( )如何表示的及後面跟著的選項字串是如何得來的呢?

這裡我們自己新增乙個選項在device drivers中的character devices中;

fs4412_led device support選項;

那麼我們就需要在drivers/char/下的kconfig檔案中新增內容。如圖所示:

config 是乙個關鍵字,對應的是乙個選項配置;

如果fs4412_led device support選項被選中為*,則儲存配置之後會在原始碼目錄下面的.config檔案中出現config_fs4412_led的配置項並賦值為y;這個.config檔案就是配置核心後生成的儲存配置資訊的檔案。

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

depends on表示此選項會依賴其它選項配置,也就是說當arch_exynos4這個選項被選擇上之後,該選項才能被選擇;

help是幫助資訊;

default y表示該選項預設被選擇上。

以上就是make menuconfig的一些用法和注意事項,後說明一點,當我們新增了選項並修改配置選項之後,儲存退出選單,會在原始碼目錄下面生成乙個.config檔案,在該檔案中會找到乙個我們後新增的配置項;

這裡表示當我們在編譯核心的時候,該選項(led驅動)會被編譯進核心uimage中,但是我們還需做一步工作就是在drivers/char/makefile中新增一句話:

在我們編譯uimage的時候,這個led的驅動才會被編譯進核心,這裡還需要注意一點就是這個led的驅動**一定要是在drivers/char的目錄下面存在的,否則之前做的都是無用功。

以上就是關於make menuconfig的一些介紹,包括kconfig的語法和.config配置檔案的說明,還有如何新增乙個選項。至於選單中其它選項的意思和作用是什麼,那就需要大家慢慢積累和查詢總結了。

帶你了解IPython

1 支援 的自動補全 自動縮排,已經支援bash shell 2 jupyter notebook 以前稱為ipython notebook 它提供了乙個使用者和ipython核心互動的乙個介面,同時它又是乙個互動式的筆記本 可以儲存你的源 執行結果 集文字 markdown 影象 公式與一體的py...

帶你了解NFC

近場通訊 near field communication,簡稱nfc 是一種新興的技術,使用了nfc技術的嵌入式裝置裝置 例如移動 可以在彼此靠近的情況下進行資料交換,是由非接觸式射頻識別 rfid 及互連互通技術整合演變而來的,通過在單一晶元上整合感應式讀卡器 感應式卡片和點對點通訊的功能,利用...

帶你了解藍芽

1 藍芽是一種支援裝置短距離通訊的無線電技術,能在包括移動 pda 無線耳機 膝上型電腦 相關外設等眾多裝置之間進行無線資訊交換。利用 藍芽 技術,能夠有效地簡化移動通訊終端裝置之間的通訊,也能夠成功地簡化裝置與網際網路internet之間的通訊,從而資料傳輸變得更加迅速高效,為無線通訊拓寬道路。2...