RK3568驅動指南|第二篇 字符設備基礎-第7章 menuconfig圖形化配置實驗(二)

7.2 Kconfig 語法簡介
上一小節我們打開的圖形化配置界面是如何生成的呢?圖形化配置界面中的每一個界面都會對應一個Kconfig文件。所以圖形化配置界面的每一級菜單是由Kconfig文件來決定的。
 
圖形化配置界面有很多菜單。所以就會有很多Kconfig文件,這也就是爲什麼我們會在內核源碼的每個子目錄下,都會看到Kconfig文件的原因,那掌握Kconfig文件相關的知識是不是就非常重要呢。
 
所以這一小節我們來看下如何編寫Kconfig文件來生成圖形化配置界面,也就是Kconfig文件的語法是什麼。
1.Mainmenu
mainmenu顧名思義就是主菜單,也就是我們輸入完“make menuconfig”以後默認打開的界面,mainmenu用來設置主菜單的標題,如下所示:
mainmenu “Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration”
此行代碼是設置菜單的名字爲“Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration”。如下圖(圖7-4)所示,ARCH變量是通過“export ARCH=arm64”設置的,內核版本KERNELVERSION爲4.19.232。

2.source

source用於讀取另一個Kconfig文件,比如“source “init/Kconfig””就是讀取init目錄下的Kconfig文件。

3.menu/endmenu

 

menu/endmenu條目用於生成菜單,如下(圖7-5)所示,生成了Watchdog Timer Support的菜單。

menu之後的字符串是菜單名,“menu”是菜單開始的標誌,“endmenu”是菜單結束的標誌,這倆個是成對出現的。“menu”和“endmenu”之間有很多config條目。在kernel目錄下輸入make menuconfig,如下圖(圖7-6)所示,可以看到上述代碼描述的"Watchdog Timer Support"菜單。

進入“ Watchdog Timer Support —> ”可以看到很多config定義的條目,如下(圖7-7)所示:

4.if/endif

if/endif 語句是一個條件判斷,定義了一個 if 結構,Kconfig中代碼如下(圖7-8)所示:

圖 7-8

當沒有選中 “Enable CAN” 選項時,下面通過 if 判斷的 Enable CAN1 選項並不會顯示出來。當上一級菜單選中 “Enable CAN” 時,Enable CAN1 選項纔會顯示。

\5. choice/endchooice

choice條目將多個類似的配置選項組合到一起,供用戶選擇,用戶選擇是從“choice”開始,從“endchoice”結束,“choice”和“endchoice”之間有很多的config條目,這些config條目是提供用戶選擇的,如下(圖7-9)所示:

我們在內核目錄下輸入make menuconfig可以看到,如下(圖7-10)所示,“Parade TrueTouch Gen5 MultiTouch Protocol”是choice選項名稱,“Protocol B”是Kconfig裏面默認選擇的。“–>”代表此菜單能進入,需要鍵盤操作進入。

進入“Parade TrueTouch Gen5 MultiTouch Protocol”後,可以看到多選項提供給用戶進行選擇,如下(圖7-11)所示:

6.comment

comment 語句出現在界面的第一行,用於定義一些提示信息。

comment “Compiler: $(CC_VERSION_TEXT)”

以上代碼的配置界面如下(圖7-12)所示:

7.config

使用關鍵字config來定義一個新的選項,如下(圖7-13)所示

如上所示,使用config關鍵字定義了一個“helloworld”選項,每個選項都必須指定類型,類型包括bool,tristate,string,hex,int。最常見的是bool,tristate,string這三個。

bool類型取值只有“y”和“n”

tristate類型的變量取值有3種:“y”,“n”,“m”

string類型取值爲字符串

hex類型取值爲十六進制的數據

int類型取值爲十進制的數據

help表示幫助信息,當我們在圖形化界面按下h按鍵,彈出來的就是help的內容。

8.depends on

Kconfig中depends on關鍵字用來指定依賴關係,當依賴的選項被選中時,當前的配置選項的信息纔會在菜單中顯示出來,才能操作該選項的內容。舉例來說,如下所示,選項A依賴選項B,只有當選項B被選中時,選項A纔可以被選中。

9.select

Kconfig中select關鍵字用來表示反向依賴關係,當指定當前選項被選中時,此時select後面的選項也會被自動選中。舉個例子來說,如下所示,在選項A被選中的情況下,選項B自動被選中。

\10. menuconfig

menuconfig可以認爲是config 中的升級版。menuconfig也是一個正常的配置項,通過自己的配置值來決定另外一組配置項是否作爲子菜單的形式顯示出來並供用戶配置。代碼如下(圖7-14)所示。

以上代碼中通過menuconfig配置了一個bool類型的配置項,在圖形化配置界面中顯示(圖7-15)如下:

當我們選中"Network device support"配置項時,其子菜單被顯示出來,如下圖(圖7-16)所示:

更多內容可以B站搜索北京迅爲/CSDN搜索迅爲RK3568開發板

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章