内核版本

linux 2.6.32.2

配置内核的过程

配置内核可以通过执行 make menuconfig 来进行,下面分析该命令的执行流程

执行该目标

%config: scripts_basic outputmakefile FORCE
    $(Q)mkdir -p include/linux include/config
    $(Q)$(MAKE) $(build)=scripts/kconfig $@

依赖目标

scripts_basic:
    $(Q)$(MAKE) $(build)=scripts/basic

$(build) 的作用

### 
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
# Usage:
# $(Q)$(MAKE) $(build)=dir
build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
# 原文件中的注释已经说得很清楚了,这是一个执行特定 Makefile 的缩写
# 因此 $(Q)$(MAKE) $(build)=scripts/basic 可以转换为
# $(Q)$(MAKE) -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj=scripts/basic
# 即 make 执行 Makefile.build 这个文件

Makefile.build 关键语句

这几句的目的是把 obj 记录的目录下的 Makefile include 进来,从而编译一些主机上运行的程序

# src := $(obj)
# The filename Kbuild has precedence over Makefile
# kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
# kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
# include $(kbuild-file)

make menuconfig

现在回到原始目标上,make menuconfig 执行的指令如下

%config: scripts_basic outputmakefile FORCE
    $(Q)mkdir -p include/linux include/config
    $(Q)$(MAKE) $(build)=scripts/kconfig $@

# 即主要是执行
$(Q)$(MAKE) $(build)=scripts/kconfig menuconfig

同样的,它还会再次进入到 Makfile.build 文件中,并把 scripts/kconfig 目录下的 Makefile 包含进来,同时执行的目标变成了 menuconfig

scripts/kconfig/Makefile

对应的目标如下

ifdef KBUILD_KCONFIG
Kconfig := $(KBUILD_KCONFIG)
else
# 实际是这个值,比如 arch/arm/Kconfig
Kconfig := arch/$(SRCARCH)/Kconfig
endif

menuconfig: $(obj)/mconf
    $< $(Kconfig)

其依赖于 scripts/kconfig/mconf 这个程序,而此程序并不存在,在该 Makefile 以下的内容中给出了其生成规则,并且还会检查生成该程序所以来的程序是否存在,执行的脚本是 scripts/kconfig/lxdialog/check-lxdialog.sh,如果没有安装依赖库,则出现错误提示

# Check if we can link to ncurses
check() {
        $cc -xc - -o $tmp 2>/dev/null <<'EOF'
#include CURSES_LOC
main() {}
EOF
    if [ $? != 0 ]; then
        echo " *** Unable to find the ncurses libraries or the"       1>&2
        echo " *** required header files."                            1>&2
        echo " *** 'make menuconfig' requires the ncurses libraries." 1>&2
        echo " *** "                                                  1>&2
        echo " *** Install ncurses (ncurses-devel) and try again."    1>&2
        echo " *** "                                                  1>&2
        exit 1
    fi
}

这就是为什么执行 make menuconfig 之前需要先安装该程序的原因,因为需要用到它~

以上步骤顺利完成之后,scripts/kconfig/mconf 程序就顺利生成了,接下来就是真正的开始启动配置了

scripts/kconfig/mconf $(Kconfig)
# 以 arm 为例,以下路径其实已经被替换成了绝对路径,这里省略
scripts/kconfig/mconf arch/arm/Kconfig

至此,真正的配置工作开始了,mconf 开始读取 Kconfig 并进行解析,其解析规则可以查看 mconf.c 文件,当然了,没必要去看它如何实现的,只需要了解 Kconfig 的语法即可,其语法可以参考https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html

如果不出意外,现在终端上会显示一个图形界面,然后就可以对各个选项进行配置了,退出之后程序会把配置项写入到 .config 文件中,并生成相应的头文件供源码使用。

LInux内核配置过程的更多相关文章

  1. Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】

    本文转载自:http://www.codexiu.cn/linux/blog/34801/ 前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式—— ...

  2. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...

  3. Linux内核配置编译及基本调试方法

    一.Linux内核配置编译 1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux- 注:也可以直接修改顶层Makefile ARCH ?= arm CROSS ...

  4. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  5. Linux 内核配置和编译

    Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互 ...

  6. linux内核配置 kbuild

    Linux 内核配置机制 http://blog.csdn.net/dianhuiren/article/details/6917132 linux kbuild文档 http://blog.chin ...

  7. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  8. Linux内核启动过程start_kernel分析

    虽然题目是start_kernel分析,但是由于我在ubuntu环境下配置实验环境遇到了一些问题,我觉得有必要把这些问题及其解决办法写下来. 首先我使用的是Ubuntu14.04 amx64,以下的步 ...

  9. 学习笔记之Linux内核编译过程

    准备工作 物理主机:win8(32位) 虚拟机工具:VirtualBox_4.3.16_Win32 虚拟主机:xubuntu-12.04.4 安装virtualBox功能增强包 设置好虚拟机与主机的共 ...

随机推荐

  1. 微擎修改 icon.jpg 后项目主页未变

    微擎修改 icon.jpg 后项目主页Logo未变 产生原因: 设置了自定义图标,但系统未找到该图标,就选择使用默认的起始图标 解决办法: 在项目根目录位置上传一个图标名为 icon-custom.j ...

  2. pat 1136 A Delayed Palindrome(20 分)

    1136 A Delayed Palindrome(20 分) Consider a positive integer N written in standard notation with k+1 ...

  3. SqlServer2005 查询 第八讲 order by

    今天我们来说模糊查询 模糊查询 -- --模糊查询[主要用在搜索中]格式:select 字段的集合 from 表名 where 某个字段名 like 匹配条件 --注意:匹配条件通常含有通配符,通配符 ...

  4. Code Runner for VS Code 突破 1000 万下载量!支持运行超过 40 种语言

    记得三年多前,韩老师那时还在写 PHP(是的,没错!在微软写 PHP),同时需要写 Python 和 Node.js .所以在那时,支持多种语言的 VS Code 已经是笔者的主力编辑器了.唯一不足的 ...

  5. ubuntu 16.04 和 windows 10系统安装mysql 允许远程访问 | mysql user guide on ubuntu 16.04 and windows 10

    本文首发于个人博客https://kezunlin.me/post/36e618e7/,欢迎阅读! mysql user guide on ubuntu 16.04 and windows 10 Pa ...

  6. 红帽学习记录[RHCE] 防火墙与网络合作

    目录 防火墙 基本介绍 firewalld 区域zone 管理firewalld 关于富规则 定义 firewalld操作富规则的命令 语法 常用的示例 网络合作 链路聚合 网络组的文件 网络组命令 ...

  7. Nginx 跨域代理

    安装环境: win10 nginx-1.17.2 安装: 在写前端调用后台接口时,报了跨域的错误. 调试地址:http://localhost:5500/demo/encAjax.html 接口地址: ...

  8. 性能测试——记XX银行电票系统上线后宕机问题诊断优化

    四月份我们公司负责的电票系统上线了,这个系统上线比客户方其他系统上线还特殊,是二期改造项目,旧系统数据还要整合抽取到新系统中继续使用,而且该系统不是增量型方式开发上线的,而且全部开发完后全国上线的,这 ...

  9. C#Windows Forms 计算器--xdd

    一.计算器 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  10. phpstorm2019激活码

    6ZUMD7WWWU-eyJsaWNlbnNlSWQiOiI2WlVNRDdXV1dVIiwibGljZW5zZWVOYW1lIjoiSmV0cyBHcm91cCIsImFzc2lnbmVlTmFtZ ...