NuttX 配置系統

來源:互聯網
上載者:User

(嵌入式 即時作業系統 rtos nuttx 7.1)
NuttX 配置系統轉載請註明出處: http://blog.csdn.net/zhumaill/article/details/24286609

1  簡介
NuttX 原始碼採用與 Linux 核心相同的配置系統,不像 eCos 那樣自己搞一套配置系統。該配置系統主要包括 Kconfig、 Makefile 和組態工具,可以組建組態介面。配置介面是通過組態工具來產生的,組態工具通過 Makefile 編譯執行,配置介面中的選項則是通過各級 Kconfig 檔案來定義。

Kconfig 配置資料檔案出現在幾乎所有的 NuttX 目錄。這些資料檔案仍然是開發的一部分。 Kconfig 檔案包含與該 Kconfig 檔案所處的目錄相關聯的配置資訊。

NuttX 的主 Kconfig 檔案是 nuttx/Kconfig。主 Kconfig 檔案調用各級子目錄的 Kconfig 檔案和應用程式目錄的 Kconfig 檔案,形成樹狀關係。

菜單按照樹狀結構組織,主菜單下有子功能表,子功能表還有子功能表或者配置選項。每個選項可以有依賴關係,這些依賴關係用於確定它是否顯示。只有被依賴項的父項已經選中,子項才會顯示。

NuttX 使用 kconfig 前端作為組態工具。kconfig 前端已經在《NuttX 安裝指令碼》一文中介紹了安裝。安裝後產生可執行檔 kconfig-mconf。

make 命令調用 Makefile 檔案。NuttX 的頂層 Makefile 檔案是 nuttx/Makefile,它只是簡單地包含了 nuttx/Makefile.unix ,在 nuttx/Makefile.unix 中有如下幾行:

menuconfig:    $(Q) APPSDIR=${CONFIG_APPS_DIR} kconfig-mconf Kconfig
其中, CONFIG_APPS_DIR在預設的 .config 檔案中定義,如果沒有定義,預設為 ../apps。目標 menuconfig 調用命令 kconfig-mconf 進行配置。

2  操作方法
nuttx/.config 是預設的 .config 檔案。從 nuttx/config/<板卡>/<目標配置>/defconfig 複製而來。由《NuttX 安裝指令碼》中的以下幾行實現:
echo "nuttx配置"cd $BASEDIR/$TOPDIR/nuttx/tools./configure.sh $TARGETCONFIG
在 nuttx 目錄下執行 make menuconfig 命令,讀取預設的 .config 檔案,調出基於文本菜單的配置介面,:
       

鍵盤操作方法:
  • 高亮字母為熱鍵
  • 按<方向鍵>瀏覽菜單
  • 按<Enter>選擇子功能表
  • 按<Y>包含該選項
  • 按<N>不包含該選項
  • 按<M>編譯成模組
  • 按<Esc><Esc>退出
  • 也可以使用<空格>鍵進行選擇
這裡的括弧有3種:
  • 中括弧:要麼是空,表示包含該選項 ,要麼是"*",表示不包含該選項。
  • 角括弧:可以是空、"*"和"M",多一樣選擇,可以編譯成模組。
  • 圓括弧:在所提供的幾個選項中選擇一項或手工輸入限定範圍的值。
3  配置選項3.1  構建設定(Build Setup)
Prompt for development and/or incomplete code/drivers--對正在開發的和未完善的代碼和驅動進行提示。
Default to smallest size--將預設值設定為編譯成最小尺寸。不影響你更改預設值,也不影響你設定檔中的現有設定,只應用於需要預設值的新設定。
Build Host Platform--構建的主機平台,可選擇 Linux、OSX、Windows、Other。
Build Configuration--構建配置
Binary Output Formats--二進位輸出格式
Customize Header Files--定製標頭檔
Debug Options--調試選項
Optimization Level--最佳化等級

