35 配置并非定制,而是内核的身份标识
# 35 配置并非定制,而是内核的身份标识
Linux内核既非为嵌入式系统而打造,也不是专为服务器而设计。它的构建目标是成为目标所需的样子,而它了解自身角色的唯一途径便是通过配置。
对于内核而言,.config并非一组偏好设置,而是一项结构性决策。它定义了内核被允许知晓什么、必须忽略什么,以及将包含自身的哪些部分。这并非定制层,而是身份的声明。
这种区别之所以有效,是因为内核在保持稳固的部分和可变的部分之间划清了界限。
保持稳固的是设计:系统调用接口、调度器、内存管理器、设备模型和内部进程架构。这些是不变的,无论运行在嵌入式环境还是云规模环境,无论是最小化还是功能丰富的场景,它们都定义了内核的结构。
硬件随目标而变化。嵌入式系统可能使用SPI连接的传感器和最小化的MMU;服务器可能依赖PCIe设备、NUMA内存和虚拟化扩展。但内核并非通过为每个平台重写逻辑来适应,而是通过框架保持一致性。
框架架起了逻辑与物理的桥梁,它们定义设备的功能,而非连接方式。网络栈不关心NIC是在PCIe上还是USB上,输入子系统不区分I2C上的触摸屏和PS/2上的键盘。重要的是每个驱动程序都符合共享框架。
这些框架是保持稳固的一部分,它们为不同的物理配置和统一的内核行为提供了共同基础。由于接口不变,逻辑也不会改变,只有其背后的硬件会改变,甚至这也只是因为目标需要。
可变的是内核周围系统的接口:ACPI或设备树、PCI或SPI、NUMA或flatmem、抢占式或实时、服务器级或精简版。内核不会在运行时扩展自身以匹配环境,而是在构建时就被塑造以履行分配的角色。
该角色不是被发现的,而是被声明的。架构、可用驱动程序和启用的子系统在内核运行前就已选定。内核不是通过反应来适应,而是通过接受定义来适应。
这就是为什么配置并非表面功夫,它不是对已存在的内核进行调优,而是告诉内核它被允许成为哪个版本的自身。一旦构建完成,该身份就固定了。
无论最终是在小型ARM板还是虚拟机监控器主机中,内核都按配置的方式运行。这不是因为它的猜测,而是因为它被指示如此。
配置不是定制,而是承诺。