zoukankan      html  css  js  c++  java
  • Linux内核配置机制与编译过程分析

    1. 内核配置系统的基本结构

    内核配置系统由以下三个部分组成:

    (1)Makefile:分布在内核源代码根目录及各层目录中,定义了内核编译的规则;

    (2)配置文件:一般在/kernel/arch/$ARCH/configs中,/kernel/arch目录下的每个架构都有对应的默认配置文件;

    (3)配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解析)、配置用户界面(字符界面、Ncurses图形界面、Xwindows图形界面,各自对应make config、make menuconfig、make xconfig)

    2. 内核配置与编译的步骤

    (1)make distclean :清除临时文件、中间文件和配置文件;

    (2)make xxx_config(默认配置文件):得到内核的当前配置文件.config;

    (3)make menuconfig(或config、xconfig):进入配置用户界面,进行内核的详细配置;

    (4)make all:编译内核。

    注意:使用make命令时,先确认Makefile文件中的编译工具链是否定义正确。

    CROSS_COMPILE?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

    make xxx_config,即make x210ii_qt_defconfig,其作用是将/kernel/arch/$ARCH/configs目录下的默认配置文件x210ii_qt_defconfig拷贝至内核根目录下,并重新命名为.config,即.config文件为内核的当前配置文件。

    2.1 make xxx_config(配置文件名)解析

    不同架构下的配置文件不同,有$ARCH变量指定架构,从而读取相应的配置文件。$ARCH在Makefile中指定。

    ARCH?=  arm

    make menuconfig,生成一个内核配置的界面。menuconfig涉及到一下几个文件:

    2.2 make menuconfig(或config、xconfig)解析

    (1)内核源码根目录下的scripts文件夹

    menuconfig文字式图形界面是由ncurses库、/kernel/scripts目录下面的脚本文件支持生成的。

    (2)/arch/$ARCH/Kconfig,各层目录下的Kconfig文件

    menuconfig图形界面中的所有表项都来自Kconfig文件。

    (3)内核源码根目录下的.config文件、/kernel/include/generated/autoconfig.h文件

    menuconfig图形界面中所有表项的设置值都从.config文件中读取。menuconfig界面中的修改部分会同步至.config文件中;同时还会将所有的配置选项以宏的形式保存在/kernel/include/generated/autoconfig.h中,内核源码会根据其中的宏进行条件编译。

    .................................................................................................
    
    #define CONFIG_SND_S5PV2XX_SOC_WM8976 1
    
    #define CONFIG_IP_NF_TARGET_REDIRECT 1
    #define CONFIG_CRC32 1
    #define CONFIG_I2C_BOARDINFO 1
    #define CONFIG_NF_NAT_PROTO_SCTP 1
    #define CONFIG_HAVE_AOUT 1

    根据配置过程中生成的/kernel/include/generated/autoconfig.h文件,内核源码会根据其中的宏进行条件编译。(4)内核根目录下、各层子目录下的Makefile文件

     

    ....................................................................................................
    
    obj-$(CONFIG_IDE)+= ide/
    obj-$(CONFIG_SCSI)+= scsi/
    obj-$(CONFIG_ATA)+= ata/
    obj-$(CONFIG_MTD)+= mtd/
    obj-$(CONFIG_SPI)+= spi/
    obj-y+= net/
    obj-$(CONFIG_ATM)+= atm/
    obj-$(CONFIG_FUSION)+= message/
    
    obj-$(CONFIG_FIREWIRE)+= firewire/
    
    .....................................................................................................

    menuconfig图形界面用来配置内核选项。

    3. menuconfig图形界面的使用方法

    (1)上下方向键,浏览菜单目录;

    (2)enter键,执行选中项;

    (3)esc键,返回至上一页面;

    (4)/键,搜索表项;

    (5)?键,显示帮助信息;

    (5)Y、N、M代表表项的三种配置情况。

      Y:将选中的表项编入内核;

      N:将选中的表项从内核去除;

      M:将选中的表项模块化,即将这个表项编译为一个单独的内核模块.ko文件,不链接入内核,Linux启动会可动态加载或卸载该模块。

    [ ]表项不能实现模块化,< >表项可以实现模块化。表项前的括号里,*表示编入,空白表示去除,M表示模块化。

  • 相关阅读:
    CSS3实现投影效果
    @font-face使用在线字体
    JS全局对象的属性
    const命令声明变量应注意的几点
    IDEA设置不区分大小写提示
    分布式ID生成-雪花算法
    项目Git分支管理规范
    IDEA使用Mybatis插件 MyBatisCodeHelper-Pro
    解决码云出现git@gitee.com: Permission denied (publickey).
    安装RabbitMQ,一直提示Erlang版本过低
  • 原文地址:https://www.cnblogs.com/CaesarTao/p/10600498.html
Copyright © 2011-2022 走看看