3.2  系統類別型(System Type)
CPU Architecture--CPU架構
(此處略去架構特定的配置)
*** Board Settings ***
Delay loops per millisecond--用於系統引導和驅動初始化的延時迴圈(毫秒)
Calibrate delay loop--校準延時迴圈
*** Interrupt options ***
Interrupt Stack Size--中斷棧大小
*** Boot options ***
Boot Mode--引導模式
Boot Memory Configuration--引導記憶體配置

3.3  板卡選擇(Board Selection)
Select target board--選擇目標板
*** Common Board Options ***
Board LED support--板載LED支援
Board button support--板載按鈕支援
MMC/SD minor number-- MMC/SD主裝置號
MMC/SD slot number-- MMC/SD插槽
MMC/SD SPI device number-- MMC/SD所用的 SPI 裝置號
*** Board-Specific Options ***

3.4  RTOS特徵(RTOS Features)
Custom board/driver initialization--自訂的板卡/驅動初始化
Milliseconds per system timer tick--系統時鐘節拍的毫秒數
64-bit system clock--64位系統時鐘
Round robin timeslice (MSEC)--輪轉時間片長度
Enable CPU load monitoring--啟用CPU負載監控
Monitor system performance--監控系統運行
Maximum task name size--任務名稱的最大大小
Support parent/child task relationships--支援父子任務關係
Enables Julian time conversions--啟用Julian時間轉換
Start year--起始年
Start month--起始月
Start day--起始日
Enable /dev/console--啟用/dev/console
Enable mutex types--啟用互斥體類型
Enable priority inheritance--啟用優先順序繼承
Disable cloning of file descriptors--禁用檔案描述符複製
Disable clone file descriptors without stdio--在stdio之外禁止複製檔案描述符
Disable cloning of socket descriptors--禁用通訊端描述符複製
Enable waitpid() API--啟用 waitpid() API
Enable startup hook--啟用啟動鉤子
Enable atexit() API--啟用 atexit() API
Enable on_exit() API--啟用 on_exit() API
Application entry point--應用程式進入點
Disable NuttX interfaces--禁用 NuttX介面
Disable clock interfaces--禁用時鐘介面
Disable POSIX timers--禁用 POSIX定時器
Disable pthread support--禁用 pthread支援
Disable signal support--禁用訊號支援
Disable POSIX message queue support--禁用 POSIX訊息佇列支援
Disable environment variable support--禁用環境變數支援
*** Signal Numbers ***
SIGUSR1--SIGUSR1的數量
SIGUSR2--SIGUSR2的數量
SIGALRM--SIGALRM的數量
SIGCONDTIMEDOUT--SIGCONDTIMEDOUT的數量
SIGWORK--SIGWORK的數量
*** Sizes of configurable things (0 disables) ***
Max number of tasks--任務的最大數量
Maximum number of task arguments--任務參數的最大數量
Maximum number of pthread keys-- pthread鍵的最大數量
Maximum number of file descriptors per task--每個任務的檔案描述符的最大數量
Maximum number of FILE streams--檔案流的最大數量
Maximum size of a file name--檔案名稱的最大大小
Number of pre-allocated messages--預分配的訊息的數量
Maximum message size--最大訊息大小
Maximum number of watchdog parameters--看門狗參數的最大數量
Number of pre-allocated watchdog timers--預分配的看門狗定時器的數量
Number of pre-allocated POSIX timers--預分配的 POSIX定時器的數量
*** Stack and heap information ***
Idle thread stack size--空閑線程棧的大小
Main thread stack size--主線程棧的大小
Minimum pthread stack size--最大 pthread棧的大小
Default pthread stack size--預設 pthread棧的大小

