Linux核心配置Kconfig語法
何為Kconfig 它的作用是什麼
核心原始碼編譯過程
- 遍歷每個原始碼目錄(或配置指定的原始碼目錄)Makefile
- 每個目錄的Makefile 會根據Kconfig來定製要編譯物件
- 回到頂層目錄的Makeifle執行編譯
那麼我們就得出各個檔案的作用:
Kconfig ---> (每個原始碼目錄下)提供選項
.config ---> (原始碼頂層目錄下)儲存選擇結果
Makefile---> (每個原始碼目錄下)根據.config中的內容來告知編譯系統如何編譯
說到底,Kconfig就是配置哪些檔案編譯,那些檔案不用編譯。後期linux核心都做出瞭如下的圖形介面,但由於要進行Linux核心驅動開發,需要向將驅動的程式碼新增到Makefile中一起編譯,所以Kconfig的一些語法也該瞭解,於是有了這篇文章。
基本使用方法
我們以簡單的單選項為案例來演示
假比,我們做好了一個驅動,需要將選項加入到核心的編譯選項中,可以按以下步驟操作:
第一步 配置Kconfig
在driver目錄下新建一個目錄
mkdir driver/test
進入test目錄,建立Kconfig檔案
這裡定義了一個TEST的控制代碼,Kconfig可以通過這個控制代碼來控制Makefile中是否編譯,”Test driver”是顯示在終端的名稱。
具體的語法在Kconfig語法簡介中介紹。
第二步 配置Makefile
在同樣的目錄中,新建一個Makefile
Obj-$(CONFIG_選項名) += xxx.o
/*當CONFIG_選項名=y時,表示對應目錄下的xxx.c將被編譯進核心
當CONFIG_選項名=m時對應目錄下的xxx.c將被編譯成模組*/
第三步 配置上層目錄的Makefile與Kconfig
在上一層目錄的Kconfig中
表示將test資料夾中的Kconfig加入搜尋目錄
在上一層目錄的Makefile中
結果,執行根目錄的.config檢視結果
Kconfig語法簡介
單一選項
總體原則:每一個config就是一個選項,最上面跟著控制控制代碼,下面則是對這個選項的配置,如選項名是什麼,依賴什麼,選中這個後同時會選擇什麼。
config CPU_S5PC100
bool "選項名"
select S5P_EXT_INT
select SAMSUNG_DMADEV
help
Enable S5PC100 CPU support
config —> 選項
CPU_S5PC100 —>控制代碼,可用於控制Makefile 選擇編譯方式
bool —>選擇可能:TRUE選中、FALSE不選 選中則編譯,不選中則不編譯。
如果後面沒有字串名稱,則表示其不會出現在選擇軟體列表中
select —> 當前選項選中後則select後指定的選項自動被選擇
depends on ARM || BLACKFIN || MIPS || COLDFIRE
depend on 依賴,後面的四個選擇其中至少一個被選擇,這個選項才能被選
config DM9000
tristate "DM9000 support"
tristate —> 選中並編譯進核心、不選編譯成模組
執行結果:< M > test
選項為數字
config ARM_DMA_IOMMU_ALIGNMENT
int "Maximum PAGE_SIZE order of alignment for DMA IOMMU buffers" ---->該選項是一個整型值
range 4 9 ---->該選項的範圍值
default 8 ---->該選項的預設值
help
DMA mapping framework by default aligns all buffers to the smallest
...
4-8為這個數字的範圍,執行結果
這裡的defult其實也可以用在bool中
config STACKTRACE_SUPPORT
bool --->該選項可以選中或不選,且不會出現在選擇列表中
default y ---->表示預設情況是選中
if..endif
if ARCH_S5PC100 --->如果ARCH_S5PC100選項選中了,則在endif範圍內的選項才會被選
config CPU_S5PC100
bool "選項名"
select S5P_EXT_INT
select SAMSUNG_DMADEV
help
Enable S5PC100 CPU support
endif
舉個例子,如果CPU沒有選擇使用多核CPU,則不會出現CPU個數的選項。
choice多個選項
choice --->表示選擇列表
prompt "Default I/O scheduler" //主目錄名字
default DEFAULT_CFQ //預設CFQ
help
Select the I/O scheduler which will be used by default for all
block devices.
config DEFAULT_DEADLINE
bool "Deadline" if IOSCHED_DEADLINE=y
config DEFAULT_CFQ
bool "CFQ" if IOSCHED_CFQ=y
config DEFAULT_NOOP
bool "No-op"
endchoice
menu與menuconfig
menu的用法
menu "Boot options" ----> menu表示該選項是不可選的選單,其後是在選擇列表的選單名
config USE_OF
bool "Flattened Device Tree support"
select IRQ_DOMAIN
select OF
select OF_EARLY_FLATTREE
help
Include support for flattened device tree machine descriptions.
....
endmenu ----> menu選單結束
menu指的是不可編輯的menu,而menuconfig則是帶選項的menu
menu和choice的區別
menu 可以多選 choice 是單項選擇題
menuconfig的用法
menuconfig MODULES ---> menuconfig表示MODULE是一個可選選單,其選中後是CONFIG_MODULES
bool "選單名"
if MODULES
...
endif # MODULES
說到底,menconfig 就是一個帶選項的選單,在下面需要用bool判斷一下,選擇成立後,進入if …endif 中間得空間。
相關推薦
Linux核心配置Kconfig語法
何為Kconfig 它的作用是什麼 核心原始碼編譯過程 遍歷每個原始碼目錄(或配置指定的原始碼目錄)Makefile 每個目錄的Makefile 會根據Kconfig來定製要編譯物件 回到頂層目錄的Makeifle執行編譯 那麼我們就得出
linux 核心配置機制(make menuconfig、Kconfig、makefile)講解
前面我們介紹模組程式設計的時候介紹了驅動進入核心有兩種方式:模組和直接編譯進核心,並介紹了模組的一種編譯方式——在一個獨立的資料夾通過makefile配合核心原始碼路徑完成 那麼如何將驅動直接編譯進核心呢? 在我們實際核心的移植配置過程中經常聽說的核心裁剪又
Linux核心配置系統-Kconfig和Makefile引數講解
下面講解一個綜合例項,假設我們要在核心原始碼drivers目錄下為ARM體系結 構新增如下用於test driver 的樹型目錄: |--test |-- cpu | -- cpu.c |-- test.c |-- test_client.c |-- test_ioctl.c |-- test_proc.c
Linux核心移植 -- Kconfig
1 Kconfig的作用 在核心開發中我們在配置核心時,執行指令 make menuconfig 看到的配置介面,就是通過Kbuild-language讀取總目錄下的Kconfig語句生成的配置畫面,因此在配置核心時,瞭解Kconfig語法級顯得尤其重要 li
Linux核心配置選項簡介
Show timing information on printks CONFIG_PRINTK_TIME 在控制檯和syslog()系統呼叫的輸出中包含printk()訊息的時間戳,以便於直接顯示核心啟動過程中各步驟所用的時間.注意:無論此項是否開啟,時間戳總會被記錄在/dev/kmsg中,開啟
Linux核心配置和編譯過程詳解
一、引言: 本文件的內容大部份內容都是從網上收集而來,然後配合一些新的截 圖(核心版本:V2.4.19)。在每一配置項後會有一個選擇指南的部份,用來指導大家怎麼樣 根據自己的情況來做相應的選擇;還有在每一個大項和文件的最後會有一個經驗談,它是一些高手們在應對問題和處理特有
嵌入式Linux核心配置、裁剪與編譯淺析(ARM版)
/*====================*/ 9、Device Drivers ---> 9.1、Generic Driver Options ---> 9.1.1、() path to uevent helper 9.1.2、[ ] Maintain a devtmpfs fil
linux核心配置與驅動註冊
linux 核心配置與驅動註冊 menuconfig使用 使用menuconfig工具實現linux核心的裁剪。進入核心配置介面的方法包括以下幾種: #make config 這是基於文字的最為傳統的配置介面,不推薦使用 #make menuconfi
LInux核心配置過程
核心版本 linux 2.6.32.2 配置核心的過程 配置核心可以通過執行 make menuconfig 來進行,下面分析該命令的執行流程 執行該目標 %config: scripts_basic outputmakefile FORCE &n
ifconfig---配置和顯示Linux核心中網路介面
ifconfig命令被用於配置和顯示Linux核心中網路介面的網路引數。用ifconfig命令配置的網絡卡資訊,在網絡卡重啟後機器重啟後,配置就不存在。要想將上述的配置資訊永遠的存的電腦裡,那就要修改網絡卡的配置檔案了。 語法 ifconfig(引數) 引數 add<地址>:設定網路裝置I
u-boot與Linux核心視訊顯示介面引數配置及傳遞方案
http://blog.chinaunix.net/uid-20543672-id-3244213.html 分類: LINUX2012-06-15 11:48:54 一、一般視訊顯示介面初始化所需要的引數 眾所周知,顯示器顯示的是二維的,處理器將視訊資料通過顯示介面行、地傳送到顯示器,每行
LINUX核心編譯--Makefile、.config、Kconfig、menuconfig解析
LINUX核心編譯–Makefile、.config、Kconfig、menuconfig關係說明 Makefile makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Sh
ioctl配置IP地址 Linux核心實現分析
1 執行flow 本文以Linux kernel3.10版本描述 上圖是《Understanding LINUX NETWORK INTERNALS》一書中對socket的ioctl呼叫的整體flow,本文只對其中SIOCSIFADDR這一個command進行flow
KConfig、Makefile詳解以及ARM平臺Linux核心的編譯
下面講解一個綜合例項,假設我們要在核心原始碼drivers目錄下為ARM體系結 構新增如下用於test driver 的樹型目錄: |--test |-- cpu | -- cpu.c |-- test.c |-- test_client.c |-- test_ioctl.c |-- test_proc.c
linux 核心編譯驅動模組ko的配置以及載入模組解除安裝模組例項測試
linux 核心編譯驅動模組ko的配置以及載入模組、解除安裝模組例項測試一、要讓linux系統支援動態載入驅動模組必須先對linux 核心進行相關的配置,不然編譯不過,載入模組也會載入失敗甚至導致裝置重啟。1、勾選核心Enable loadable module suppor
嵌入式 Linux開發Kernel移植(二)——kernel核心配置和編譯
嵌入式 Linux開發Kernel移植(二)——kernel核心配置和編譯 本文選擇linux 2.6.35.7版本kernel進行實踐。一、linux kernel原始碼目錄分析Kbuild,K
Linux + ARM驅動開發環境配置(核心配置與編譯)
要想編寫驅動,首先是建立核心目錄樹。 ** 1、檢視ARM開發板的核心版本 ** uname -a 我的arm開發板的版本是3.4.39 ** 2、安裝必要的軟體包 ** sudo apt-get install build-essentia
linux編譯配置好的核心,編譯映象時候出現arm-linux-:命令未找到
解決方法: 1、在root許可權下設定環境變數: 命令:gedit /etc/profile 在檔案末端加上 export PATH=$PATH:XXXXX,並儲存。 2、執行source /etc/profile 這是避免重新啟動ubuntu而又使剛剛修改的環境變數生效的
linux 2.6.24.4在S3C2410上的移植(核心配置)(基於GEC2410)
移植完u-boot後,接下來就是linux核心了.以下記錄我移植的步驟,如有問題,歡迎指正.1.下載linux kernel原始碼到http://www.kernel.org/下載linux核心原始碼,這裡我們使用2.6.24.4的核心.解壓linux-2.6.24.4.ta
1. Linux核心的配置與裁減:
一、核心的配置和編譯流程: 1)編寫driver及其子目錄下的Kconfig檔案,將驅動的配置項寫入menuconfig配置介面; 2) 執行make menuconfig命令,進入核心配置介面,將對應的驅動程式配置進核心或者模組; 3)生成.congfig檔案,可以看到驅動在核心配置的