博客專欄

        EEPW首頁 > 博客 > RK3568驅(qū)動(dòng)指南|第二篇 字符設(shè)備基礎(chǔ)-第7章 menuconfig圖形化配置實(shí)驗(yàn)(二)

        RK3568驅(qū)動(dòng)指南|第二篇 字符設(shè)備基礎(chǔ)-第7章 menuconfig圖形化配置實(shí)驗(yàn)(二)

        發(fā)布人:紅李亞 時(shí)間:2024-03-01 來源:工程師 發(fā)布文章
        7.2 Kconfig 語法簡介
        上一小節(jié)我們打開的圖形化配置界面是如何生成的呢?圖形化配置界面中的每一個(gè)界面都會(huì)對應(yīng)一個(gè)Kconfig文件。所以圖形化配置界面的每一級(jí)菜單是由Kconfig文件來決定的。
        圖形化配置界面有很多菜單。所以就會(huì)有很多Kconfig文件,這也就是為什么我們會(huì)在內(nèi)核源碼的每個(gè)子目錄下,都會(huì)看到Kconfig文件的原因,那掌握Kconfig文件相關(guān)的知識(shí)是不是就非常重要呢。
        所以這一小節(jié)我們來看下如何編寫Kconfig文件來生成圖形化配置界面,也就是Kconfig文件的語法是什么。
        1.Mainmenu
        mainmenu顧名思義就是主菜單,也就是我們輸入完“make menuconfig”以后默認(rèn)打開的界面,mainmenu用來設(shè)置主菜單的標(biāo)題,如下所示:
        mainmenu “Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration”
        此行代碼是設(shè)置菜單的名字為“Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration”。如下圖(圖7-4)所示,ARCH變量是通過“export ARCH=arm64”設(shè)置的,內(nèi)核版本KERNELVERSION為4.19.232。

        2.source

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

        3.menu/endmenu

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

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

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

        4.if/endif

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

        圖 7-8

        當(dāng)沒有選中 “Enable CAN” 選項(xiàng)時(shí),下面通過 if 判斷的 Enable CAN1 選項(xiàng)并不會(huì)顯示出來。當(dāng)上一級(jí)菜單選中 “Enable CAN” 時(shí),Enable CAN1 選項(xiàng)才會(huì)顯示。

        \5. choice/endchooice

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

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

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

        6.comment

        comment 語句出現(xiàn)在界面的第一行,用于定義一些提示信息。

        comment “Compiler: $(CC_VERSION_TEXT)”

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

        7.config

        使用關(guān)鍵字config來定義一個(gè)新的選項(xiàng),如下(圖7-13)所示

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

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

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

        string類型取值為字符串

        hex類型取值為十六進(jìn)制的數(shù)據(jù)

        int類型取值為十進(jìn)制的數(shù)據(jù)

        help表示幫助信息,當(dāng)我們在圖形化界面按下h按鍵,彈出來的就是help的內(nèi)容。

        8.depends on

        Kconfig中depends on關(guān)鍵字用來指定依賴關(guān)系,當(dāng)依賴的選項(xiàng)被選中時(shí),當(dāng)前的配置選項(xiàng)的信息才會(huì)在菜單中顯示出來,才能操作該選項(xiàng)的內(nèi)容。舉例來說,如下所示,選項(xiàng)A依賴選項(xiàng)B,只有當(dāng)選項(xiàng)B被選中時(shí),選項(xiàng)A才可以被選中。

        9.select

        Kconfig中select關(guān)鍵字用來表示反向依賴關(guān)系,當(dāng)指定當(dāng)前選項(xiàng)被選中時(shí),此時(shí)select后面的選項(xiàng)也會(huì)被自動(dòng)選中。舉個(gè)例子來說,如下所示,在選項(xiàng)A被選中的情況下,選項(xiàng)B自動(dòng)被選中。

        \10. menuconfig

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

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

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

        更多內(nèi)容可以B站搜索北京迅為/CSDN搜索迅為RK3568開發(fā)板


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



        關(guān)鍵詞: 開發(fā)板

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 铁岭市| 朝阳县| 娄烦县| 南昌县| 原平市| 吉隆县| 葵青区| 文安县| 潮州市| 吴川市| 福建省| 巩义市| 商水县| 珠海市| 曲阜市| 腾冲县| 永福县| 原阳县| 九台市| 阿勒泰市| 嘉义市| 志丹县| 泽普县| 文山县| 莲花县| 陇川县| 长泰县| 石景山区| 富民县| 高邑县| 会泽县| 扎赉特旗| 青神县| 安图县| 上犹县| 开阳县| 南涧| 镇平县| 石首市| 会同县| 石棉县|