linux内核的Makefile和Kconfig,以及如何在内核中添加自己的代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核的Makefile和Kconfig,以及如何在内核中添加自己的代码相关的知识,希望对你有一定的参考价值。

一、linux内核中是如何将各个  目录树  中的文件组织起来编译的?并且根据需要编译特定功能的内核?

  在linux内核中,有这样两种文件:MakefileKconfig。这两种文件分布在内核目录的各个级目录内(每一级都对应都有),分布在各个级的Kconfig决定了内核要实现某一功能,每一步该怎么走,每个Kconfig描述了所属目录源文档相关的  内核配置菜单,就是我们执行make menuconfig命令后产生的配置菜单,这个菜单包含(连接)多层,每个层次都是由各个目录中的Kconfig产生的。我们可以根据需要来选择如何编译内核(裁剪),然后将配置的结果保存到“.config”文件内。最后在执行Makefile时根据 .config 的结果理实现内核的编译。

二、Kconfig

  1、结构+格式:

    menu  “菜单描述

    config  XXXXXX

      bool  “具体功能描述”---类型定义

      depends on  条件

      default  x(根据bool/int/hex/tristate/string而定)

      help

        解释说明

    endmenu

  2、变量定义:

    bool(布尔类型)  y/nintstring;核心;tristate  n/m/y(移除/模块/内建)

    config HAHA

      bool “HAHA test module”

    bool类型只能选中和不选中;

    tristate:多了一个编译成模块,当编译成内核模块,则会在.config文件内生成一个CONFIG_HAHA=m的配置;假如内建就直接编译成内核--.config内生成CONFIG_HAHA=y

  3、依赖depends on

    即一个限制条件,意识是  此菜单的出现是否依赖与另一个定义

    效果是:如果   依赖菜单   没有被选到 则  该菜单不会出现

  4help解释说明该菜单的功能

四、 .config

  对与内核来说,.config的执行是编译的第一步。.config文件位于源代码根目录下,描述了所有内核配置选项。可以借助内核配置工具来选择这些选项。每个内核配置选项都有对应的名字和变量值--n/m/y。当配为y就会编译到内核 代码中(系统中),当配为m就会以模块的方式编译到内核中。

  代码都有区分:对应到菜单

  所有的配置都会产生在上述菜单中

五、向自己内核中添加程序

  1:文件准备

    1.1、将编写好的源代码复制到linux内核源代码相应的目录中。

    1.2、在该目录中的Kconfig文件中增加新源代码对应的编译配置选项

    1.3、在该目录中的Makefile文件中添加信代码的编译语句

  2、在linux内核drivers/目录中增加目录和子目录

    myDriver$ tree

    |– Kconfig

    |– Makefile

    |– key

    |   |– Kconfig

    |   |– Makefile

    |   `– key.c

    |– led

    |   |– Kconfig

    |   |– Makefile

    |   `– led.c

    `— test.c

以上是关于linux内核的Makefile和Kconfig,以及如何在内核中添加自己的代码的主要内容,如果未能解决你的问题,请参考以下文章

enc28j60网卡驱动模块添加进linux内核,Kconfig,Makefile配置过程

linux--menuconfig

Linux内核移植入门

浅谈内核的MakefileKconfig和.config文件

kernel Makefile Kconfig说明

如何向 Linux 内核上游提交 Patch