yiffer的个人空间 https://blog.eetop.cn/edesign [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

用于编写configure.in的Config语言简介

已有 5497 次阅读| 2009-5-20 20:43 |个人分类:Linux移植

1. 介绍

Config语言不是bash. Config语言是一种Linux内核配置语言. config.in and Config.in都是使用本语言编制而成. 尽管它看起来,通常工作时,很象一个SH语言的子集,CONFIG语言有更加严格的语法和不同的语义.

CONFIG语言编程的基本指南:仅使用在CONFIG.IN文件中出现的编程语句.

2. 说明

有四各配置程序可以解释和识别Config语言:

l         scripts/Configure        make config、make oldconfig、

l         scripts/Menuconfig      make menuconfig

l         scripts/tkparse          make xconfig

l         mconfig             (in development)

''Configure'' 是一个bash脚本语言,它解释了Config.in文件;''Menuconfig''是另外一种bash脚本.

3. 语句
一个Config语言脚本是由一系列的语句构成的。共有21个简单的语句;一个''if''语句;菜单块和一个 ''source''语句。

一行结尾处的''\'' 表示续行。

''#''用于引入一个注释, 该注释一直保持到该行的结尾. 但是,如果是多行的形如''# ... is not set''的并不是注释,它们具有语义。

    不能用;(分号)来开始一个新行。 ''if''语句中的处可以开始一个新行。

3.1基本的语法元素:
    /prompt/——一个位于单引号或双引号内的字符串. 如果字位于双引号内,它不需要任何$。

    /word/——一个未加引号的字, 位于单引号或双引号内的字符串。如果字未加引号或是位于双引号内的需要$号。

    /symbol/——一个没有引号的字. symbol必须以CONFIG_*的形式出现。

    /dep/ ——一个相关字. 运行时/dep/ 必须等于 "y", "m", "n",或 ""。

    /expr/——一类bash的表达式,使用以下运算符:''=''、 ''!=''、 ''-a''、 ''-o''和''!''。

3.2 所有的语句:
文字语句:

        mainmenu_name          /prompt/

        comment               /prompt/

        text                     /prompt/

    询问语句:

        bool            /prompt/ /symbol/

        hex             /prompt/ /symbol/ /word/

        int               /prompt/ /symbol/ /word/

        string             /prompt/ /symbol/ /word/

        tristate             /prompt/ /symbol/

    [Page]字义语句:

        define_bool        /symbol/ /word/

        define_hex        /symbol/ /word/

        define_int          /symbol/ /word/

        define_string        /symbol/ /word/

        define_tristate        /symbol/ /word/

    相关语句:

        dep_bool        /prompt/ /symbol/ /dep/ ...

        dep_mbool       /prompt/ /symbol/ /dep/ ...

        dep_hex         /prompt/ /symbol/ /word/ /dep/ ...

        dep_int           /prompt/ /symbol/ /word/ /dep/ ...

        dep_string         /prompt/ /symbol/ /word/ /dep/ ...

        dep_tristate         /prompt/ /symbol/ /dep/ ...

    未设置语句:

        unset                    /symbol/ ...

    选项语句:

        choice          /prompt/ /word/ /word/

        nchoice         /prompt/ /symbol/ /prompt/ /symbol/ ...

    If语句:

        if [ /expr/ ] ; then /statement/

         ... fi

        if [ /expr/ ] ; then /statement/

         ... else /statement/

         ... fi

    菜单块:

        mainmenu_option next_comment

        comment /prompt/ /statement/ ... endmenu

    Source语句:

        source /word/

l         mainmenu_name /prompt/

用于指定本CONFIG语言文件顶层的名字。

例如:

    # arch/sparc/config.in

    mainmenu_name "Linux/SPARC Kernel Configuration"

l         comment /prompt/

此语句用于在用户配置过程中向用户显示提示信息,同时在输出期间也把它返回给输出文件。注意:此处的prompt,象所有的prompt一样,是一个没有$符号、位于引号内的字符串。

