zoukankan      html  css  js  c++  java
  • Linux内核配置Kconfig语法

    注:来自转载

    原文链接:https://blog.csdn.net/jianwen_hi/article/details/53398141

     

    何为Kconfig 它的作用是什么

    内核源码编译过程

     

    1. 遍历每个源码目录(或配置指定的源码目录)Makefile
    2. 每个目录的Makefile 会根据Kconfig来定制要编译对象
    3. 回到顶层目录的Makeifle执行编译

    那么我们就得出各个文件的作用

    1. Kconfig ---> (每个源码目录下)提供选项
    2. .config ---> (源码顶层目录下)保存选择结果
    3. Makefile---> (每个源码目录下)根据.config中的内容来告知编译系统如何编译

    说到底,Kconfig就是配置哪些文件编译,那些文件不用编译。后期linux内核都做出了如下的图形界面,但由于要进行Linux内核驱动开发,需要向将驱动的代码添加到Makefile中一起编译,所以Kconfig的一些语法也该了解,于是有了这篇文章。

    基本使用方法

    我们以简单的单选项为案例来演示
    例如,我们做好了一个驱动,需要将选项加入到内核的编译选项中,可以按以下步骤操作:

    第一步 配置Kconfig

    driver目录下新建一个目录

    mkdir driver/test

    进入test目录,创建Kconfig文件

    这里定义了一个TEST的句柄,Kconfig可以通过这个句柄来控制Makefile中是否编译,”Test driver”是显示在终端的名称。
    具体的语法在Kconfig语法简介中介绍。

    第二步 配置Makefile

    在同样的目录中,新建一个Makefile

    Obj-$(CONFIG_选项名) += xxx.o

    /*当CONFIG_选项名=y时,表示对应目录下的xxx.c将被编译进内核

    CONFIG_选项名=m时对应目录下的xxx.c将被编译成模块*/

    第三步 配置上层目录的Makefile与Kconfig

    在上一层目录的Kconfig中

    表示将test文件夹中的Kconfig加入搜寻目录

    在上一层目录的Makefile中

     

    结果,运行根目录的.config查看结果

    Kconfig语法简介

    单一选项

    总体原则:每一个config就是一个选项,最上面跟着控制句柄,下面则是对这个选项的配置,如选项名是什么,依赖什么,选中这个后同时会选择什么。

    1 config CPU_S5PC100
    2     bool "选项名"
    3     select S5P_EXT_INT
    4     select SAMSUNG_DMADEV
    5     help
    6       Enable S5PC100 CPU support

    config —> 选项
    CPU_S5PC100 —>句柄,可用于控制Makefile 选择编译方式
    bool —>选择可能:TRUE选中、FALSE不选 选中则编译,不选中则不编译。
    如果后面没有字符串名称,则表示其不会出现在选择软件列表中
    select —> 当前选项选中后则select后指定的选项自动被选择

    1 depends on ARM || BLACKFIN || MIPS || COLDFIRE

    depend on 依赖,后面的四个选择其中至少一个被选择,这个选项才能被选

    1 config DM9000
    2     tristate "DM9000 support"

    tristate —> 选中并编译进内核、不选编译成模块

    选项为数字

    1 config ARM_DMA_IOMMU_ALIGNMENT
    2     int "Maximum PAGE_SIZE order of alignment for DMA IOMMU buffers" ---->该选项是一个整型值
    3     range 4 9 ---->该选项的范围值
    4     default 8 ---->该选项的默认值
    5     help
    6       DMA mapping framework by default aligns all buffers to the smallest

    4-8为这个数字的范围,运行结果

    这里的defult其实也可以用在bool中

    config STACKTRACE_SUPPORT
        bool    --->该选项可以选中或不选,且不会出现在选择列表中
        default y ---->表示缺省情况是选中

    if..endif

     1 if ARCH_S5PC100 --->如果ARCH_S5PC100选项选中了,则在endif范围内的选项才会被选
     2 
     3 config CPU_S5PC100
     4     bool "选项名"
     5     select S5P_EXT_INT
     6     select SAMSUNG_DMADEV
     7     help
     8       Enable S5PC100 CPU support
     9 
    10 endif

    举个例子,如果CPU没有选择使用多核CPU,则不会出现CPU个数的选项。

    choice多个选项

     1 choice      --->表示选择列表
     2     prompt "Default I/O scheduler"         //主目录名字
     3     default DEFAULT_CFQ                    //默认CFQ
     4     help
     5       Select the I/O scheduler which will be used by default for all
     6       block devices.
     7 
     8     config DEFAULT_DEADLINE
     9         bool "Deadline" if IOSCHED_DEADLINE=y 
    10 
    11     config DEFAULT_CFQ
    12         bool "CFQ" if IOSCHED_CFQ=y
    13 
    14     config DEFAULT_NOOP
    15         bool "No-op"
    16 
    17 endchoice

    menu与menuconfig

    menu的用法

     1 menu "Boot options"  ----> menu表示该选项是不可选的菜单,其后是在选择列表的菜单名
     2 
     3 config USE_OF
     4     bool "Flattened Device Tree support"
     5     select IRQ_DOMAIN
     6     select OF
     7     select OF_EARLY_FLATTREE
     8     help
     9       Include support for flattened device tree machine descriptions.
    10 ....
    11 
    12 endmenu     ----> menu菜单结束

    menu指的是不可编辑的menu,而menuconfig则是带选项的menu
    menu和choice的区别
    menu 可以多选 choice 是单项选择题

    menuconfig的用法

    1 menuconfig MODULES ---> menuconfig表示MODULE是一个可选菜单,其选中后是CONFIG_MODULES
    2     bool "菜单名"
    3 if MODULES
    4 ...
    5 endif # MODULES

    说到底,menconfig 就是一个带选项的菜单,在下面需要用bool判断一下,选择成立后,进入if …endif 中间得空间。

  • 相关阅读:
    CF 1182F Maximum Sine——根号算法
    左偏树学习笔记
    CF1182 D Complete Mirror——思路
    AT3576 E Popping Balls——计数思路
    loj 6053 简单的函数 —— min_25筛
    bzoj 2784 时间流逝 —— 树上高斯消元
    loj 2542 随机游走 —— 最值反演+树上期望DP+fmt
    poj 2096 , zoj 3329 , hdu 4035 —— 期望DP
    loj 6485 LJJ学二项式定理 —— 单位根反演
    bzoj 3328 PYXFIB —— 单位根反演
  • 原文地址:https://www.cnblogs.com/-tbd-/p/12560189.html
Copyright © 2011-2022 走看看