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

    (注:本文参考资料:朱有鹏嵌入式课程。本文为个人学习记录,如有错误,欢迎指正。内核版本:九鼎公司移植的2.6.35.7

    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-

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

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

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

    ARCH?=  arm

    2.2 make menuconfig(或config、xconfig)解析

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

    (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
    .................................................................................................

    (4)内核根目录下、各层子目录下的Makefile文件

    根据配置过程中生成的/kernel/include/generated/autoconfig.h文件,内核源码会根据其中的宏进行条件编译。

    ....................................................................................................

    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/

    .......................................................................................................

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

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

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

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

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

    (4)/键,搜索表项;

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

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

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

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

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

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

  • 相关阅读:
    【自制操作系统03】读取硬盘中的数据
    【自制操作系统02】环境准备与启动区实现
    【自制操作系统01】硬核讲解计算机的启动过程
    【30天自制操作系统】day06:中断
    java8 stream ,filter 等功能代替for循环
    如何评估工作量--三点估算
    python 错误AttributeError: 'module' object has no attribute 'AF_INET'
    python入门学习
    mysql5.7.10和mysql5.5.39两个版本对于group by函数的处理差异
    jenkins 构建时,取消构建测试类
  • 原文地址:https://www.cnblogs.com/linfeng-learning/p/9285550.html
Copyright © 2011-2022 走看看