3.5  裝置驅動(Device Drivers)
Disable driver poll interfaces--禁用驅動程式輪詢介面
Enable /dev/null--啟用/dev/null
Enable /dev/zero--啟用/dev/zero
Enable loop device--啟用迴環裝置
RAM Disk Support--RAM盤支援
CAN Driver Support--CAN驅動支援
PWM Driver Support--PWM驅動支援
I2C Driver Support--I2C驅動支援
SPI Driver Support--SPI驅動支援
I2S Driver Support--I2S驅動支援
RTC Driver Support--RTC驅動支援
Watchdog Timer Support--看門狗定時器支援
Analog Device(ADC/DAC) Support--類比裝置( ADC/DAC)支援
Audio Device Support--音訊裝置支援
Video Device Support--視頻裝置支援
Block-to-Character (BCH) Support--塊驅動到字元驅動(BCH)支援
Input Device Support--輸入裝置支援
LCD Driver Support--LCD驅動支援
MMC/SD Driver Support--MMC/SD驅動支援
Memory Technology Device (MTD) Support--儲存技術裝置(MTD)支援
Network Device/PHY Support--網路裝置/PHY支援
FIFO and named pipe drivers--FIFO和具名管道驅動
Power management (PM) driver interfaces--電源管理(PM)驅動介面
Power Management Support--電源管理支援
Sensor Device Support--感應器裝置支援
Osmocom-bb Sercomm Driver Support--Osmocom-bb Sercomm 驅動支援
Serial Driver Support--串口驅動支援
USB Device Driver Support--USB裝置驅動支援
USB Host Driver Support--USB主機驅動支援
Wireless Device Support--無線裝置支援
*** System Logging Device Options ***
*** System Logging ***
RAM log device support--RAM日誌裝置支援

3.6  網路支援(Networking Support)
Networking support--連網支援
Not interrupt driven--無中斷驅動
Use multiple device-side I/O buffers--使用多個裝置側I/O緩衝
Promiscuous mode--混雜模式
Number of socket descriptor--通訊端描述符的數量
Max socket operations--通訊端操作的最大並發數
Socket options--通訊端選項
SO_LINGER socket option--SO_LINGER通訊端選項
Network packet buffer size (MTU)--網路資料包緩衝大小(MTU)
Urgent data--緊急資料
TCP/IP Networking--TCP/IP連網
UDP Networking--UDP連網
ICMP networking support--ICMP連網支援
ICMP ping interfaces--ICMP ping 介面
Ping address configuration--Ping地址配置
IGMPv2 clientsupport--IGMPv2用戶端支援
Collect network statistics--收集網路統計
Receive window size--接收視窗大小
ARP table size--ARP表大小
ARP address harvesting--ARP地址擷取
Routing table suport--路由表支援
Multi-cast Tx support--多播發送支援
SLIP support--SLIP支援

3.7  檔案系統(File Systems)
*** File system configuration ***
Disable support for mount points--禁止支援掛載點
Disable pseudo-filesystem operations--禁止偽檔案系統的操作
File mapping emulation--檔案對應模擬
FAT file system--FAT檔案系統
FAT upper/lower names--FAT upper/lower 名稱
FAT long file names--FAT長檔名
FAT maximum file name size--FAT最大檔案名稱大小
FAT timestamps--FAT時間戳記
DMA memory allocator--DMA記憶體 Clerk
NFS client file system--NFS用戶端檔案系統
NXFFS file system--NXFFS檔案系統
ROMFS file system--ROMFS檔案系統
SMART file system--SMART檔案系統
BINFS File System--BINFS檔案系統
PROCFS File System--PROCFS檔案系統
*** System Logging ***
Enable SYSLOG Controls--啟用 SYSLOG 控制
Advanced SYSLOG features--進階 SYSLOG 特徵

3.8  圖形支援(Graphics Support)
NX Graphics--NX Graphics

3.9  記憶體管理(Memory Management)
Build support for multiple heaps--多堆構建支援
Small memory model--小記憶體模型
Number of memory regions--記憶體區數量
Enable Granule Allocator--啟用粒度分配器

3.10  音頻支援(Audio Support)
Audio Support--音頻支援

