[Internal testing communication] Make Menuconfig 详细介绍配置项
Tofloor
poster avatar
LiuYongzhang
deepin
2025-11-03 19:23
Author

Make Menuconfig 详细介绍配置项

deepin 25 编译内核打包deb

基本概念

什么是 make menuconfig

make menuconfig 是一个基于文本模式的图形化配置工具,主要用于 Linux 内核和嵌入式项目的配置。它依托于 ncurses 库构建,提供了一个直观的菜单驱动界面,让开发者能够轻松地选择和配置各种编译选项。

工作原理

make menuconfig 的运行依赖于项目中的 Kconfig 文件。这些文件定义了:

  • 配置菜单的结构
  • 各个配置选项的属性(类型、默认值、依赖关系等)
  • 帮助信息和说明文档

当执行 make menuconfig 时,工具会读取所有 Kconfig 文件,构建出相应的菜单界面供用户交互。

主要用途

  1. 内核定制:选择需要编译进内核的功能和驱动
  2. 模块管理:决定哪些功能编译为可加载模块
  3. 系统优化:根据硬件配置优化内核参数
  4. 功能裁剪:移除不需要的功能以减小内核体积

安装和准备工作

系统要求

Debian/Ubuntu 系统:

sudo apt-get install build-essential libncurses5-dev libncursesw5-devsudo apt-get install gcc make git

RHEL/CentOS 系统:

sudo yum groupinstall "Development Tools"sudo yum install ncurses-devel ncurses

Fedora 系统:

sudo dnf groupinstall "Development Tools"sudo dnf install ncurses-devel

准备源代码

# 获取 Linux 内核源码(示例)git clone https://github.com/torvalds/linux.gitcd linux# 或者使用发行版提供的内核源码sudo apt-get source linux-image-$(uname -r)cd linux-*

启动配置界面

# 进入源码目录cd /path/to/source# 启动 menuconfigmake menuconfig

界面操作指南

**

menuconfig 主界面

基本操作键

按键 功能说明
方向键 ↑↓ 上下移动光标
方向键 →← 切换菜单项(Select/Exit/Help/Save/Load)
Enter 进入子菜单或确认选择
Space 切换选项状态(* 编译进内核 / M 编译为模块 / 空 不编译)
Y 设置为编译进内核(*)
N 设置为不编译(空)
M 设置为编译为模块(M)
? 显示当前选项的帮助信息
/ 搜索配置选项
Esc 返回上级菜单或退出
Tab 切换到按钮区域

界面布局说明

┌─────────────────────────────────────────────────────────────────┐│                     Linux/x86 6.5.0 Kernel Configuration         │  ← 标题栏├─────────────────────────────────────────────────────────────────┤│  Arrow keys navigate the menu.   selects submenus --->   │  ← 操作提示│  Highlighted letters are hotkeys.  Pressing  includes,    ││  excludes,  modularizes features.  Press  to exit. │├─────────────────────────────────────────────────────────────────┤│ [*] General setup  --->                                         │  ← 主菜单项│ [*] Enable loadable module support  --->                        ││ [*] Enable the block layer  --->                                ││ [*] Processor type and features  --->                           ││ [*] Power management and ACPI options  --->                     │  ← 配置选项列表│ [*] Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->             ││ [*] Executable file formats / Emulations  --->                  ││ [*] Networking support  --->                                    ││ [*] Device Drivers  --->                                        ││ [*] File systems  --->                                          │├─────────────────────────────────────────────────────────────────┤│          < Exit >    < Help >    < Save >    < Load >   │  ← 功能按钮└─────────────────────────────────────────────────────────────────┘


主要配置项详解
1. Code maturity level options
**

主要选项:

Prompt for development and/or incomplete code/drivers
显示开发中或未完成的代码和驱动
建议:生产环境选 N,开发测试选 Y

2. General setup
基本系统设置

Local version - append to kernel release
内核版本后缀,如 "-custom"
最大长度 64 字符
Support for paging of anonymous memory (swap)
启用交换分区支持
建议:必选 Y
System V IPC
System V 进程间通信支持
建议:必选 Y,许多程序依赖此功能
POSIX Message Queues
POSIX 消息队列支持
建议:选 Y 以保持兼容性
BSD Process Accounting
进程统计信息记录
建议:服务器环境选 Y,桌面环境可选 N
Kernel .config support
将配置信息编译进内核
建议:选 Y,便于后续维护
Enable access to .config through /proc/config.gz
通过 /proc/config.gz 访问配置
建议:选 Y,方便查看当前配置

