最常用有效的内核裁剪方式是通过 make menuconfig 禁用无关硬件驱动:在 Device Drivers 中按类别关闭 Legacy、多余网卡、声卡、输入设备及显卡驱动,并结合 lspci -k、lsmod 结果精准裁剪,辅以 make localmodconfig 自动生成最小配置,最后保存验证。

直接进 make menuconfig,在 Device Drivers 子菜单里关掉不用的硬件驱动,是最常用也最有效的裁剪方式。
定位并禁用无关硬件驱动
进入内核源码目录后运行 make menuconfig,按方向键移动到 Device Drivers → 回车进入。这里按类别组织了所有驱动,常见可裁剪项包括:
-
Legacy / obsolete drivers:软驱(Floppy)、并口(Parallel port)、ISA总线设备等——现代PC基本不用,直接
[ ]禁用 -
Network device support:只保留你实际用的网卡类型(如
Realtek PCI Express Ethernet),关掉其他厂商驱动(Intel e1000、Broadcom tg3、老式 ISA 网卡等) -
Sound card support:若无音频需求,整个
Sound card support可设为[ ];否则只留对应声卡(如HDA Intel),删掉 USB Audio、AC97、旧 ALSA 模块 - Input device support:去掉红外遥控(IR)、游戏手柄、平板笔(Tablet)、旧 PS/2 键盘鼠标驱动(除非你真用 PS/2 接口)
-
Graphics support:嵌入式或服务器场景下,禁用 DRM/KMS 显卡驱动(如 AMDGPU、Nouveau、i915),只留 framebuffer(
Simple framebuffer)或完全不选
结合硬件清单精准裁剪
别凭感觉关,先查当前系统用了哪些驱动:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 运行
lspci -k查看 PCI 设备及其 kernel driver(比如显示Kernel driver in use: r8169) - 运行
lsmod列出已加载模块,重点关注pci-stub、usb-storage、uas等非必需模块 - 对没出现在
lspci或lsmod中的驱动,基本可安全禁用(如 FireWire、SCSI 主机适配器、老式 RAID 控制器)
用自动化工具辅助判断
如果目标平台固定,推荐用内核自带的智能裁剪命令:
- 先确保当前系统已加载所有必要驱动(如插好 USB 设备、启动网卡),再运行:
make localmodconfig - 它会读取
/proc/config.gz和lsmod输出,自动生成仅含当前加载模块的最小配置 - 生成的
.config仍需人工复查:比如某些驱动虽未加载但启动时必需(如 rootfs 所在磁盘的 SATA/AHCI 驱动),必须设为[*](内置)而非[M](模块)
保存配置并验证依赖
退出 menuconfig 前务必按 Esc→Save,保存为 .config。之后执行:
-
make olddefconfig:自动补全新选项默认值,避免编译报错 -
grep -n "CONFIG_.*=y" .config | wc -l:粗略统计启用的内置功能数,对比裁剪前后变化 - 编译前用
make prepare检查头文件和符号依赖,防止因误删底层驱动(如PCI、ACPI)导致构建失败


