3.11  二進位格式(Binary Formats)
Disble BINFMT support--禁用 BINFMT支援
Support PATH variable--支援 PATH變數
Enable the NXFLAT Binary Format--啟用 NXFLAT二進位格式
Enable the ELF Binary Format--啟用ELF二進位格式
Support Builtin Applications--支援內建應用程式
Symbol Tables Ordered by Name--按名稱排序符號表

3.12  庫常式(Library Routines)
*** Standard C Library Options ***
C STDIO buffer size--C STDIO緩衝區大小
STDIO line buffering--STDIO行緩衝
Number unget() characters--unget()的字元數
Home directory--Home目錄
Standard Math library--標準數學庫
Disable sprintf support fieldwidth--禁止 sprintf 支援欄位寬度
Enable floating point in printf--在 printf 中啟用浮點
Order of the random number generate--隨機數建置規則
Newline Options--新行選項
Enable exec[l|v] / posix_spawn() Support--啟用 exec[l|v] / posix_spawn() 支援
Spawn Stack Size--建立子棧的大小
Default task_spawn Stack Size--預設 task_spawn 棧的大小
Enable strerror--啟用 strerror
perror() to stdout--perror()輸出到 stdout
Low-level console output--底層控制台輸出
sendfile() buffer size--sendfile()緩衝區大小
Support for ROM string access--支援ROM字串訪問
Enable arch optimized functions--啟用對特定架構最佳化的函數
*** Non-standard Library Support ***
Enable worker thread--啟用工作者線程
High priority (kernel) worker thread--高優先順序(核心)工作者線程
High priority worker thread priority--高優先順序工作者線程的優先順序
High priority worker thread period--高優先順序工作者線程的周期
High priority worker thread stack size--高優先順序工作者線程的棧大小
Low priority (kernel) worker thread--低優先順序(核心)工作者線程
Keyboard CODEC--鍵盤編解碼器
Segment LCD CODEC--段式 LCD 編解碼器
*** Basic CXX Support ***
sizeof(_Bool) is 8-bits--sizeof(_Bool) 為8位
Have C++ compiler--有 C++ 編譯器
Have C++ initialization--有 C++ 初始化
size_t is type long--size_t 為 long 類型
*** uClibc++ Standard C++ Library ***
Build uClibc++ (must be installed)--構建 uClibc++ (必須已安裝)

3.13  應用程式配置(Application Configuration)
Built-In Applications--內建應用程式
Examples--樣本
Graphics Support--圖形支援
Interpreters--解譯器
Network Utilities--網路公用程式
FreeModBus--FreeModBus 協議
NSH Library--NSH 庫
NxWidgets/NxWM--NxWidgets/NxWM 圖形化使用者介面包
Platform-specific Support--平台特定的支援
System Libraries and NSH Add-Ons--系統庫和 NSH 外掛程式

4  配置順序
基本的配置順序是由下而上:
  • 選擇構建環境
  • 選擇處理器
  • 選擇板卡
  • 選擇支援的外設
  • 配置裝置驅動
  • 配置應用程式選項
對建立新的配置來說,這是相當正確的方向,但對修改現有的配置來說則不合適。

5  完成配置
退出配置介面時選<Yes>儲存,在 nuttx 目錄下產生新的 .config 檔案,:
       

生下 .config 後,配置系統的任務就完成了。.config 去哪兒了,將在下一篇文章《NuttX 編譯系統》一文中介紹。

6  手工修改 .config 檔案
.config 檔案的格式如下所示:
## Automatically generated file; DO NOT EDIT.# Nuttx/ Configuration### Build Setup## CONFIG_EXPERIMENTAL is not set## Build Configuration## CONFIG_APPS_DIR="../apps"# CONFIG_BUILD_2PASS is not set## Binary Output Formats## CONFIG_RRLOAD_BINARY is not setCONFIG_INTELHEX_BINARY=y# CONFIG_MOTOROLA_SREC is not setCONFIG_RAW_BINARY=y## Customize Header Files## CONFIG_ARCH_STDBOOL_H is not set# CONFIG_ARCH_MATH_H is not set# CONFIG_ARCH_FLOAT_H is not set# CONFIG_ARCH_STDARG_H is not set## Debug Options## CONFIG_DEBUG is not set# CONFIG_DEBUG_SYMBOLS is not set......