3. Loadable module support
模块支持设置

Enable loadable module support
启用可加载模块支持
建议:必选 Y
Module unloading
允许卸载已加载的模块
建议:选 Y
Forced module unloading
允许强制卸载正在使用的模块
建议:开发环境选 Y,生产环境选 N
Module versioning support
模块版本支持
建议:选 Y 以支持不同版本内核的模块

4. Processor type and features
处理器相关设置

Processor family
选择处理器家族(如 Intel Core 2/AMD Opteron 等)
建议:根据实际硬件选择
Generic x86 support
通用 x86 支持
建议:选 Y 以保持兼容性
64-bit kernel
启用 64 位内核
建议:64 位系统选 Y
Symmetric multi-processing support
对称多处理支持
建议:多核 CPU 选 Y
Maximum number of CPUs
最大 CPU 数量限制
建议:根据实际硬件设置
Preemption Model
抢占模式选择:
No Forced Preemption (Server)
Voluntary Kernel Preemption (Desktop)
Preemptible Kernel (Low-Latency Desktop)
建议:服务器选 Server,桌面选 Desktop,实时系统选 Low-Latency

5. Networking support
网络支持设置
**


Networking support
启用网络支持
建议:必选 Y
Packet socket
包套接字支持(如 tcpdump 需要)
建议:选 Y
Unix domain sockets
Unix 域套接字
建议:必选 Y
TCP/IP networking
TCP/IP 网络支持
建议:必选 Y
IP: multicasting
IP 多播支持
建议:有需要选 Y,否则 N
The IPv6 protocol
IPv6 协议支持
建议:选 Y 以支持 IPv6
Network packet filtering framework (Netfilter)
网络包过滤框架
建议:防火墙需要选 Y

6. Device Drivers
设备驱动配置
这是最复杂的部分,包含所有硬件设备的驱动支持:

Generic Driver Options
通用驱动选项
SCSI device support
SCSI 设备支持
ATA/ATAPI/MFM/RLL support
IDE/SATA 设备支持
Serial ATA and Parallel ATA drivers
SATA/IDE 控制器驱动
USB support
USB 设备支持
Network device support
网络设备驱动
Input device support
输入设备驱动(键盘、鼠标等)
Graphics support
图形设备驱动
Sound card support
声卡驱动
I2C support
I2C 总线支持
SPI support
SPI 总线支持

7. File systems
文件系统支持

Second extended fs support
ext2 文件系统支持
The Extended 3 (ext3) filesystem
ext3 文件系统支持
The Extended 4 (ext4) filesystem
ext4 文件系统支持
建议:必选 Y
Btrfs filesystem support
Btrfs 文件系统支持
XFS filesystem support
XFS 文件系统支持
F2FS filesystem support
F2FS 文件系统支持(主要用于闪存设备)
VFAT (Windows-95) fs support
FAT32 文件系统支持
NTFS file system support
NTFS 文件系统支持
ISO 9660 CDROM file system support
CDROM 文件系统支持
Pseudo filesystems
伪文件系统(proc、sysfs 等)

8. Kernel hacking
内核调试选项

Show timing information on printks
在 printk 输出中显示时间信息
Magic SysRq key
启用 Magic SysRq 功能
建议:选 Y,紧急情况下很有用
Kernel debugging
内核调试支持
建议:开发环境选 Y,生产环境选 N
Debug memory allocations
内存分配调试
建议:开发环境选 Y

9. Security options
安全选项

Enable the securityfs filesystem
启用 securityfs 文件系统
NSA SELinux Support
SELinux 支持
AppArmor support
AppArmor 支持
TOMOYO Linux Support
TOMOYO Linux 支持


配置状态说明
状态标识



标识
含义
说明




[*]
编译进内核
功能直接编译到内核镜像中


[M]
编译为模块
功能编译为可加载模块,需要时动态加载


[ ]
不编译
功能不包含在内核中


< >
未选中
功能当前未被选择


{*}
依赖选中
功能因依赖关系被自动选中


{M}
依赖模块
功能因依赖关系被自动设为模块



依赖关系处理
menuconfig 会自动处理配置选项之间的依赖关系:

正向依赖:如果选项 A 依赖选项 B,则必须先选中 B 才能选中 A
反向依赖:如果选项 A 与选项 B 冲突,则不能同时选中
自动选择:某些选项被选中后,会自动选中其依赖的基础选项


