1. 程式人生 > >Kconfig檔案詳解

Kconfig檔案詳解

注:本文是學習朱老師課程整理的筆記,基於linux2.6.35.7和九鼎X210BV3S開發板進行移植。

Kconfig的格式

下面擷取/drivers/net下的Kconfig檔案中的部分內容:

# Network device configuration
menuconfig NETDEVICES
        default y if UML
        depends on NET
        bool "Network device support"
        ---help---
          You can say N here if you don't
intend to connect your Linux box to any other computer at all. …… config DM9000 tristate "DM9000 support" depends on ARM || BLACKFIN || MIPS select CRC32 select MII ---help--- Support for DM9000 chipset. To compile this driver as a module, choose M here. The module will be called dm9000. …… source "drivers/net/arcnet/Kconfig"
source "drivers/net/phy/Kconfig"

Kconfig按照一定的格式來書寫,menuconfig程式可以識別這種格式,然後從中提取出有效資訊組成menuconfig中的選單項。將來在做驅動移植等工作時,有時需要自己新增Kconfig中的一個配置項來將某個裝置驅動新增到核心的配置專案中,這時候就需要對Kconfig的配置項格式有所瞭解,否則就不會新增。

menuconfig:表示選單(本身屬於一個選單中的專案,但是他又有子選單專案)、config表示選單中的一個配置項(本身並沒有子選單下的專案)。一個menuconfig後面跟著的所有config項就是這個menuconfig的子選單。這就是Kconfig中表示的目錄關係。

NETDEVICES:menuconfig或者config後面空格隔開的大寫字母表示的類似於 NETDEVICES 的就是這個配置項的配置項名字,這個字串前面新增CONFIG_後就構成了“.config”檔案中的配置項名字。

source:核心原始碼目錄樹中每一個Kconfig都會用source引入其所有子目錄下的Kconfig,從而保證了所有的Kconfig專案都被包含進menuconfig中。這個也說明了:如果你自己在linux核心中添加了一個資料夾,一定要在這個資料夾下建立一個Kconfig檔案,然後在這個資料夾的上一層目錄的Kconfig中source引入這個資料夾下的Kconfig檔案。

tristate:意思是三態(3種狀態,對應Y、N、M三種選擇方式),意思就是這個配置項可以被三種選擇。

bool:是要麼真要麼假(對應Y和N)。意思是這個配置項只能被2種選擇。

depends:意思是本配置項依賴於另一個配置項。如果那個依賴的配置項為Y或者M,則本配置項才有意義;如果依賴的哪個配置項本身被設定為N,則本配置項根本沒有意義。depends項會導致make menuconfig的時候找不到一些配置項。所以在menuconfig中如果找不到一個選項,但是這個選項在Kconfig中卻是有的,則可能的原因就是這個配置項依賴的一個配置項是不成立的。depends依賴的配置項可以是多個,還可以有邏輯運算。這種時候只要依賴專案運算式子的結果為真則依賴就成立。

select:表示depends on的值有效時,下面的select也會成立,將相應的內容選上。

default:表示depends on的值有效時,下面的default也會成立,將相應的選項選上,有三種選項,分別對應y,n,m。

help:幫助資訊,解釋這個配置項的含義,以及如何去配置他。

Kconfig和.config檔案和Makefile三者的關聯

配置項被配置成Y、N、M會影響“.config”檔案中的CONFIG_XXX變數的配置值。“.config”中的配置值(=y、=m、沒有)會影響最終的編譯連結過程。如果=y則會被編入(built-in),如果=m會被單獨連線成一個”.ko”模組,如果沒有則對應的程式碼不會被編譯。那麼這是怎麼實現的?都是通過makefile實現的。

如makefile中:obj-$(CONFIG_DM9000) += dm9000.o,
如果CONFIG_DM9000變數值為y,則obj += dm9000.o,因此dm9000.c會被編譯;如果CONFIG_DM9000變數未定義,則dm9000.c不會被編譯。如果CONFIG_DM9000變數的值為m則會被連線成“.ko”模組。

相關推薦

Linux Makefile與Kconfig檔案

本文章介紹了makefile跟kconfig檔案,包括編譯過程與makefile編碼規則。    編譯過程:     我們在進行linux核心配置的時候經常會執行make menuconfig這個命令,然後螢幕上會出現以下介面: &n

Kconfig檔案

注:本文是學習朱老師課程整理的筆記,基於linux2.6.35.7和九鼎X210BV3S開發板進行移植。 Kconfig的格式 下面擷取/drivers/net下的Kconfig檔案中的部分內容: # Network device configu

三大框架(ssh)學習——配置檔案(一)

配置檔案詳解 指定web應用預設字符集 <constant name="struts.i18n.encoding" value="gbk" /> 此配置相當於: request.setCharacterEncoding(“gbk”); r