''comment''并不用于对一个[Page]CONFIG语言的注释。它用于用户接口显示文字,以及向输出文件中写入输出信息。

例如:

    # drivers/net/Config.in

    comment ''CCP compressors for PPP are only built as modules.''

l         text /prompt/

向用户显示提示信息。不向输出文件中写入提示信息。仅 mconfig 在它的帮助中使用此命令。

例如:

    # mconfig internal help text

    text ''Here are all the mconfig command line options.''

l         bool /prompt/ /symbol/

此命令用于向用户显示/prompt/提示信息,并从用户接收数据,并把该数据赋给/symbol/。合法的输入值为 "n" 和"y"。

 

l         bool /prompt/ /symbol/

此命令用于向用户显示/prompt/提示信息,并从用户接收数据,并把该数据赋给/symbol/。合法的输入值为 "n" 和"y"。

注意:此命令没有默认值。

例如:

    # arch/i386/config.in

    bool ''Symmetric multi-processing support'' CONFIG_SMP

l         hex /prompt/ /symbol/ /word/

此命令显示/prompt/提示信息给用户,并从用户接收数据值,并赋给 /symbol/。合法输入值为十六进制数。  /word/ 是默认值。

例如:

    # drivers/sound/Config.in

    hex ''I/O base for SB Check from manual of the card'' CONFIG_SB_BASE 220

l         int /prompt/ /symbol/ /word/

此命令向用户显示/prompt/提示信息,接收用户输入值,并赋给/symbol/。 /word/是默认值。

合法输入值:十进制数。

例如:

    # drivers/char/Config.in

    int ''Maximum number of Unix98 PTYs in use (0-2048)'' \ CONFIG_UNIX98_PTY_COUNT 256

l         string /prompt/ /symbol/ /word/

此命令向用户显示/prompt/提示信息,接收用户输入值,并赋给/symbol/。 /word/是默认值。

