内核配置决定了系统支持哪些驱动、文件系统、网络协议和调试能力。嵌入式 Linux 里,内核不是越全越好,也不是越小越好,而是要和硬件、rootfs、调试需求匹配。
一、配置入口
Buildroot 中:
1 | make linux-menuconfig |
内核源码中:
1 | make menuconfig |
保存配置:
1 | make savedefconfig |
项目要保存最终配置,不要只保存编译后的镜像。
二、内建还是模块
内建:
1 | [*] |
模块:
1 | <M> |
内建适合:
- 启动早期必须使用的驱动。
- rootfs 文件系统。
- 存储控制器。
- 控制台串口。
模块适合:
- 可选外设。
- 调试驱动。
- 不影响启动的功能。
如果 rootfs 挂载依赖某驱动,这个驱动不能只做模块,除非 initramfs 能先加载它。
三、常见必选项
根据项目选择:
- devtmpfs。
- procfs。
- sysfs。
- ext4、squashfs、ubifs。
- 网络协议栈。
- 对应存储控制器。
- 串口 console。
- watchdog。
- I2C、SPI、GPIO。
精简系统也要保留基本调试能力,否则现场问题很难定位。
四、模块加载
查看模块:
1 | lsmod |
加载:
1 | insmod my_driver.ko |
精简 rootfs 不一定有 modprobe 和模块依赖文件。此时 insmod 更常见。
模块路径:
1 | /lib/modules/$(uname -r)/ |
内核版本和模块必须匹配。
五、裁剪原则
裁剪前先确认:
- 硬件用不到。
- rootfs 不依赖。
- 调试不需要。
- 量产不需要。
不要盲目删网络、文件系统和调试功能。删错后排查成本会高于节省的空间。
六、验收清单
内核改完后测试:
- 能启动。
- rootfs 能挂载。
- 串口有日志。
- 网络可用。
- data 分区可读写。
- watchdog 可用。
- 关键外设 probe 成功。
内核配置变更必须配合启动日志和功能测试,不要只看编译是否通过。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_25_Kernel_Config_Modules/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。