• Linux内核配置---menuconfig


    1. 示例

    config SGI_NEWPORT_CONSOLE
            tristate "SGI Newport Console support"
            depends on SGI_IP22 
            select FONT_SUPPORT
            help
              Say Y here if you want the console on the Newport aka XL graphics
              card of your Indy.  Most people say Y here.
    
    config DUMMY_CONSOLE_COLUMNS
            int "Initial number of console screen columns"
            depends on DUMMY_CONSOLE && !ARM
            default 160 if PARISC
            default 80
            help
              On PA-RISC, the default value is 160, which should fit a 1280x1024
              monitor.
              Select 80 if you use a 640x480 resolution by default.
    
    config FRAMEBUFFER_CONSOLE
        bool "Framebuffer Console support"
        depends on FB && !UML
        select VT_HW_CONSOLE_BINDING
        select CRC32
        select FONT_SUPPORT
        default n
        help
          Low-level framebuffer-based console driver.
    config DRM_KMS_FB_HELPER
        bool
        depends on DRM_KMS_HELPER
        select FB
        # select FRAMEBUFFER_CONSOLE if !EXPERT
        # select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
        select FB_SYS_FOPS
        select FB_SYS_FILLRECT
        select FB_SYS_COPYAREA
        select FB_SYS_IMAGEBLIT
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
        select FB_CFB_IMAGEBLIT
        select FB_DEFERRED_IO
        help
          FBDEV helpers for KMS drivers.

    2. 关键字解释

    Kconfig按照一定的格式来书写,menuconfig程序可以识别这种格式,然后从中提取出有效信息组成menuconfig中的菜单项。将来在做驱动移植等工作时,有时需要自己添加Kconfig中的一个配置项来将某个设备驱动添加到内核的配置项目中,这时候就需要对Kconfig的配置项格式有所了解,否则就不会添加。

    menuconfig表示菜单(本身属于一个菜单中的项目,但是他又有子菜单项目)、config表示菜单中的一个配置项(本身并没有子菜单下的项目)。一个menuconfig后面跟着的所有config项就是这个menuconfig的子菜单。这就是Kconfig中表示的目录关系。

    source:内核源码目录树中每一个Kconfig都会用source引入其所有子目录下的Kconfig,从而保证了所有的Kconfig项目都被包含进menuconfig中。这个也说明了:如果你自己在linux内核中添加了一个文件夹,一定要在这个文件夹下创建一个Kconfig文件,然后在这个文件夹的上一层目录的Kconfig中source引入这个文件夹下的Kconfig文件。

    menu: 表示一个菜单项,例如 menu "Console display driver support",  菜单项里面是各种配置。

    tristate:意思是三态(3种状态,对应Y、N、M三种选择方式),意思就是这个配置项可以被三种选择。

    bool:是要么真要么假(对应Y和N)。意思是这个配置项只能被2种选择。

    int:  可以指定一个值,在autoconfig.h中会生成 #define CONFIG_DUMMY_CONSOLE_COLUMNS 80,   make menuconfig中显示为:  (80)Initial number of console screen columns

    depends:意思是本配置项依赖于另一个配置项。如果那个依赖的配置项为Y或者M,则本配置项才有意义;如果依赖的那个配置项本身被设置为N,则本配置项根本没有意义。depends项会导致make menuconfig的时候找不到一些配置项。所以在menuconfig中如果找不到一个选项,但是这个选项在Kconfig中却是有的,则可能的原因就是这个配置项依赖的一个配置项是不成立的。depends依赖的配置项可以是多个,还可以有逻辑运算。这种时候只要依赖项目运算式子的结果为真则依赖就成立。

    select:表示depends on的值有效时,下面的select也会成立,将相应的内容选上。 此时被别人选中的选项失去了自我决定自己是否选择的能力,如上例中 FRAMEBUFFER_CONSOLE 被 DRM_KMS_FB_HELPER 选中后menuconfig中它只能显示被选中状态,而且无法被更改!

    default:表示depends on的值有效时,下面的default也会成立,将相应的选项选上,有三种选项,分别对应y,n,m。

    help:帮助信息,解释这个配置项的含义,以及如何去配置他。

    comment: comment条目用于定义一些帮助信息,出现在界面的第一行,如在arch/arm/Kconifg中有如下代码:

    choice: choice条目将多个类似的配置选项组合在一起,供用户单选或多选,这不同于menu条目

    3. Kconfig和.config文件和Makefile三者的关联

    配置项被配置成Y、N、M会影响“.config”文件中的CONFIG_XXX变量的配置值。“.config”中的配置值(=y、=m、没有)会影响最终的编译链接过程。如果=y则会被编入(built-in),如果=m会被单独连接成一个”.ko”模块,=n则对应的代码不会被编译。通过makefile实现的。

    Kconfig中:config VGACON_SOFT_SCROLLBACK

    makefile中:obj-$(VGACON_SOFT_SCROLLBACK) += xxxxx.c

    autoconf.h中:#define CONFIG_VGACON_SOFT_SCROLLBACK 1

  • 相关阅读:
    php 建立类POST/GET 的HTTP请求
    上传文件
    golang精选100题带答案
    go面试
    golang反射
    go语言中type的几种使用
    写个版本迭代的方法 例如1.0.9 迭代为1.1.0 到10自动往前进1
    压缩文件和解压文件
    go语言中的文件创建,写入,读取,删除
    go面试题
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/9879238.html
Copyright © 2020-2023  润新知