.config 和 kconfig以及 makefile的關係

來源:互聯網
上載者:User

       當我們編寫完一個驅動後,我們要把它以模組形式編譯或者直接編譯

進核心時,需要修改相關檔案,其中最重要的便是kconfig ,makefile。

主要是分析一下三者之間的關係,然後就其文法簡要的談一下。

     當我們在核心源碼目錄下執行make (或者make menuconfig等

命令)命令時,實際上是根據makefile 來進行編譯的。我在mini2440

開發板上編寫了一個按鍵控制led燈的驅動。檔案名稱為buttons_leds_z

hao.c屬於字元驅動。因此在/driver/char/目錄下的makefile部分最

後添加一行

obj-$(CONFIG_BUTTONS_LEDS_ZHAO)      +=

buttons_leds_zhao.o

如下:

obj-y    += mem.o random.o tty_io.o n_tty.o tty_ioctl.o

tty_ldisc.o tty_buffer.o tty_port.o

obj-$(CONFIG_BFIN_JTAG_COMM)    += bfin_jtag_comm.o

obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o

consolemap_deftbl.o

obj-$(CONFIG_HW_CONSOLE)        += vt.o defkeymap.o

obj-$(CONFIG_AUDIT)             += tty_audit.o

obj-$(CONFIG_BUTTONS_LEDS_ZHAO)      +=

buttons_leds_zhao.o

其中第一行obj-y  中的y表示編譯進核心,而obj-$(CONFIG_LEGAC

Y_PTYS)  中CONFIG_LEGACY_PTYS則表示一個變數,類似於我們C

語言中的變數,用$( )來表示,它一般可以取三種值y ,m ,n.y表示

編譯進核心,而m則表示以模組的方式進行編譯,n表示不編譯進內

核。obj-y    += 等號後面的.o尾碼檔案則是由該目錄下的對應名稱的

.c檔案編譯而來。

而上面CONFIG_LEGACY_PTYS變數的取值則是通過.config檔案來集

中賦值的。.config部分內容如下

# Character devices
#
CONFIG_VT=y

CONFIG_CONSOLE_TRANSLATIONS=y

CONFIG_VT_CONSOLE=y

CONFIG_HW_CONSOLE=y

 
# CONFIG_VT_HW_CONSOLE_BINDING is not set

 
# CONFIG_DEVKMEM is not set

CONFIG_MINI2440_HELLO_MODULE=m

CONFIG_BUTTONS_LEDS_ZHAO=m

CONFIG_LEDS_MINI2440=m

CONFIG_MINI2440_BUTTONS=m

CONFIG_MINI2440_BUZZER=y

CONFIG_MINI2440_ADC=y

# CONFIG_SERIAL_NONSTANDARD is not set

     從上面幾行我們可以看到,在makefile裡面的變數都是在.config中

賦值的。當我們在原始碼目錄下輸入make命令時,都是預設從.config

中讀入。

     因此,在輸入make之前,用ls  -a 查看一下是否有該檔案。對於

只包含幾個檔案的工程來說,手動寫.config和makefile並不是一件很難

的事情,但如果是一個包含有幾百個檔案的項目來說,則是一件比較困

難的事情。可以用autoconf來自動產生.config,automake來製作

makefile。看起來問題是解決的,但實際上,這種做法缺乏一定的靈活

性,不能實現按需定製的要求。如果要添加或刪掉某個驅動,將要在

.config檔案中找到相應的項進行修改。非常的不方便。因此,便出現了

kconfig。

當我們在核心源碼目錄下輸入make menuconfig時,出現如下內容:

.config - Linux Kernel v2.6.32.2 Configuration
──────────────────────────────────────────────────────────────────────────────────────────────────
┌──────────────────────────────── Linux Kernel Configuration ─────────────────────────────────┐
│  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are     │
│  hotkeys.  Pressing <Y> includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> │
│  to exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ] excluded  <M> module     │
│  < > module capable                                                                         │
│ ┌─────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │             General setup  --->                                                         │ │
│ │         [*] Enable loadable module support  --->                                        │ │
│ │         -*- Enable the block layer  --->                                                │ │
│ │             System Type  --->                                                           │ │
│ │             Bus support  --->                                                           │ │
│ │             Kernel Features  --->                                                       │ │
│ │             Boot options  --->                                                          │ │
│ │             CPU Power Management  --->                                                  │ │
│ │             Floating point emulation  --->                                              │ │
│ │             Userspace binary formats  --->                                              │ │
│ │             Power management options  --->                                              │ │
│ │         [*] Networking support  --->                                                    │ │
│ │             Device Drivers  --->                                                        │ │
│ │             File systems  --->                                                          │ │
│ └─────────┴(+)────────────────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────────────────────────────┤
│                              <Select>    < Exit >    < Help >                               │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

              它是通過讀取在核心源碼目錄下的Kconfig檔案來配置的。

在/drivers/char/下的目錄kconfig部分內容如下:

config DEVKMEM
        bool "/dev/kmem virtual device support"
        default y
        help
          Say Y here if you want to support the /dev/kmem device. The
          /dev/kmem device is rarely used, but can be used for certain
          kind of kernel debugging operations.
          When in doubt, say "N".

config MINI2440_HELLO_MODULE
        tristate "Mini2440 module sample"
        depends on MACH_MINI2440
        default m if MACH_MINI2440
        help
          Mini2440 module sample.

config BUTTONS_LEDS_ZHAO
        tristate "Mini2440 button  and leds sample"
        depends on MACH_MINI2440
        default m if MACH_MINI2440
        help
          Mini2440  button and leds  module sample.

其具體文法格式說明如下:

config關鍵字是一個新的配置選項的入口     其後的選項MINI2440_H

ELLO_MODULE省略了CONFIG。完整的表示為CONFIG_MINI2440

_HELLO_MODULE,也即是當我們將該選項設定成y時,它將自動的將

.config的CONFIG_MINI2440_HELLO_MODULE=m改寫成

CONFIG_MINI2440_HELLO_MODULE=y。

緊接著的是菜單的屬性 最主要的有2種tristate ,boolean 。tristate表

示三態:編譯進核心(y),編譯成模組(m),不編譯(n)。boolean 主

要有兩種y或ndepend則表示依賴項  default預設的編譯選項 m表示默

認該檔案表示以模組方式編譯。後面的help是協助資訊,當我們選中

help菜單時就可以看見,它不是必需的。隨著作業系統升級,編譯選項

達到幾千個。對於一般人來說,要搞清每一個選項是很困難的,一般很

多選項都是預設的。

        總的來說,三者之間的關係如下:當我們在核心源碼目錄下輸入

makemenuconfig時,在出現的菜單介面中選擇一項時,它會自動跟新

.config相應項的值。如果我們沒有選擇,則會在.config問下插入一行

注釋。類似於# CONFIG_SERIAL_NONSTANDARD is not set,當

我們輸入make時,根據makefile檔案來編譯,makefile檔案中的變數

值則由.config來進行賦值操作。僅僅只在kconfig中添加選項,只會在

菜單介面中顯示,即使此時選擇y或m,也不會編譯檔案。還需要在

makefile檔案中按照規定添加相應行才能進行編譯。簡單圖解如下:

           

kconfig------->.config---------->makefile

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.