分析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 语言并处理配置操作。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |