zoukankan      html  css  js  c++  java
  • Linux 内核中的 kconfig 原理

    转载:https://blog.csdn.net/qqliyunpeng/article/details/50858075
    内核源码中是怎么实现menuconfig

    1、第一步:配置生成.conf
    当执行make menuconfig时,调用的是scripts/Kconfig/Makefile文件中对menuconfig的定义

    menuconfig: $(obj)/mconf
    $< $(silent) $(Kconfig)
    展开启动的符号和一些变量

    menuconfig: scripts/kconfig/mconf
    scripts/kconfig/mconf -s Kconfig
    逻辑是这样的:
    1、menuconfig
    2、检查scripts/kconfig/mconf文件是否存在
    3、如果不存在,用Makefile中的依赖关系,生成mconf文件
    4、如果存在,执行mconf Kconfig

    执行的结构是输出图形界面。配置完成之后,在linux的家目录下生成.config隐藏文件
    其中的内容:

    CONFIG_ARM=Y
    CONFIG_MIGHT_HAVE_PCI=Y
    ...
    很明显,这些配置是不能使用的,内核在使用的时候其实是使用的根据配置文件生成的autoconf.h文件

    2、autoconf.h文件的生成

    这个文件位于include/config/generated/
    文件的生成是最顶层的makefile中的这一句:

    $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
    展开:

    @/bin/make -f scripts/kconfig/Makefile silentoldconfig
    解释:进入scripts/kconfig/Makefile执行make silentoldconfig
    此命令执行的是这样一句话:

    conf --silentoldconfig Kconfig
    他会检查,配置选项中是不是有 (new) 项,如果没有,便会在 include/ 目录下两个文件 conf、generated。如果有,可能会编译错误,因此,这里一定要注意配置中不能有新的配置项。
    include/
    ├── config
    │ ├── auto.conf
    │ ├── auto.conf.cmd
    │ ├── gen
    │ │ └── choice1.h
    │ ├── ledon.h
    │ ├── num
    │ │ ├── param2.h
    │ │ └── param.h
    │ ├── string
    │ │ └── param.h
    │ ├── tristate
    │ │ └── param.h
    │ └── tristate.conf
    └── generated
    └── autoconf.h

    其中的 generated/autoconf.h 便是我们用图形界面配置的宏了,在普通工程中使用,只需要在文件的头部inlcude进 autoconf.h 即可。

  • 相关阅读:
    状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely
    简单几何(推公式) UVA 11646 Athletics Track
    简单几何(四边形形状) UVA 11800 Determine the Shape
    简单几何(求交点) UVA 11437 Triangle Fun
    计算几何模板
    简单几何(相对运动距离最值) UVA 11796 Dog Distance
    简单几何(求划分区域) LA 3263 That Nice Euler Circuit
    覆盖的面积 HDU
    Desert King 最小比率生成树 (好题)
    约会安排 (区间合并)毒瘤题
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9235812.html
Copyright © 2011-2022 走看看