三大框架(ssh)學習——配置檔案(二)

多配置檔案實現 專案經常需要多人協作開發,但是如果大家都是用同一個struts.xml檔案,會互相影響不利於開發的正常開展。這樣,我們可以通過<include>元素指定多個配置檔案。 可以在src下面建立多個struts配置檔案。然後再struts.xml中分別引入: str

xxx.launch檔案(部落格學習筆記)

ROS筆記(一)xxx.launch檔案詳解 .launch檔案是ROS中用於同時啟動多個節點的重要檔案,在大型的ROS專案中使用頻繁,所以掌握其主要元素與屬性對ROS系統的應用至關重要: launch標籤(元素)說明 launch拓展說明 parameter說明

Nginx配置配置檔案

文章目錄 配置檔案 nginx.conf配置檔案詳解 用於除錯、定位問題的配置引數 正常執行必備的配置引數 優化效能的配置引數 事件相關配置 Fastcgi相關配置引數 常需要調整的引數 nginx作為web伺服器時使

Django中static(靜態)檔案以及{% static %}標籤的使用

想要深入學習Django的可以看一些這個視訊:超細講解Django打造大型企業官網 在一個網頁中,不僅僅只有一個html骨架,還需要css樣式檔案,js執行檔案以及一些圖片等。因此在DTL中載入靜態檔案是一個必須要解決的問題。在DTL中,使用static標籤來載入靜態檔案。要使用stat

Hibernate_day01---Hibernate環境搭建、配置檔案、核心api介紹

JavaEE三層結構對應的框架 1) web層:struts2框架 2) service層:spring框架 3)dao層:hibernate框架 -- 對資料庫進行crud操作 什麼是框架: 可複用的設計構件 作用:可以少寫一部分程式碼。使用框架寫程式,會幫我們實現一部

Linux(CentOS)開機自動掛載與fstab檔案

摘要: Linux中我們分完區,並做好檔案系統格式化,掛載(mount)之後才可以使用磁碟裝置。/etc/fstab是用來存放檔案系統的靜態資訊的檔案, 當系統啟動的時候,系統會自動地從這個檔案讀取資訊,並且會自動將此檔案中指定的檔案系統掛載到指定的目錄。 Linux中我們分完區,並做

build.gralde檔案

AS中APP所有的配置盡在一個build.gradle檔案中,打包的時候也是解析build.gralde檔案來打包的,所以搞懂build.gradle檔案是至關重要的,結構如下所示 1、apply plugin用來指定用的是哪個外掛,

scrapy settings配置檔案

# -*- coding: utf-8 -*- # Scrapy settings for step8_king project # # For simplicity, this file contains only settings considered important or # comm

nsswitch.conf檔案

Linux系統下的/etc/nsswitch.conf檔案 轉載自:https://www.cnblogs.com/besharp/p/8351227.html 一、什麼是nsswithch.conf(服務搜尋順序)檔案呢?       &n

keepalived介紹及配置檔案

keepalived介紹 Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Hapr

爬蟲Scrapy框架的setting.py檔案

  # -*- coding: utf-8 -*-   # Scrapy settings for demo1 project # # For simplicity, this file contains only setting

Maven的pom.xml配置檔案

轉自: Maven的pom.xml配置檔案詳解  <!--父專案的座標。如果專案中沒有規定某個元素的值,那麼父專案中的對應值即為專案的預設值。 座標包括group ID,artifact ID和 version。-->  &

Spring MVC 配置檔案dispatcher-servlet.xml 檔案

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframew

Hibernate---實體配置(對映)檔案 例如:User.hbm.xml檔案

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN" &n

【MyBatis Generator】程式碼自動生成工具 generatorConfig.xml配置檔案

MyBatis Generator官網地址:http://www.mybatis.org/generator/index.html MyBaris Generator中文地址:http://mbg.cndocs.ml/ 在MBG中,最主要也最重要的,就是generatorConfig.xml

轉:ssm spring+springmvc+mybatis中的xml配置檔案

這幾天一直在整合SSM框架,雖然網上有很多已經整合好的,但是對於裡面的配置檔案並沒有進行過多的說明,很多人知其然不知其所以然,經過幾天的搜尋和整理,今天總算對其中的XML配置檔案有了一定的瞭解,所以拿出來一起分享一下,希望有不足的地方大家批評指正~~~ 首先   這篇文章暫時只對框架中所要用到的配

Spring Boot(二)配置檔案

簡介 Spring Boot使用“習慣由於配置”(專案中存在大量預設的配置,而且內建tomcat)的理念,讓你的無需手動進行配置就可以將專案執行起來。使用Spring Boot很容易建立一個獨立執行的、準生產級別的Spring框架的專案。同時,Spring Boot還提供一個全域性配置檔案對一些