常见问题解决
1. 启动错误
问题:*** Unable to find the ncurses libraries or the required header files.
# 解决方法:安装 ncurses 开发库sudo apt-get install libncurses5-dev libncursesw5-dev  # Debian/Ubuntusudo yum install ncurses-devel                          # RHEL/CentOSsudo dnf install ncurses-devel                          # Fedora

**问题:**No rule to make target 'menuconfig'.
# 解决方法:1. 确认在正确的源码目录2. 确认目录中有 Makefile 文件3. 检查源码是否完整

2. 界面显示问题
问题:界面乱码或显示异常
# 解决方法:export TERM=xterm# 或export TERM=linux# 或export NCURSES_NO_UTF8_ACS=1

3. 配置错误
问题:配置后无法编译通过
# 解决方法:1. 恢复默认配置make defconfig2. 基于当前配置更新make oldconfig3. 清理配置make mrproper

4. 模块加载问题
问题:编译的模块无法加载
# 检查模块依赖modinfo module_name.ko# 检查内核版本匹配uname -rmodinfo module_name.ko | grep vermagic# 重新编译模块make modulessudo make modules_install


高级使用技巧
1. 搜索功能
# 在 menuconfig 界面按 / 键# 输入搜索关键词,如 "wifi" 或 "usb"# 系统会显示所有匹配的配置选项及其路径

2. 配置比较
# 保存当前配置cp .config config.old# 修改配置后比较差异diff config.old .config

3. 批量配置
# 使用 scripts/config 工具批量修改配置scripts/config --enable CONFIG_OPTIONscripts/config --disable CONFIG_OPTIONscripts/config --module CONFIG_OPTION# 示例:启用所有 USB 相关配置scripts/config --enable CONFIG_USB

4. 配置片段
# 创建配置片段文件 config.fragmentCONFIG_USB=yCONFIG_WIFI=mCONFIG_BT=n# 应用配置片段cat config.fragment >> .configmake oldconfig

5. 保存和加载配置
# 保存配置make savedefconfig  # 保存为 defconfigcp .config my_custom_config# 加载配置make defconfig      # 加载默认配置cp my_custom_config .configmake oldconfig      # 更新配置


配置文件管理
.config 文件格式
# 配置文件示例 .configCONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_GOV_POWERSAVE=mCONFIG_CPU_FREQ_GOV_USERSPACE=mCONFIG_CPU_FREQ_GOV_ONDEMAND=yCONFIG_CPU_FREQ_GOV_CONSERVATIVE=m# 注释行# CONFIG_DEBUG_KERNEL is not set# 布尔选项CONFIG_SMP=yCONFIG_X86_64=y# 字符串选项CONFIG_LOCALVERSION="-custom"# 数值选项CONFIG_HZ=300

配置文件操作
# 查看当前配置cat .config# 搜索特定配置grep CONFIG_USB .config# 统计配置数量grep -c "CONFIG_" .config# 备份配置cp .config config.backup.$(date +%Y%m%d)# 恢复配置cp config.backup.20240101 .config

配置验证
# 验证配置的完整性make oldconfig# 检查配置依赖make allyesconfig    # 启用所有选项make allmodconfig    # 启用所有可模块化选项make allnoconfig     # 禁用所有选项

常用配置模板
最小化配置:
make allnoconfig# 然后手动启用必要的功能

默认配置:
make defconfig

发行版配置:
# 使用当前系统的配置cp /boot/config-$(uname -r) .configmake oldconfig


总结
make menuconfig 是 Linux 内核和嵌入式开发中非常重要的配置工具。通过本文档的介绍,您应该能够:

熟练使用 menuconfig 的基本操作
理解各个主要配置项的含义和用途
掌握常见问题的解决方法
应用高级技巧来提高配置效率

最佳实践建议

备份配置:每次修改前备份 .config 文件
逐步测试:先进行最小化配置,然后逐步添加功能
文档记录:记录重要的配置选择和理由
版本控制:将配置文件纳入版本控制系统
定期更新:随着内核版本更新,及时更新配置

进一步学习资源

Linux Kernel Documentation
The Linux Kernel Configuration Guide
Kernel Build System

通过不断实践和学习,您将能够熟练掌握 make menuconfig 的使用,为您的项目定制出最优的内核配置。
Reply Favorite View the author
All Replies
jjcui8595
deepin
Resources Team
2025-11-03 20:45
#1

大赞,收藏like

Reply View the author