對於簡單的修改,可以文字編輯器中進行,例如修改 NSH 的目標 IP 位址和主機 IP 位址:
CONFIG_NSH_IPADDR=0xc0a8020aCONFIG_NSH_DRIPADDR=0xc0a80201
其中的十六進位賦值與點分十進位的對應關係如下:
c0--192
a8--168
02--2
0a--10

7  Kconfig 語言7.1  功能表項目
大多數選項定義一個配置選項,其它選項起輔助組織作用。一個配置選項可以被定義為如下形式:
config DEBUG_USB    bool "USB Debug Output"    default n    depends on USBDEV || USBHOST    ---help---        Enable usb debug SYSLOG output (disabled by default)
以關鍵字“config”開始一個新的配置選項,並可以跟隨多個參數。後面的幾行定義該配置選項的屬性。屬性可以是該配置選項的類型、輸入提示、依賴關係、協助文本和預設值。同名的配置選項可以被定義多次,但每次定義只能有單個輸入提示並且類型不能衝突。

7.2  菜單屬性
一個菜單選項可以有多種屬性,不過這些屬性也不是任意用的,受到文法的限制。

每個配置選項必須有類型定義。類型定義包括:bool、tristate、string、hex、int 共5種。其中有2 種基本的類型:tristate 和 string,每種類型定義可以有一個輸入提示。

輸入提示:"prompt" <prompt> ["if" <expr>]--每個菜單選項最多有一條提示,可以顯示在菜單上。某選擇提示可選的依賴關係可以通過“if”語句添加。

預設值:"default" <expr> ["if" <expr>]--配置選項可以有幾個預設值。如果有多個預設值可選,只使用第一個預設值。某選項預設值還可以在其他地方定義,並且被前面定義的預設值覆蓋。如果使用者沒有設定其他值,預設值就是配置符號的唯一值。如果有選擇提示出現,就可以顯示預設值並且可以配置修改。某預設值可選的依賴關係可以通過“if”語句添加。

依賴關係:"depends on"/"requires" <expr>--這個定義了菜單選項的依賴關係。如果定義多個依賴關係,那麼要用“&&”符號串連。依賴關係對本功能表項目中其他所有選項有效(也可以用“if”語句)。

反向依賴:"select" <symbol> ["if" <expr>]--普通的依賴關係是縮小符號的上限,反向依賴關係則是符號的下限。當前菜單符號的值用作符號可以設定的最小值。如果符號值被選擇了多次,這個限制將被設成最大選擇值。反向依賴只能用於布爾或者三態符號。

數字範圍:"range" <symbol> <symbol> ["if" <expr>]--這允許對 int 和 hex 類型符號的輸入值限制在一定範圍內。使用者輸入的值必須大於等於第一個符號值並且小於等於第二個符號值。

協助文本:"help"或者"---help---"--這可以定義協助文本。協助文本的結束是通過縮排層次判斷的。當遇到一行縮排比協助文本第一行小的時候,就認為協助文本已經結束。“---help---”和“help”功能沒有區別,主要給開發人員提供不同於“help”的協助。

7.3  菜單依賴關係
依賴關係定義了菜單選項的顯示,也能減少三態符號的選擇範圍。運算式的三態邏輯比布爾邏輯多一個狀態,用來表示模組狀態。依賴關聯運算式的文法如下:
<expr> ::= <symbol>                             (1)           <symbol> '=' <symbol>                (2)           <symbol> '!=' <symbol>               (3)           '(' <expr> ')'                       (4)           '!' <expr>                           (5)           <expr> '&&' <expr>                   (6)           <expr> '||' <expr>                   (7)
運算式是以優先順序的降序列出的。

