`

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 加入到内核中。即可达到您的目的。

分享到:
评论

相关推荐

    Kconfig和Makefile

    Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在执行内核配置make menuconfig时...

    linux kconfig详解

    linux kconfig详解,在嵌入式中,有很多的问题在这份文档中是可以得到解决的!

    探索Linux内核:Kconfig的秘密

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

    Kconfiglib, 一个灵活的python 2/3 Kconfig分析器和库.zip

    Kconfiglib, 一个灵活的python 2/3 Kconfig分析器和库 目录概述文档文档安装工具安装与 pipLinux内核插件的安装。手动安装工具示例示例脚本示例真实世界示例示例 make iscriptconfig 会话测试套件注释致谢。许可协议...

    kconfigREADME.pdf

    nuttx官方文档的注释版,里面有我自己个人的一些心得体会,也很可能有错误,希望大家积极反馈,同时有什么发现也可以发消息给我。

    lpn-bridle:Li-Pro.Net助力嵌入式环境

    使用特定的“ no kconfig” hack修补Zephyr源代码,因为我们改为使用共享的Kconfig文档集,请键入: git -C zephyr apply \ ../bridle/scripts/patches/zephyr/0001-doc-Share-Kconfig-documentation-between-...

    GUN tool收集的文档

    gcc中文手册.pdf GNU make.doc The.GNU.C.Library.pdf shell-programming.pdf Kconfig.doc

    Linux Kbuild文档

    1.Linux内核配置方式 2.Kconfig 3.Kbuild Makefile 4.一个使用linux Kbuild实现可配置编译的例子

    Huawei LiteOS组件仓库主要存放组件的补丁及相关的sha256校验文件

    Huawei LiteOS组件仓库,主要存放组件的补丁及相关的sha256校验...新增组件或demo,都需要新建其自身的Kconfig、Makefile、.mk文件,本文档以新增组件为主题,新增demo的方法和新增组件类似,本文档不再赘述。curl-7.5

    mini6410_2.6.38内核_uart1_platform_device驱动

    原创的友善之臂的mini6410 linux-2.6.38内核的uart1 串口驱动,使用platform_device方式,压缩包里面有驱动源代码、编译好了的ko文件、使用说明文档、用户例程的源代码和可执行程序,但是并没有给出直接编译驱动和...

    Install embedded Linux on SD or eMMC:用于创建分区,格式化和安装嵌入式Linux文件的脚本。-开源

    这是一个脚本,用于分区,格式化和安装嵌入式Linux文件。 该工具使用Kconfig设置要安装在USB驱动器或eMMC存储器上的分区大小,格式和文件。 Linux内核和Buildroot使用相同的Kconfig(menuconfig,xconfig或gconfig)...

    kbuild:Userland的Kbuild存储库模板

    Kconfig中的帮助文档,而不是自述文件 目录结构 文件路径 描述 生成文件 顶级Makefile。 .config 软件包配置文件。 arch / $(ARCH)/ 架构层 sys / $(平台)/ 平台层 sys / unix / 与Unix和Linux扩展兼容的...

    trustonic-tee-driver:可信执行环境的Android驱动程序

    Trustonic T恤司机 Trustonic可信执行环境的Android驱动程序 QEmu / Goldfish模拟器的版本 要构建内核模块: 将trustonic文件夹复制到Linux内核树的'drivers'目录中 相应地更新全局Kconfig和Makefile 构建模块

    USBFuzz:通过设备仿真对USB驱动程序进行模糊处理的框架

    开始使用OSes/linux-target/kconfig的内核配置文件构建内核准备Linux用户空间映像如果您不想自己构建映像,则可以直接从下载映像。 否则,请使用以下命令在scripts目录中运行脚本: scripts/create-image.sh

    《Android系统源代码情景分析》

    2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 ...

    Android系统源代码情景分析-罗升阳-源码

    2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件...

    DC6008_irda_manager驱动程序和APK_20150914_1424.7z

    修改/drivers/的Kconfig 加入 source "drivers/irda/Kconfig" 修改/drivers/的Makefile 加入obj-$(CONFIG_IRDA_DC6008) += irda/ 2.编译kernel。 3. 测试代码: 在终端下先查看是否有/sys/class/sec/sec_ir,然后...

    Linux内核修炼之道

    内核文档 ................................................................................................................................ 32 经典书籍 .....................................................

Global site tag (gtag.js) - Google Analytics