加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

分析Linux内核:Kconfig/kbuild的秘密

发布时间:2021-06-11 08:35:03 所属栏目:Linux 来源:互联网
导读:深入理解 Linux 配置/构建系统是如何工作的。 自从 Linux 内核代码迁移到 Git 以来,Linux 内核配置/构建系统(也称为 Kconfig/kbuild)已存在很长时间了。然而,作为支持基础设施,它很少成为人们关注的焦点;甚至在日常工作中使用它的内核开发人员也从未

深入理解 Linux 配置/构建系统是如何工作的。

自从 Linux 内核代码迁移到 Git 以来,Linux 内核配置/构建系统(也称为 Kconfig/kbuild)已存在很长时间了。然而,作为支持基础设施,它很少成为人们关注的焦点;甚至在日常工作中使用它的内核开发人员也从未真正思考过它。

为了探索如何编译 Linux 内核,本文将深入介绍 Kconfig/kbuild 内部的过程,解释如何生成 .config 文件和 vmlinux/bzImage 文件,并介绍一个巧妙的依赖性跟踪技巧。

Kconfig

构建内核的第一步始终是配置。Kconfig 有助于使 Linux 内核高度模块化和可定制。Kconfig 为用户提供了许多配置目标:

配置目标 解释
config   利用命令行程序更新当前配置  
nconfig   利用基于 ncurses 菜单的程序更新当前配置  
menuconfig   利用基于菜单的程序更新当前配置  
xconfig   利用基于 Qt 的前端程序更新当前配置  
gconfig   利用基于 GTK+ 的前端程序更新当前配置  
oldconfig   基于提供的 .config 更新当前配置  
localmodconfig   更新当前配置,禁用没有载入的模块  
localyesconfig   更新当前配置,转换本地模块到核心  
defconfig   带有来自架构提供的 defconcig 默认值的新配置  
savedefconfig   保存当前配置为 ./defconfig(最小配置)  
allnoconfig   所有选项回答为 no 的新配置  
allyesconfig   所有选项回答为 yes 的新配置  
allmodconfig   尽可能选择所有模块的新配置  
alldefconfig   所有符号(选项)设置为默认值的新配置  
randconfig   所有选项随机选择的新配置  
listnewconfig   列出新选项  
olddefconfig   同 oldconfig 一样,但设置新符号(选项)为其默认值而无须提问  
kvmconfig   启用支持 KVM 访客内核模块的附加选项  
xenconfig   启用支持 xen 的 dom0 和 访客内核模块的附加选项  
tinyconfig   配置尽可能小的内核  

我认为 menuconfig 是这些目标中最受欢迎的。这些目标由不同的主程序host program处理,这些程序由内核提供并在内核构建期间构建。一些目标有 GUI(为了方便用户),而大多数没有。与 Kconfig 相关的工具和源代码主要位于内核源代码中的 scripts/kconfig/ 下。从 scripts/kconfig/Makefile 中可以看到,这里有几个主程序,包括 conf、mconf 和 nconf。除了 conf 之外,每个都负责一个基于 GUI 的配置目标,因此,conf 处理大多数目标。

从逻辑上讲,Kconfig 的基础结构有两部分:一部分实现一种来定义配置项(参见内核源代码下的 Kconfig 文件),另一部分解析 Kconfig 语言并处理配置操作。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读