`

Kconfig文档的作用

阅读更多

2.6 内核的源码树目录下一般都会有两个文文: Kconfig Makefile 。分布在各目录下的 Kconfig 构成了一个分布式的内核配置数据库,每个 Kconfig 分别描述了所属目录源文件相关的内核配置菜单。在内核配置 make menuconfig( xconfig ) 时,从 Kconfig 中读出配置菜单,用户配置完后保存到 .config( 在顶层目录下生成 ) 中。在内核编译时,主 Makefile 调用这个 .config ,就知道了用户对内核的配置情况。

上面的内容说明: Kconfig 就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改 Kconfig 来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的 Makefile

因此,一般添加新的驱动时需要修改的文件有两种(注意不只是两个)

*Kconfig
*Makefile

要想知道怎么修改这两种文件,就要知道两种文档的语法结构。

First:   Kconfig

 

每个菜单项都有一个关键字标识,最常见的就是 config

语法:
config symbol

options

symbol 就是新的菜单项, options 是在这个新的菜单项下的属性和选项

其中 options 部分有:

1
、类型定义:
每个 config 菜单项都要有类型定义, bool :布尔类型, tristate 三态:内建、模块、移除, string :字符串, hex :十六进制, integer :整型

例如 config HELLO_MODULE
bool "hello test module"

bool
类型的只能选中或不选中, tristate 类型的菜单项多了编译成内核模块的选项,假如选择编译成内核模块,则会在 .config 中生成一个 CONFIG_HELLO_MODULE=m 的配置,假如选择内建,就是直接编译成内核影响,就会在 .config 中生成一个 CONFIG_HELLO_MODULE=y 的配置 .

2
、依赖型定义 depends on requires
指此菜单的出现是否依赖于另一个定义

config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
   
这个例子表明 HELLO_MODULE 这个菜单项只对 XScale 处理器有效,即只有在选择了 ARCH_PXA 该菜单才可见 ( 可配置 )

3
、帮助性定义
只是增加帮助用关键字 help ---help---

更多详细的 Kconfigconfig 语法可参考:


Second: 
内核的 Makefile

内核的 Makefile 分为 5 个组成部分:
Makefile     
最顶层的 Makefile
.config        
内核的当前配置文档,编译时成为顶层 Makefile 的一部分
arch/$(ARCH)/Makefile
和体系结构相关的 Makefile
s/ Makefile.*   
一些 Makefile 的通用规则
kbuild Makefile      
各级目录下的大概约 500 个文档,编译时根据上层 Makefile 传下来的宏定义和其他编译规则,将源代码编译成模块或编入内核。

顶层的 Makefile 文档读取 .config 文档的内容,并总体上负责 build 内核和模块。 Arch Makefile 则提供补充体系结构相关的信息。 s 目录下的 Makefile 文档包含了任何用来根据 kbuild Makefile 构建内核所需的定义和规则。

(其中 .config 的内容是在 make menuconfig 的时候,通过 Kconfig 文档配置的结果)


linux2.6.x/Documentation/kbuild 目录下有详细的介绍有关 kernel makefile 的知识。

最后举个例子:
假设想把自己写的一个 flash 的驱动程式加载到工程中,而且能够通过 menuconfig 配置内核时选择该驱动该怎么办呢?能够分三步:

第一:将您写的 flashtest.c 文档添加到 /driver/mtd/maps/ 目录下。

第二:修改 /driver/mtd/maps 目录下的 kconfig 文档:
config MTD_flashtest
tristate “ap71 flash"

这样当 make menuconfig ,将会出现 ap71 flash 选项。

第三:修改该目录下 makefile 文档。
添加如下内容: obj-$(CONFIG_MTD_flashtest)    += flashtest.o

这样,当您运行 make menucofnig 时,您将发现 ap71 flash 选项,假如您选择了此项。该选择就会保存在 .config 文档中。当您编译内核时,将会读取 .config 文档,当发现 ap71 flash 选项为 yes 时,系统在调用 /driver/mtd/maps/ 下的 makefile 时,将会把 flashtest.o 加入到内核中。即可达到您的目的。

分享到:
评论

相关推荐

    Make&Kconfig

    Kconfig文件的作用是让用户配置内核,定义了一些变量,用户通过设置变量的值来选择如何个性化自己的系统内核。 Kconfig文件的作用可以分为两个方面:一是定义变量,二是提供菜单项。定义的变量将在每个菜单都有一个...

    Makefile与Kconfig

    Kconfig文件的作用就是为了让用户配置内核。在Kconfig中定义了一些变量,用户通过设置变量的值来选择如何个性化自己的系统内核。定义的变量将在每个菜单都有一个关键字标识,最常见的就是config语法: config ...

    Kconfig简介

    Kconfig文件的详细语法规则可以在内核文档`Documentation/kbuild/kconfig-language.txt`中找到。通过Kconfig,开发者可以轻松地启用或禁用内核的特定功能,根据硬件特性定制内核,甚至在不修改源码的情况下调整内核...

    Kconfig 语法介绍1

    在Linux内核的配置过程中,Kconfig文件会被用来生成图形化的配置菜单(如menuconfig),允许用户在编译内核之前选择或取消选择特定的配置。 在Kconfig文件中,每个配置项由一个关键字标识,如config。这个关键字...

    Kconfig详解

    在内核源码树中,每个目录下都存在一个Kconfig文件和一个Makefile文件,共同构成了分布式内核配置数据库。 #### 二、Kconfig的作用与语法 ##### 1. 作用 - **配置选项管理**:Kconfig定义了内核编译时的可配置...

    linux kconfig详解

    Kconfig不仅让Linux内核拥有更好的模块化特性,而且通过灵活的配置选项,为开发者提供了更高效和个性化定制内核的能力。随着Linux内核的不断演进,对Kconfig语法和Makefile编译系统的理解对于嵌入式系统开发者尤为...

    Kconfig和Makefile

    下面将详细阐述这两个文件的作用以及如何使用它们。 `Kconfig`文件是内核配置的元数据源,它定义了内核配置菜单的结构。每个`Kconfig`文件都包含了与相应目录下源代码相关的配置选项。这些选项通常包括布尔值(bool...

    kconfig-language.zip_kconfig_language

    2. 脚本支持:可以使用Kconfiglib库生成Python或Perl脚本,对Kconfig进行自动化处理,例如检查配置一致性或生成文档。 3. 依赖关系:通过`depends on`关键字,配置项可以依赖于其他配置项,确保只有当依赖项满足...

    Kconfig语法

    关于`Kconfig`的详细说明可以在Linux内核文档`/Documentation/kbuild/kconfig-language.txt`中找到。 #### 二、配置选项树结构 配置数据库中的配置选项是以树的形式组织的。例如: ``` +- Code maturity level ...

    kconfig-frontends-4.11.0.1.tar.bz2

    至于压缩包内的文件"px4___kconfig-frontends-4.11.0.1.tar.bz2",这可能是将px4项目与kconfig-frontends-4.11.0.1集成后的结果,意味着你将得到一个包含了所需的所有源代码和相关资源的包,可以直接在你的开发环境...

    Android_Linux_Kconfig[借鉴].pdf

    `Kconfig`文件分散在整个内核源码树中,每一个文件对应一个特定的目录或子系统,描述了该部分相关的内核配置项。当运行`make menuconfig`或`xconfig`等配置命令时,这些`Kconfig`文件会被解析,生成配置菜单供用户...

    LED驱动源码和测试源码(包括makefile和Kconfig文件)

    接下来,我们将详细探讨这些文件及其在LED驱动开发中的作用。 首先,`led.c`是LED驱动的核心代码,通常包含以下功能: 1. 初始化:初始化LED的硬件接口,例如设置GPIO引脚为输出模式。 2. 开启和关闭LED:通过设置...

    linux 驱动之Kconfig文件和Makefile文件实例

    在Linux系统中,驱动开发是不可或缺的一部分,而Kconfig和Makefile文件则在驱动构建过程中起着关键作用。本文将详细解析这两个文件的功能以及它们如何协同工作,以便于理解Linux驱动程序的构建流程。 首先,Kconfig...

    Kconfig基础知识

    Kconfig 脚本文件一般位于各个内核子目录中,并且通常与 `.config` 文件一起使用,该文件保存着用户的配置选项。通过运行 `make menuconfig` 或者 `make xconfig` 命令,用户可以看到一个由 Kconfig 文件生成的配置...

    kconfigREADME.pdf

    根据给定文件内容,我们可以提炼出关于NuttX操作系统、Kconfig配置系统以及genromfs工具的相关知识点。 首先,NuttX是一个开源的实时操作系统(RTOS),适用于嵌入式系统,支持广泛的硬件平台,包括STM32微控制器。...

    ( Linux教程之Linux内核的Makefile和kconfig解读

    为此,Linux内核开发团队引入了`Makefile`和`Kconfig`两个关键文件,以简化和自动化这一过程。 #### 二、Makefile文件 `Makefile`是一种用于指导编译工具如何构建程序的脚本文件。在Linux内核中,`Makefile`文件被...

    Makefile基础知识及Makefile Kconfig 内核配置 内核裁剪.rar

    5. **自动更新:** 当Kconfig文件改变时,通过运行make oldconfig或make nconfig,可以自动更新.config文件,确保配置与Kconfig文件同步。 **内核配置与裁剪:** 1. **内核裁剪:** 内核裁剪是指根据设备和应用需求...

    linux-driver-setup.rar_2.6.30.4_kconfig

    首先,我们需要了解Linux内核配置文件Kconfig和构建文件Makefile的作用。 **1. Kconfig文件** Kconfig是Linux内核配置系统的文本文件,用于定义内核配置选项。在为内核添加新的驱动时,我们需要在相应的Kconfig...

    探索Linux内核:Kconfig的秘密

    为了探索Linux内核是如何编译的,本文将深入研究Kconfig/kBuild内部进程,解释.config文件和vmlinux/bzImage文件是如何生成的,并介绍一个用于依赖性跟踪的智能技巧。 Kconfig 构建内核的第一步总是配置。Kconfig...

    基于JavaScript核心技术的kconfig服务器与客户端配置管理设计源码

    该项目为kconfig服务器与客户端配置管理系统的设计源码,采用JavaScript核心技术,包含346个文件,涵盖35个PHP脚本、30个文档、30个演示文稿、30个电子表格、29个shell脚本、25个JSON和JavaScript文件,以及其他格式...

Global site tag (gtag.js) - Google Analytics