新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Linux內(nèi)核驅(qū)動程序的配置

Linux內(nèi)核驅(qū)動程序的配置

作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

腳本1: bool Networking support腳本2: bool prompt Networking support輸入提示的一般格式的如下所示:prompt[if ]其中可選的 if 用來表示該提示的依賴關(guān)系。

默認值的格式如下所示: default [if ]一般配置選項可以存在任意多個默認值,這種情況下,只有第一個被定義的值是可用的。如果用戶不設(shè)置對應(yīng)的選項,配置選項的值就是默認值。

依賴關(guān)系的格式如下所示:depends on (或者 requires) 如果定義了多個依賴關(guān)系,他們之間用 “”間隔。依賴關(guān)系也可以應(yīng)用到該菜單中所有的其他選項中(這些選項同樣可接受 if 表達式),下面的兩端段腳本是等價的。

腳本1: bool foo if BAR default y if BAR腳本2: depends on BAR bool foo default y反向依賴關(guān)系的格式如下所示:select [if ] depends能限定一個 symbol 的上限,即如果 A 依賴于 B,則在 B 被配置為 Y 的情況下,A 可以為“Y、M 和N;在 B 被配置為 ”M 情況下,A 可以被配置為M 或 N;B 在被配置為 N 的情況下,A 只能為 “N. select 能限定一個 symbol 的下限,若 A 反向依賴于 B,則 A 的配置值會高于或等于 B(正好與 depends)。如果 symbol 反向依賴于多個對象,則它的下陷是這些對象的最大值。

kbuild Makefile 中的 expr (表達式) 定義如下所示: ::= '=' '!=' ' ( ' ' ) ' ' ! ' '' ' || ' 也就是說 expr 是由 symbol 、兩個 symbol 相等、兩個symbol 不等以及 expr 的賦值、非、與、或運算構(gòu)成。而 symbol 分為兩類,一類是由菜單入口定義配置選項定義的非常數(shù) symbol,另一類是作為 expr 組成部分的常數(shù) symbol.數(shù)據(jù)范圍的格式如下:rang [if ]為 int 和 hex 類型的選項設(shè)置可以接受的輸入值范圍,用戶只能輸入大于等于第一個 symbol,小于等于第二個 symbol 的值。

幫助信息的格式如下: help(或 ——help——)

開始……

結(jié)束幫助信息完全靠文本縮進識別結(jié)束。——help—— 和 help 在作用上沒有區(qū)別,設(shè)計——help—— 的初衷在于將文件中的配置邏輯與給開發(fā)人員的提示分開。

menuconfig 關(guān)鍵字的作用與 config 類似,但它在 config 的基礎(chǔ)上要求所有的子選項作為獨立的行顯示。

(2)菜單結(jié)構(gòu)菜單入口在菜單樹結(jié)構(gòu)中的位置可由兩種方法決定。第一種方式如下所示:menu Networking device support depends on NET config NETDEVICES……

endmenu所有處于menu 和 endmenu 之間的菜單入口都會成為 Network device support 的子菜單。而且,所有子菜單選項都會繼承父菜單的依賴關(guān)系,比如, Network device support 對 Net 的依賴被加到了配置選項 NETDEVICES 的依賴列表中。

另一種方式是通過分析依賴關(guān)系生成菜單結(jié)構(gòu)。如果菜單選項在一定程度上依賴于前面的選項,它就恩能能成為該選項的子菜單。如果父選項為 N,則子選項不可見;如果父選項為 Y 或 M ,則子選項可見,例如:config MODULES bool Enable loadable module support config MODVERSIONS bool Set version information on all module symbols depends on MODULES comment module support disabled depends on !MODULES MODVERSIONS 直接依賴 MODULES,如果 MODULES 不為 “N,該選項才可見。

除此之外,Kconfig 中還可能使用 “choices……endchoice、comment、if …… endif 這樣的語法結(jié)構(gòu)。其中 choices …… endchoice” 的結(jié)構(gòu)如下所示:choice endchoice它定義一個選擇群,其接受的選項(chioce options)可以是前面描述的任何屬性。在一個硬件有多個驅(qū)動的情況下使用,使用選擇可以實現(xiàn)最終只有一個驅(qū)動被編譯進內(nèi)核或模塊。選擇群還可以接受的另一個選項是“optional”,這樣菜單入口就被設(shè)置為 N,沒有被選中。

4. 應(yīng)用實例:在內(nèi)核中新增加驅(qū)動代碼目錄和子目錄假設(shè)要在內(nèi)核源代碼 drivers 目錄下為 arm 體系結(jié)構(gòu)新增如下用于 test driver 的樹型目錄:|——test |——cpu |——cpu.c |——test.c |——test_client.c |——test_ioctl.c |——test_proc.c |——test_queue.c在內(nèi)核中增加目錄和子目錄,我們需為相應(yīng)的新增目錄創(chuàng)建 Kconfig 和 Makefile 文件,而新增目錄的父目錄中的 Kconfig 和 Makefile 文件愛也需要修改,以便新增的 Kconfig 和 Makefile 文件能被引用。

在新增的 test 目錄下,應(yīng)該包含如下 Kconfig 文件:# #Test driver configuration # menu TEST Driver comment TEST Driver config CONFIG_TEST bool TEST support config CONFIG_TEST_USER tristate TEST user-space interface depends on CONFIG_TEST endmenu由于 TEST_driver 對于內(nèi)核來說是新的功能,所以首先需要創(chuàng)建一個菜單 TEST Driver;然后顯示 TEST support,等待用戶選擇;接下來判斷用戶是否選擇了 TEST Driver,如果是(CONFIG_TEST=y),則進一步顯示子功能:用戶接口與CPU 功能:用戶接口與CPU 功能支持;由于用戶接口功能可以被編譯成內(nèi)核模塊,所以這里的詢問語句使用了 tristate.為了使這個 Kconfig 文件能起作用,需要修改 arch/arm/Kconfig 文件,增加以下內(nèi)容:source driver/test/Kconfig腳本中的 source 意味著引用新的 Kconfig 文件。



關(guān)鍵詞:

評論


相關(guān)推薦

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

關(guān)閉