1. 程式人生 > >Linux核心配置Kconfig語法

Linux核心配置Kconfig語法

何為Kconfig 它的作用是什麼

核心原始碼編譯過程

頂層目錄

  1. 遍歷每個原始碼目錄(或配置指定的原始碼目錄)Makefile
  2. 每個目錄的Makefile 會根據Kconfig來定製要編譯物件
  3. 回到頂層目錄的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
Makfile

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 "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 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檔案,可以看到驅動在核心配置的