合法输入值: ASCII字符串(''"'' and ''\\''除外).

例如:

    # drivers/sound/Config.in

    string ''  Full pathname of DSPxxx.LD firmware file'' \ CONFIG_PSS_BOOT_FILE /etc/sound/dsp001.ld

l         tristate /prompt/ /symbol/

此命令向用户显示/prompt/提示信息,接收用户输入值,并赋给/symbol/。

合法输入值:"n", "m", or "y"。

"m"代表"module",它表示/symbol/应该被编译为内核module,仅当CONFIG_MODULES的当前值为Y时,m值合法。

无默认值。

例如:

    # fs/Config.in

    tristate ''NFS filesystem support'' CONFIG_NFS_FS

l         define_bool /symbol/ /word/

此命令把/word/的值赋给/symbol/。合法值为"n" 或"y"。

例如:

    # arch/alpha/config.in

    if [ "$CONFIG_ALPHA_GENERIC" = "y" ]

    then define_bool CONFIG_PCI y

            define_bool CONFIG_ALPHA_NEED_ROUNDING_EMULATION y fi

l         define_hex /symbol/ /word/

此命令把/word/的值赋给/symbol/。合法值:十六进制数。

例如:

    # Not from the corpus

    bool ''Specify custom serial port'' CONFIG_SERIAL_PORT_CUSTOM

    if [ "$CONFIG_SERIAL_PORT_CUSTOM" = "y" ]; then hex ''Serial port number'' CONFIG_SERIAL_PORT else define_hex CONFIG_SERIAL_PORT 0x3F8 fi

l         define_int /symbol/ /word/

此命令把/word/的值赋给/symbol/。合法值:十进制数。

例如:

    # drivers/char/ftape/Config.in

    define_int CONFIG_FT_ALPHA_CLOCK 0

l         define_string /symbol/ /word/

此命令把/word/的值赋给/symbol/。合法输入值:[Page] ASCII字符串(''"'' and ''\\''除外).

例如:

    # Not from the corpus

    define_string CONFIG_VERSION "2.2.0"

l         define_tristate /symbol/ /word/

此命令把/word/的值赋给/symbol/。合法输入值"n"、"m"、和"y"。

例如:

    # drivers/video/Config.in

    if [ "$CONFIG_FB_AMIGA" = "y" ]; then define_tristate CONFIG_FBCON_AFB y

       define_tristate CONFIG_FBCON_ILBM y else if [ "$CONFIG_FB_AMIGA" = "m" ]; then define_tristate CONFIG_FBCON_AFB m

          define_tristate CONFIG_FBCON_ILBM m fi fi

l         dep_bool /prompt/ /symbol/ /dep/ ...

此命令对所有在dependency list中的dependencies进行评估,任何一个值为"y"的dependency没有限制输入范围。任何一个值为空的dependency 被忽略,任何一个值为"n"或其他值(比如 "m")的dependency 限制输入为"n"。不允许对dependencies加引号。

如果输入范围被限制为单选"n",dep_bool把"n"赋给/symbol/。如果是多选,dep_bool向用户显示/prompt/提示信息,从用户接收数据,并赋值给/symbol/。

例如:

    # drivers/net/Config.in

    dep_bool  ''Aironet 4500/4800 PCI support ''  CONFIG_AIRONET4500_PCI  $CONFIG_PCI

l         dep_mbool /prompt/ /symbol/ /dep/ ...

此命令对所有在dependency list中的dependencies进行评估,任何一个值为"y"或"m"的dependency没有限制输入范围。任何一个值为空的dependency 被忽略,任何一个值为"n"或其他值(比如 "m")的dependency 限制输入为"n"。不允许对dependencies加引号。

如果输入范围被限制为单选"n",dep_bool把"n"赋给/symbol/。如果是多选,dep_bool向用户显示/prompt/提示信息,从用户接收数据,并赋值给/symbol/。

例如:

    # Not from the corpus

    dep_mbool ''Packet socket: mmapped IO'' CONFIG_PACKET_MMAP $CONFIG_PACKET

 

l         dep_hex /prompt/ /symbol/ /word/ /dep/ ...

l         dep_int /prompt/ /symbol/ /word/ /dep/ ...

l         dep_string /prompt/ /symbol/ /word/ /dep/ ...

l         dep_tristate /prompt/ /symbol/ /dep/ ...

此命令对所有在dependency list中的dependencies进行评估,任何一个值为"y"的dependency没有限制输入范围。任何一个值为"m"的dependency 限制输入为"m"或"n",任何一个值为空的dependency 被忽略,任何一个值为"n"或其他值(比如 "m")的dependency 限制输入为"n"。不允许对dependencies加引号。

如果输入范围被限制为单选"n",dep_bool把"n"赋给/symbol/。如果是多选,dep_bool向用户显示/prompt/提示信息,从用户接收数据,并赋值给/symbol/。

例如:

    # drivers/char/Config.in

    dep_tristate ''Parallel printer support'' CONFIG_PRINTER $CONFIG_PARPORT

l         unset /symbol/ ...

此命令向/symbol/赋值"",,但是不把/symbol/输出到输出文件中。

例如:

    # arch/mips/config.in

    unset CONFIG_PCI

    unset CONFIG_MIPS_JAZZ

    unset CONFIG_VIDEO_G364

l         choice /prompt/ /word/ /word/

此命令实现一个选项列表或"radio button list"选项。向用户显示/prompt/和一组有着对应符号的子提示信息。

当用户选择了一个值时,choice命令设置相应的symbol值为"y",并把其他所有在此choice list中的项的值设置为 "n"。

第二个参数是用单引号或双引号内的字,用于描述一些子提示符或符号名

 

 原文地址 http://www.yqxmcu.com/study/51danpianji/51qitaziliao/200604/856.shtml

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 19

    获赞
  • 69

    评论
  • 3705

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 14:20 , Processed in 0.014663 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部