(1)  把符號轉換成運算式,布爾和三態符號可以轉換成對應的運算式值。其他類型符號的結果都是“n”。
(2)  如果兩個符號的值相等,返回“y”,否則返回“n”。
(3)  如果兩個符號的值相等,返回“n”,否則返回“y”。
(4)  返回運算式的值,括弧內運算式優先計算。
(5)  返回(2-/expr/)的計算結果。
(6)  返回min(/expr/, /expr/)的計算結果。
(7)  返回max(/expr/, /expr/)的計算結果。

一個運算式的值是“n”、“m”或者“y”(或者對應數值的0、1、2)。當運算式的值為“m”或者“y”時,菜單選項變為顯示狀態。

符號類型分為兩種:常量和非常量符號。

非常量符號最常見,可以通過 config 語句來定義。非常量符號完全由數字記號或者底線組成。

常量符號只是運算式的一部分。常量符號總是包含在引號範圍內的。在引號中,可以使用其他字元,引號要通過“\”號轉義。

7.4  菜單組織圖
菜單選項的樹狀結構有兩種組織方式。

第一種是顯式地聲明為菜單。
menu "SPI Configuration"    depends on STM32_SPIconfig STM32_SPI_INTERRUPTS    bool "Interrupt driver SPI"    default n    ---help---......endmenu
“menu”與“endmenu”之間的部分成為“SPI Configuration”的子功能表。所有子選項繼承該菜單的依賴關係,例如,依賴關係“STM32_SPI”就被添加到“STM32_SPI_INTERRUPTS”配置選項的依賴關係列表中。

第二種是通過依賴關係確定菜單的結構。

如果一個菜單選項依賴於前一個選項,它就是一個子功能表。這要求前一個選項和子選項同步地顯示或者不顯示。
config DISABLE_OS_API    bool "Disable NuttX interfaces"    default y......config DISABLE_CLOCK    bool "Disable clock interfaces"    depends on DISABLE_OS_API    default n
DISABLE_CLOCK 依賴於 DISABLE_OS_API,這樣只有 DISABLE_OS_API 不是“n”的時候才顯示。

7.5  Kconfig 文法
Kconfig 設定檔描述了一系列的菜單選項。每一行都用一個關鍵字開頭(除了協助文本)。下列關鍵字結束菜單選項:config、 menuconfig、 choice/endchoice、 comment、 menu/endmenu、 if/endif、 source。前五個也開始菜單選項的定義。

config:"config" <symbol>、<config options>--這可以定義一個配置符號<symbol>,並且可以配置選項屬性。

menuconfig:"menuconfig" <symbol>、<config options>--這類似於簡單的配置選項,但是它暗示:所有的子選項應該作為獨立的選項列表顯示。

choices:"choice"、<choice options>、<choice block>、"endchoice"--這定義了一個選擇組,並且可以配置選項屬性。每個選擇項只能是布爾或者三態類型。布爾類型只允許選擇單個配置選項,三態類型可以允許把任意多個選項配置成“m”。如果一個硬體裝置有多個驅動程式,核心一次只能靜態連結或者載入一個驅動,但是所有的驅動程式都可以編譯為模組。選擇項還可以接受另外一個選項“optional”,可以把選擇項設定成“n”,並且不需要選擇什麼選項。

comment:"comment" <prompt>、<comment options>--這定義了一個注釋,在配製過程中顯示在菜單上,也可以回顯到輸出檔案中。唯一可能的選項是依賴關係。

Menu:"menu" <prompt>、<menu options>、<menu block>、"endmenu"--這定義了一個功能表項目,在菜單組織圖中有此描述。唯一可能的選項是依賴關係。

If:"if" <expr>、<if block>、"endif"--這定義了一個 if 語句塊。依賴關聯運算式 <expr> 附加給所有封裝好的菜單選項。

Source:"source" <prompt>--讀取指定的設定檔。讀取的檔案也會解析產生菜單。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.