亚博体育手机客户端

工控板首頁

ARM 核心板
Cortex-A35
M1808AI核心板,雙核A35,NPU
Cortex-M7
M1052跨界處理器
Cortex-A7
M6G2C8串口,528MHz
A6G2C多串口,WiFi,藍牙
Cortex-A7
M6Y2C8串口,800MHz
A6Y2C多串口,WiFi,藍牙
Cortex-A8
M335x-T多串口、雙網、雙CAN
A3352wifi,藍牙
Cortex-A9
M6708-Ti.MX6係列,800MHz
ARM9
M28x-Ti.MX280/283/287,454MHz
A287wifi,藍牙
A280Wi-Fi、zigbee、Mifare
AW28xAWorks
DSP
AW6748DSP,375MHz
ARM工控板
采集器、網關
IoT-3968物聯網網關控製器ARM9核
IoT-9608網絡控製器A8核
IoT-3960網絡控製器ARM9核
EPC-2876串口、雙網口
IoT3000A-AWI 物聯網網關ARM9核
IoT7000A-LI 物聯網網關A7
IoT9000A-LI 物聯網網關A9雙核
IoT9100A-LI 物聯網網關A9四核
控製主機
DCP-3000L控製單元,A8帶外殼
DCP-1000L顯控終端,A7帶外殼
DCP-5000LA9帶外殼
電力、通訊管理
IoT-9608網絡控製器
EPC-6G2C-L/IoT-6G2C-L
8串口,雙CAN雙網口
機械臂、自動化
EPC-9600雙路RS-485,雙路CAN
IoT-9608網絡控製器
能耗管理、環保數采
IoT-9608網絡控製器
EPC-6G2C-L/IoT-6G2C-L8串口,雙CAN雙網口
實用必選配件

【Linux學習小技巧】Linux內核開發工具介紹2

通過make menuconfig(make xconfig或者make gconfig)命令配置內核的時候,從Kconfig文件讀取菜單,配置完畢保存到文件名為.config的內核配置文件中,供Makefile文件在編譯內核時使用。

1.1.1 Kconfig基本語法

如程序清單.1所示代碼摘自文件,是一個比較典型的Kconfig文件片段,包含了Kconfig的基本語法。

程序清單1drivers/char/Kconfig片段

menu "Character devices"

source "drivers/tty/Kconfig"

config DEVKMEM

bool "/dev/kmem virtual device support"

default y

help

Say Y here if you want to suppor

1. 子菜單

通過menu和endmenu來定義一個子菜單,程序清單1所示代碼定義了一個“Character devices”子菜單,子菜單在界麵中用“--->”表示,如圖1所示。
圖1menu定義的子菜單

子菜單的菜單項則由config來定義,隨後的“bool”、“default”、“help”等都是該菜單項的屬性:
config DEVKMEM

bool "/dev/kmem virtual device support"

這兩行語句定義了一個bool選項,在.config中的配置變量名稱為CONFIG_DEVKMEM,選項提示信息為“/dev/kmem virtual device support”,在內核配置界麵的實際表現為:

[*] /dev/kmem virtual device support

由於設置其默認屬性default為y,所以該選項默認選中。

help引出幫助信息,在內核配置界麵,選擇選項後,通過可以查看幫助信息。

2. 屬性

類型定義:每個菜單項都必須定義類型,可選類型有:bool、tristate、string、hex和int,各類型描述如表1所列。

表1菜單項類型和說明

定義選項的類型後麵可以加菜單信息,用引號(“”)給出,留空則不加提示信息。

對於布爾型選項,在配置界麵用[]表示:

[*] /dev/kmem virtual device support

[*]表示選中,對應CONFIG_XXX=y,[ ]則表示未選中。

對於三態選項,在配置界麵用<>表示:

<*> Kernel .config support

<*>表示選中,對應CONFIG_XXXx=y,表示編譯為模塊,對應CONFIG_XXX=m,<>表示未選中。

子菜單也可同時設置類型,如下列代碼在定義PWM菜單的同時定義了菜單屬性為三態:

menuconfig GENERIC_PWM
tristate "PWM Support"
default n
help
Enables PWM device support implemented via a generic
framework.If unsure, say N.

在配置界麵表現為:

<> PWM Support--->

說明:子菜單的配置值會影響其子選項的可能值。例如三態子菜單配置為,則其三態子選項依舊可有3種可能值,即可配置為、或者不選中;而三態子菜單配置為,則其子選項隻有和不選中兩種狀態可用。

默認值:有寫選項可以設置默認值,無論是哪種類型,都可以通過default設置其默認值,例如:

config ARM
bool
default y
select HAVE_AOUT

選中:前麵這個示例的select,表示了一種選中關係,即選中某個選項後,會自動選中某個或者某些選項。前麵這個示例表明,選中ARM後,會自動選中HAVE_AOUT。

依賴關係:如果一個選項能否生效與否與其它選項的設置有關,則必須通過depends on來聲明這種依賴關係。例如,隻有使能了SMP才能設置CPU個數變量NR_CPUS,在Kconfig中則寫成:

config NR_CPUS
int "Maximum number of CPUs (2-32)"
range 2 32
depends on SMP
default "4"

幫助:通過help關鍵字引入幫助,幫助的正文必須另起一行。

菜單選項屬性的每個關鍵字,必須用TAB鍵與行首隔開,不能用等數的空格替代。

3. 目錄層次迭代

通過source可以直接引用下級目錄的Kconfig文件,形成新的菜單項或者子菜單,這樣方便每個目錄獨立管理各自的配置內容。“source "drivers/tty/Kconfig"”就是直接引用文件,形成更多菜單(項)。

1.1.2 配置項和配置開關

通過config定義的菜單配置項,在內核配置後會產生一個以“CONFIG_”開頭的配置開關變量,該開關變量可在Makefile中或者源代碼中使用。

例如:“config BAR”將會產生一個開關變量CONFIG_BAR,在Makefile中可以這麽使用:

obj-$(CONFIG_BAR)+= file_bar.o

在源代碼中可用這個開關變量在源代碼中可用這個開關變量來進行一些條件處理,例如:

#if defined (CONFIG_BAR)

實際處理代碼

#endif

如果定義的BAR是三態變量,則還可以根據需要這樣使用:

#if defined (CONFIG_BAR)|| defined (CONFIG_BAR_MODULE)

實際處理代碼

#endif