Kconfig 語法


Kconfig 語言

菜單入口

Kconifg 文件包含一系列以關鍵字開頭的菜單入口(菜單項)。

config

定義一個符號 symbol。它是構成 Kconfig 的絕大數菜單入口,其他菜單入口幫助組織此類型入口。 語法如下:

config <symbol>
<config options>

此入口和簡單 config 入口相似,定義一個符號 symbol,但是也暗示一個菜單塊,后接子入口。需保證所有子入口應該在此入口下方,且依賴於此入口符號。語法如下:

menuconfig <symbol>
<config options>

choice/endchoice

定義一個選擇組。選擇組類型僅僅可以設置為 booltristate,如果未指定類型,則取決於第一個選擇項的類型。bool 類型只允許單個 config 入口被選擇,tristate 類型允許多個 config 入口被設置為 m。 支持語法如下:

choice [<symbol>]
<choice options>
<choice block>
endchoice

comment

定義注釋語句。將在配置階段顯示給用戶,並且打印到輸出文件中。僅支持依賴屬性。語法如下:

comment <prompt>
<comment options>

定義一個菜單塊。菜單塊內的其他子入口繼承此項的依賴。僅支持依賴和可視屬性。語法如下:

menu <prompt>
<menu options>
<menu block>
endmenu

if/endif

定義一個條件塊。條件塊內的其他菜單入口追加此項的依賴表達式 expr

if <expr>
<if block>
endif

source

讀取一個指定的配置文件,此文件總會被解析。

source <file>

定義配置程序的標題欄。應該被放在配置文件的開頭。

mainmunu <prompt>

菜單屬性

菜單項可以有一些屬性。但是並不是所有菜單項都支持任意屬性,詳看菜單項說明。

類型 - type

定義類型的語法如下:

<type>

有以下幾種類型:

類型 說明
bool 布爾類型
tristate 三態類型,可以設置為 ymn
string 字符串類型
hex 十六進制整數類型
int 整數類型

輸入提示 - prompt

每個菜單項最多可以含有一個提示屬性,此屬性接收一個字符串,直接顯示給用戶提示輸出。語法如下:

prompt <prompt> [if <expr>]

也可以在類型后面直接跟輸入提示。

<type> <prompt>

默認值 - default

一個配置菜單項可以接收多個默認值,但是僅第一個默認值有效。未指定默認值的 config 入口默認未選定。語法如下:

default <value> [if <expr>]

也可以在類型后面直接跟默認值。

def_bool/def_tristate <value> [if <expr>]

依賴 - depends

菜單項的依賴屬性會應用到所有的其他屬性上。同時指定多個依賴屬性時,它必須同時滿足,即為邏輯與關系。語法如下:

depends on <expr>

反向依賴 - select

此屬性可以強制選定一個符號,無論此符號的依賴是否滿足。被選定的符號僅支持 booltristate 類型。語法如下:

select <symbol> [if <expr>]

弱反向依賴 - imply

此屬性和 select 相似,用於選定一個符號,但是被選定的符號仍有可能被直接依賴或用戶輸入設置為 n。語法如下:

imply <symbol> [if <expr>]

例子:

假設有如下定義:

config FOO
    tristate "foo"
    imply BAZ

config BAZ
    tristate "baz"
    depends on BAR

則它們可能的值如下:

FOO BAR BAZ 的默認值 BAZ 可選值
n y n y/m/n
m y m y/m/n
y y y y/m/n
n m n m/n
m m m m/n
y m n m/n
y n n n

可見性 - visible

此屬性僅用於菜單塊,根據條件來決定是否向用戶顯示菜單塊(但是包含的符號依然可以被其他符號選定),和應用於單個菜單項的 prompt 屬性相似。定義語法如下:

visible if <expr>

數字范圍 - range

此屬性用於限制 inthex 類型符號的輸出值的范圍。定義語法如下:

range <symbol> <symbol> [if <expr>]

幫助文本 - help

此屬性定義一段幫助文本。可以為多行或空行,當行的縮進級別小於幫助文本的第一行時,表示結束。定義語法如下:

help
	<help text>

表達式 expr

很多菜單屬性都可以使用表達式 expr,表達式含有以下幾種:

表達式 說明
<symbol> booltristate 符號簡單轉換為相應表達式的值。其他類型轉換為 n
<symbol> = <symbol> 如果兩個符號相等,就返回 y,否則返回 n。
<symbol> != <symbol> 參考上述
<symbol> < <symbol> 參考上述
<symbol> > <symbol> 參考上述
<symbol> <= <symbol> 參考上述
<symbol> >= <symbol> 參考上述
( <expr> ) 返回表達式的值,用於優先級。
! <expr> 取反
<expr> && <expr> 邏輯與
<expr> || <expr> 邏輯或

宏定義

Kconfig 也支持宏定義,和 Makefile 語法非常相似。

變量

和 Makefile 相似,Kconfig 變量作為一個宏變量,被擴展為一個字符串。有兩種類型的變量

  1. 簡單擴展變量

    使用 := 賦值符號定義的變量。當讀到該行時,它的右邊立刻擴展。

  2. 遞歸擴展變量

    使用 = 賦值符號定義的變量。它的右邊被簡單保存字面值(未擴展的值),當變量使用時才真正擴展。

可以使用 += 賦值符號向變量追加文本,不改變符號的類型。使用一個變量的語法如下:

$(var)

函數

Kconfig 提供和 Makefile 類似的定義使用宏函數的功能。調用函數的語法如下:

$(func,arg1,arg2...)

注意:

  1. Kconfig 僅使用 , 作為分隔符,但是 Makefile 的函數名和第一個參數用空白字符分隔。如下:

    $(func arg1,arg2...)
    
  2. Kconfig 調用用戶定義的函數和內建函數使用相同的方式,但是 Makefile 調用用戶定義的函數時,必須使用關鍵字 call 觸發。如下:

    $(call my-func,arg1,arg2...)
    

Kconfig 目前支持以下內建函數:

#擴展為執行的子命令 command 的標准輸出。
$(shell,command)
# 發送一段文本 text 到標准輸出。
$(info,text)
# 如果條件為真,則發送文本 text 和當前 Kconfig 文件名以及行號到錯誤輸出。
$(warning-if,condition,text)
# 和 warning-if 相似,但是會立刻終止解析。
$(error-if,condition,text)
# 擴展為被解析的文件名。
$(filename)
# 擴展為被解析的行號。
$(lineno)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM